Merge pull request #1300 from apache/goodbye-master

Remove master content, point to main
diff --git a/.babelrc b/.babelrc
deleted file mode 100644
index 575accf..0000000
--- a/.babelrc
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "presets": [
-    "@babel/react",
-    "@babel/env"
-  ],
-  "plugins": ["@babel/plugin-transform-object-assign", "@babel/plugin-proposal-object-rest-spread",
-    "@babel/plugin-proposal-class-properties", "babel-plugin-array-includes","@babel/plugin-transform-async-to-generator"]
-}
diff --git a/.env b/.env
deleted file mode 100644
index d18f8e8..0000000
--- a/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-# Default environment variables for the Docker Compose files in /docker
-# This file needs to be placed where the docker-compose command is run from.
-
-# Used to provide a CouchDB 2 / 3 build matrix in .travis.yml
-COUCHDB_IMAGE=ibmcom/couchdb3
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 1680c40..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,11 +0,0 @@
-# node_modules ignored by default
-
-dist/
-test/
-assets/
-
-app/**/*.react.js
-app/addons/.module-cache
-app/addons/**/assets/*
-app/addons/**/dependencies/*
-app/load_addons.js
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index 37e2aa0..0000000
--- a/.eslintrc
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "root": true,
-  "parser": "babel-eslint",
-
-  "plugins": [
-    "react"
-  ],
-
-  "extends": [
-    "eslint:recommended",
-    "plugin:react/recommended"
-  ],
-
-  "rules": {
-    "semi": ["error", "always"],
-    "keyword-spacing": "error",
-    "space-infix-ops": "error",
-    "space-before-blocks": "error",
-    "array-bracket-spacing": ["error", "never"],
-    "brace-style": ["error", "1tbs", { "allowSingleLine": true }],
-    "comma-spacing": ["error", {"before": false, "after": true}],
-    "computed-property-spacing": ["error", "never"],
-    "eol-last": "error",
-    "indent": ["error", 2, { "SwitchCase": 1, "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }],
-    "no-case-declarations": "off",
-    "no-console": [1, { "allow": ["warn", "error", "info"] }],
-    "no-else-return": "error",
-    "no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
-    "no-trailing-spaces": "error",
-    "semi-spacing": ["error", {"before": false, "after": true}],
-    "space-in-parens": ["error", "never"],
-    "space-unary-ops": "error",
-    "no-unused-vars": ["error", {"varsIgnorePattern": "ReactDOM"}],
-    "react/display-name": "off",
-    // disabling for now since there are too many components without PropTypes
-    "react/prop-types": "off"    
-  },
-
-  "parserOptions": {
-    "sourceType": "module",
-    "ecmaFeatures": {
-      "jsx": true,
-      "experimentalObjectRestSpread": true
-    }
-  },
-
-  "env": {
-    "browser": true,
-    "node": true,
-    "jquery": true,
-    "amd": true,
-    "mocha": true,
-    "phantomjs": true,
-    "es6": true
-  },
-
-  "globals": {
-    "document": true,
-    "window": true,
-    "location": true,
-    "alert": true,
-    "console": true,
-    "clearInterval": true,
-    "setInterval": true,
-    "setTimeout": true,
-    "prompt": true,
-    "confirm": true,
-
-    "jQuery": true,
-    "Backbone": true,
-    "$": true,
-    "_": true,
-    "require": true,
-    "module": true,
-    "sinon": true,
-    "it": true,
-    "describe": true,
-    "beforeEach": true,
-    "afterEach": true,
-    "before": true,
-    "after": true,
-    "define": true,
-    "expect": true,
-    "prettyPrint": true,
-    "jest": true
-  },
-
-  "settings": {
-    "react": {
-      "version": "detect"
-    }
-  }
-}
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index be4f816..0000000
--- a/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--- Provide a general summary of the issue in the Title above -->
-
-## Expected Behavior
-<!--- If you're describing a bug, tell us what should happen -->
-<!--- If you're suggesting a change/improvement, tell us how it should work -->
-
-## Current Behavior
-<!--- If describing a bug, tell us what happens instead of the expected behavior -->
-<!--- If suggesting a change/improvement, explain the difference from current behavior -->
-
-## Possible Solution
-<!--- Not obligatory, but suggest a fix/reason for the bug, -->
-<!--- or ideas how to implement the addition or change -->
-
-## Steps to Reproduce (for bugs)
-<!--- Provide a link to a live example, or an unambiguous set of steps to -->
-<!--- reproduce this bug. Include code to reproduce, if relevant -->
-1.
-2.
-3.
-4.
-
-## Context
-<!--- How has this issue affected you? What are you trying to accomplish? -->
-<!--- Providing context helps us come up with a solution that is most useful in the real world -->
-
-## Your Environment
-<!--- Include as many relevant details about the environment you experienced the bug in -->
-* Version used:
-* Browser Name and version:
-* Operating System and version (desktop or mobile):
-* Link to your project:
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index cd39026..0000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,42 +0,0 @@
-<!-- Thank you for your contribution!
-
-     Please file this form by replacing the Markdown comments
-     with your text. If a section needs no action - remove it.
-
-     Also remember, that CouchDB uses the Review-Then-Commit (RTC) model
-     of code collaboration. Positive feedback is represented +1 from committers
-     and negative is a -1. The -1 also means veto, and needs to be addressed
-     to proceed. Once there are no objections, the PR can be merged by a
-     CouchDB committer.
-
-     See: http://couchdb.apache.org/bylaws.html#decisions for more info. -->
-
-## Overview
-
-<!-- Please give a short brief for the pull request,
-     what problem it solves or how it makes things better. -->
-
-## Testing recommendations
-
-<!-- Describe how we can test your changes.
-     Does it provides any behaviour that the end users
-     could notice? -->
-
-## GitHub issue number
-
-<!-- If this is a significant change, please file a separate issue at:
-     https://github.com/apache/couchdb-fauxton/issues
-     and include the number here and in commit message(s) using
-     syntax like "Fixes #472" or "Fixes apache/couchdb#472".  -->
-
-## Related Pull Requests
-
-<!-- If your changes affects multiple components in different
-     repositories please put links to those pull requests here.  -->
-
-## Checklist
-
-- [ ] Code is written and works correctly;
-- [ ] Changes are covered by tests;
-- [ ] Documentation reflects the changes;
-- [ ] Update [rebar.config.script](https://github.com/apache/couchdb/blob/master/rebar.config.script) with the correct tag once a new Fauxton release is made
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 2d7315c..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,48 +0,0 @@
-node_modules
-dist
-build
-app/load_addons.js
-!app/addons/
-app/addons/*
-!app/addons/activetasks
-!app/addons/config
-!app/addons/cluster
-!app/addons/components
-!app/addons/replication
-!app/addons/auth
-!app/addons/permissions
-!app/addons/verifyinstall
-!app/addons/compaction
-!app/addons/fauxton
-!app/addons/databases
-!app/addons/documents
-!app/addons/documentation
-!app/addons/styletests
-!app/addons/cors
-!app/addons/setup
-!app/addons/search
-!app/addons/news
-settings.json*
-i18n.json
-!settings.json.default
-!settings.json.default.json
-!i18n.json.default.json
-test/test.config.js
-app/initialize.js
-.module-cache
-test/nightwatch_tests/nightwatch.json
-test/nightwatch_tests/reports/*
-test/nightwatch_tests/selenium/*
-!test/nightwatch_tests/selenium/.gitkeep
-.DS_Store
-selenium-debug.log
-npm-debug.log
-test/bundle.js
-test/bundle.dev.js
-test/templates.js
-test/dashboard.assets
-# test coverage dir
-coverage
-
-# Jetbrains IDE
-.idea/
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 0da95e4..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-app/
-assets/
-tasks
-test/
-dist/debug
-dist/tmp-out
diff --git a/.travis.yml b/.travis.yml
index 9354f57..735a399 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,35 +1,6 @@
 language: node_js
-node_js:
-   - "10"
-sudo: false
-services:
-  - docker
 git:
   depth: 1
-env:
-  - COUCHDB_IMAGE=apache/couchdb:2.3.1 NIGHTWATCH_SKIPTAGS="search,partitioned"
-  - COUCHDB_IMAGE=apache/couchdb:3 NIGHTWATCH_SKIPTAGS="search,nonpartitioned,couchdb-v2-only"
-  # - COUCHDB_IMAGE=couchdb:dev NIGHTWATCH_SKIPTAGS="search,nonpartitioned"
 
-before_install:
-  - npm install -g npm@latest
-  - ./bin/build-couchdb-dev.sh
-install:
-  - npm ci
-before_script:
-  - travis_retry ./bin/docker-up-and-check.sh
-  - curl http://127.0.0.1:5984
-  - npm run stylecheck
-  - npm ls --production --depth=0
-  - npm test
-  - grunt debugDev
-  - DIST=./dist/debug ./bin/fauxton &
-  - sleep 30
 script:
-  - ./node_modules/.bin/grunt nightwatch_retries
-after_script:
-  - npm run docker:down
-cache:
-  - apt
-  - directories:
-    - "$HOME/.npm"
+  - echo "Passed!"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 1d6dd22..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Contributing to Fauxton
-
-Please take a moment to review this document in order to make the contribution
-process easy and effective for everyone involved.
-
-Following these guidelines helps to communicate that you respect the time of
-the developers managing and developing this open source project. In return,
-they should reciprocate that respect in addressing your issue, assessing
-changes, and helping you finalize your pull requests.
-
-Contributions to CouchDB are governed by our [Code of Conduct][6] and a set of
-[Project Bylaws][7]. Apache CouchDB itself also has a [CONTRIBUTING.md][9] if
-you want to help with the larger project. Come join us!
-
-## Contributor quick start
-
-If you never created a pull request before, welcome :tada: :smile: [Here is a great tutorial](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
-on how to send one :)
-
-The [Readme file](https://github.com/apache/couchdb-fauxton/blob/master/readme.md) has information about how to get the project set up for development.
-
-## Guide to Contributions
-
-We follow our coding-styleguide to make it easier for everyone to write, read and review code:
-[https://github.com/apache/couchdb-fauxton/blob/master/styleguide.md](https://github.com/apache/couchdb-fauxton/blob/master/styleguide.md)
-
-To start working on a specific ticket, create a branch with the GitHub Issue # followed by a traincase description of the issue.
-
-> e.g. 1234-Added-support-for-list-functions
-
-If there is no GH Issue for the issue you have, you don't have to create one. Please describe the issue, how it happens and how you fixed it in the commit message.
-
-Commit messages should follow the following style:
-
-```
-A brief one line description < 72 chars
-
-Followed by further explanation if needed, this should be wrapped at
-around 72 characters. Most commits should reference an existing
-issue
-
-Fixes #XXX (if there is a GH Issue)
-Fixes apache/couchdb#XXX (if there is a CouchDB project GH Issue)
-```
-
-Before you submit the Pull Request, please [run our test suite](#tests.md) and make sure that it passes.
-
-We regularly check the PR list for Fauxton and should get back
-to you with a code review. If no one has responded to you yet, you can find us on [Freenode IRC in #couchdb-dev][8].
-Ping **garren**, **robertkowalski** or **michellep** though anyone in the room should be able to help you.
-
-## Get in Touch
-
-We appreciate constructive feedback from people who use CouchDB, so don't be shy. We know there are bugs and we know
-there is room for improvement.
-
-ʕ´•ᴥ•`ʔ Thanks!
-
--- Fauxton team
-
-[6]: http://couchdb.apache.org/conduct.html
-[7]: http://couchdb.apache.org/bylaws.html
-[8]: http://webchat.freenode.net?channels=%23couchdb-dev
-[9]: https://github.com/apache/couchdb/blob/master/CONTRIBUTING.md
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 215bbf4..0000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,266 +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.
-
-
-// This is the main application configuration file.  It is a Grunt
-// configuration file, which you can learn more about here:
-// https://github.com/cowboy/grunt/blob/master/docs/configuring.md
-
-/*jslint node: true */
-"use strict";
-
-module.exports = function (grunt) {
-  var helper = require('./tasks/helper.js'),
-      initHelper = helper.init(grunt),
-      _ = grunt.util._;
-
-  var couch_config = function () {
-    var default_couch_config = {
-      fauxton: {
-        db: helper.couch + 'fauxton',
-        app: './couchapp.js',
-        options: {
-          okay_if_missing: true
-        }
-      }
-    };
-
-    var settings_couch_config = initHelper.readSettingsFile().couch_config;
-    return settings_couch_config || default_couch_config;
-  }();
-
-  var cleanableAddons =  function () {
-    var theListToClean = [];
-    initHelper.processAddons(function (addon) {
-      // Only clean addons that are included from a local dir
-      if (addon.path) {
-        theListToClean.push("app/addons/" + addon.name);
-      }
-    });
-
-    return theListToClean;
-  }();
-
-  var cleanable = function () {
-    // Whitelist files and directories to be cleaned
-    // You'll always want to clean these two directories
-    // Now find the external addons you have and add them for cleaning up
-    return _.union(["dist/", "app/load_addons.js"], cleanableAddons);
-  }();
-
-  var templateSettings = (function getTemplateSettings () {
-    var settings = initHelper.readSettingsFile();
-
-    var i18n = JSON.stringify(initHelper.readI18nFile(), null, ' ');
-
-    Object.keys(settings.template).forEach(function (key) {
-      settings.template[key].variables.generationDate = new Date().toISOString();
-      if (!settings.template[key].variables.generationLabel) {
-        settings.template[key].variables.generationLabel = 'Generated: ';
-      }
-      settings.template[key].app.i18n = i18n;
-    });
-
-    return settings.template;
-  })();
-
-  var config = {
-
-    // The clean task ensures all files are removed from the dist/ directory so
-    // that no files linger from previous builds.
-    clean: {
-      options: {
-        'force': true
-      },
-      release:  cleanable
-    },
-
-    template: templateSettings,
-
-    // Copy build artifacts and library code into the distribution
-    // see - http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
-    copy: {
-      couchdb: {
-        files: [
-          // this gets built in the template task
-          {src: "dist/release/index.html", dest: "../../share/www/index.html"},
-          {src: ["**"], dest: '../../share/www/dashboard.assets/', cwd: 'dist/release/dashboard.assets/',  expand: true},
-        ]
-      },
-      couchdebug: {
-        files: [
-          // this gets built in the template task
-          {src: "dist/debug/index.html", dest: "../../share/www/index.html"},
-        ]
-      },
-      dist:{
-        files:[
-          {src: 'dist/debug/index.html', dest: 'dist/release/index.html'},
-          {src: './favicon.ico', dest: "dist/release/favicon.ico"}
-        ]
-      },
-
-      distDepsRequire: {
-        files:[
-          {src: 'assets/**', dest: 'dist/tmp-out/', flatten: false, expand: false},
-        ]
-      },
-
-      debug: {
-        files:[
-          {src: './favicon.ico', dest: "dist/debug/favicon.ico"}
-        ]
-      },
-
-      testfiles: {
-        files:[
-          {src: ['test/**'], dest: 'dist/debug/', flatten: false, expand: true},
-          {src: 'assets/**', dest: 'dist/debug/', flatten: false, expand: false},
-        ]
-      }
-    },
-
-    get_deps: {
-      "default": {
-        src: "settings.json"
-      }
-    },
-
-    gen_load_addons: {
-      "default": {
-        src: "settings.json"
-      }
-    },
-    gen_initialize: templateSettings,
-    checkTestExists: templateSettings,
-
-    mkcouchdb: couch_config,
-    rmcouchdb: couch_config,
-    couchapp: couch_config,
-
-    shell: {
-      webpack: {
-        command: 'npm run webpack:dev'
-      },
-
-      webpackrelease: {
-        command: 'npm run webpack:release'
-      }
-    },
-
-    exec: {
-      start_nightWatch: {
-        command: 'node ' + __dirname + '/node_modules/nightwatch/bin/nightwatch' +
-        ' -c ' + __dirname + '/test/nightwatch_tests/nightwatch.json',
-        options: {
-          maxBuffer: 1000 * 1024
-        }
-      },
-      start_nightWatch_with_retries: {
-        command: 'node ' + __dirname + '/node_modules/nightwatch/bin/nightwatch' +
-        ' -c ' + __dirname + '/test/nightwatch_tests/nightwatch.json' +
-        ' --suiteRetries 3',
-        options: {
-          maxBuffer: 1000 * 1024
-        }
-      }
-    },
-
-    // generates the nightwatch.json file with appropriate content for this env
-    initNightwatch: {
-      default: {
-        settings: initHelper.readSettingsFile(),
-        template: 'test/nightwatch_tests/nightwatch.json.underscore',
-        dest: 'test/nightwatch_tests/nightwatch.json'
-      }
-    }
-  };
-
-  grunt.initConfig(config);
-
-  /*
-   * Load Grunt plugins
-   */
-  // Load fauxton specific tasks
-  grunt.loadTasks('tasks');
-
-  grunt.loadNpmTasks('grunt-couchapp');
-  grunt.loadNpmTasks('grunt-exec');
-  grunt.loadNpmTasks('grunt-contrib-copy');
-  grunt.loadNpmTasks('grunt-contrib-clean');
-  grunt.loadNpmTasks('grunt-shell');
-  /*
-   * Default task
-   */
-  // defult task - install minified app to local CouchDB
-  grunt.registerTask('default', 'couchdb');
-
-  /*
-   * Transformation tasks
-   */
-  grunt.registerTask('test', ['clean:release', 'dependencies', 'copy:debug', 'gen_initialize:development']);
-
-  // Fetch dependencies (from git or local dir)
-  grunt.registerTask('dependencies', ['get_deps', 'gen_load_addons:default']);
-
-  // minify code and css, ready for release.
-  grunt.registerTask('build', ['copy:distDepsRequire', 'shell:webpackrelease']);
-  /*
-   * Build the app in either dev, debug, or release mode
-   */
-  // dev server
-  grunt.registerTask('dev', function () {
-    console.warn('This is deprecated. Please run npm run dev instead');
-  });
-
-  // build a debug release
-  grunt.registerTask('debug', ['clean', 'dependencies', "gen_initialize:development",
-    'copy:debug']);
-
-  grunt.registerTask('debugDev', ['clean', 'dependencies', "gen_initialize:development",
-    'copy:debug', 'shell:webpack']);
-
-  grunt.registerTask('devSetup', ['dependencies', "gen_initialize:development",
-    'copy:debug']);
-  grunt.registerTask('devSetupWithClean', ['clean', 'devSetup']);
-
-  grunt.registerTask('watchRun', ['clean:watch', 'dependencies', 'shell:stylecheck']);
-
-  // build a release
-  grunt.registerTask('release_commons_prefix', ['clean', 'dependencies']);
-  grunt.registerTask('release_commons_suffix', ['build', 'copy:dist']);
-
-  grunt.registerTask('release', ['release_commons_prefix', 'gen_initialize:release', 'release_commons_suffix']);
-  grunt.registerTask('couchapp_release', ['release_commons_prefix', 'gen_initialize:couchapp', 'release_commons_suffix']);
-
-  /*
-   * Install into CouchDB in either debug, release, or couchapp mode
-   */
-  // make a development install that is server by mochiweb under _utils
-  grunt.registerTask('couchdebug', ['debug', 'copy:couchdebug']);
-  // make a minimized install that is server by mochiweb under _utils
-  grunt.registerTask('couchdb', ['release', 'copy:couchdb']);
-  // make an install that can be deployed as a couchapp
-  grunt.registerTask('couchapp_setup', ['couchapp_release']);
-  // install fauxton as couchapp
-  grunt.registerTask('couchapp_install', ['rmcouchdb:fauxton', 'mkcouchdb:fauxton', 'couchapp:fauxton']);
-  // setup and install fauxton as couchapp
-  grunt.registerTask('couchapp_deploy', ['couchapp_setup', 'couchapp_install']);
-
-  /*
-   * Nightwatch functional testing
-   */
-  //Start Nightwatch test from terminal, using: $ grunt nightwatch
-  grunt.registerTask('nightwatch', ['initNightwatch', 'exec:start_nightWatch']);
-  //Same as above but the Nightwatch runner will retry tests 3 times before failing
-  grunt.registerTask('nightwatch_retries', ['initNightwatch', 'exec:start_nightWatch_with_retries']);
-};
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index e747955..0000000
--- a/LICENSE
+++ /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/__mocks__/fileMock.js b/__mocks__/fileMock.js
deleted file mode 100644
index 86059f3..0000000
--- a/__mocks__/fileMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'test-file-stub';
diff --git a/__mocks__/styleMock.js b/__mocks__/styleMock.js
deleted file mode 100644
index f053ebf..0000000
--- a/__mocks__/styleMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = {};
diff --git a/app/addons/activetasks/__tests__/components.test.js b/app/addons/activetasks/__tests__/components.test.js
deleted file mode 100644
index d5dea22..0000000
--- a/app/addons/activetasks/__tests__/components.test.js
+++ /dev/null
@@ -1,86 +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.
-import TableHeader from '../components/tableheader';
-import FilterTabs from '../components/filtertabs';
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('Active Tasks -- Components', () => {
-
-  describe('Active Tasks Table (Components)', () => {
-    describe('Active Tasks Filter tray', () => {
-
-      const radioTexts = [
-        'Replication',
-        'Database Compaction',
-        'Indexer',
-        'View Compaction'
-      ];
-
-      it('should trigger change to radio buttons', () => {
-        radioTexts.forEach((text) => {
-          let spy = sinon.spy();
-          const tabs = mount(
-            <FilterTabs
-              onRadioClick={spy}
-              selectedRadio={"All Tasks"}
-              radioNames={radioTexts}
-            />
-          );
-
-          tabs.find(`input[value="${text}"]`).simulate('change');
-          expect(spy.calledOnce).toBeTruthy();
-        });
-      });
-
-      it('should trigger change to search term', () => {
-        const spy = sinon.spy();
-        const tabs = mount(
-          <FilterTabs
-            onSearch={spy}
-            selectedRadio={"All Tasks"}
-          />
-        );
-        tabs.find('.searchbox').simulate('change', {target: {value: 'searching'}});
-        expect(spy.calledOnce).toBeTruthy();
-      });
-    });
-
-    describe('Active Tasks Table Headers', () => {
-      const tableTexts = [
-        'type',
-        'database',
-        'started-on'
-      ];
-
-      it('should trigger change to radio buttons', () => {
-
-        tableTexts.forEach((text) => {
-          let spy = sinon.spy();
-          const table = mount(
-            <table>
-              <TableHeader
-                onTableHeaderClick={spy}
-                headerIsAscending={true}
-                sortByHeader={"All Tasks"}
-              />
-            </table>
-          );
-
-          table.find(`.${text}`).simulate('click');
-          expect(spy.calledOnce).toBeTruthy();
-        });
-      });
-    });
-  });
-});
diff --git a/app/addons/activetasks/__tests__/fakeActiveTaskResponse.js b/app/addons/activetasks/__tests__/fakeActiveTaskResponse.js
deleted file mode 100644
index bf60a47..0000000
--- a/app/addons/activetasks/__tests__/fakeActiveTaskResponse.js
+++ /dev/null
@@ -1,118 +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.
-export default [
-  {
-    "user": "okra",
-    "updated_on": 10,
-    "type": "replication",
-    "target": "https://okra.fake.com/okra_rep/",
-    "doc_write_failures": 0,
-    "doc_id": "rep_1",
-    "continuous": true,
-    "checkpointed_source_seq": "3-g1AAAAEkeJyFzkEOgjAQBdAJkHgOPUBDQS1dyVVmaE0l0CaIa72Z3qyOwahscPMn-Zm8_A4AMpca2BhqwmBrQzIXfQj-7E7eiqYLF4N-FN6OHf8mCHSIMbYuwbTnYiUllUbJl7H-GNUSQTUnXd8KTEqR467Qc0UtKT7jhBsfhu5fCa3SFR3nUvlfekzS76a9Vmi37RPEPVpb",
-    "checkpoint_interval": 5000,
-    "changes_pending": null,
-    "pid": "<0.10487.5819>",
-    "node": "fake1@fake.net",
-    "docs_read": 0,
-    "docs_written": 0,
-    "missing_revisions_found": 0,
-    "replication_id": "07d9a41f181ce11b93ba1855ca7+continuous+create_target",
-    "revisions_checked": 0,
-    "source": "https://okra.fake.com/okra/",
-    "source_seq": 0,
-    "started_on": 9
-  },
-  {
-    "user": "ooo",
-    "updated_on": 8,
-    "type": "indexer",
-    "node": "fake2@fake2.net",
-    "pid": "<0.10541.4469>",
-    "changes_done": 145,
-    "database": "shards/00000000-3fffffff/ooo/fakedatabase.1234567890abc",
-    "design_document": "_design/superpurple",
-    "progress": 0,
-    "started_on": 7,
-    "total_changes": 22942
-  },
-  {
-    "updated_on": 6,
-    "node": "fake3@fake3.net",
-    "pid": "<0.1152.4474>",
-    "changes_done": 144001,
-    "database": "shards/00000000-3fffffff/global_changes.1398718618",
-    "progress": 66,
-    "started_on": 5,
-    "total_changes": 218052,
-    "type": "database_compaction"
-  },
-  {
-    "user": "information",
-    "updated_on": 4,
-    "type": "replication",
-    "target": "https://information.com/somedatabase/",
-    "doc_write_failures": 0,
-    "doc_id": "c0ffb663f75cd940aadb4a4eaa",
-    "continuous": true,
-    "checkpointed_source_seq": 58717,
-    "checkpoint_interval": 3600000,
-    "changes_pending": 0,
-    "pid": "<0.11612.3684>",
-    "node": "fake.fake.com",
-    "docs_read": 108,
-    "docs_written": 108,
-    "missing_revisions_found": 108,
-    "replication_id": "a546c13951c6bd4f2d187d388+continuous",
-    "revisions_checked": 1024,
-    "source": "http://software:*****@123.123.123:5984/somedatabase/",
-    "source_seq": 58717,
-    "started_on": 3
-  },
-  {
-    "user": "abc",
-    "updated_on": 2,
-    "type": "replication",
-    "target": "https://fake.com/db_abc/",
-    "doc_write_failures": 0,
-    "doc_id": "replication_2014",
-    "continuous": true,
-    "checkpointed_source_seq": "2-g1AAAAEXeJzLYWBgYMlgTyrNSS3QS87JL01JzCvRy0styQGqY0pkSLL___9_VgZTImMuUIA9JSUx1cTIAE2_IS79SQ5AMqkexQiLNAPzNAsjYp2QxwIkGRqAFNCU_SBjGMDGGFokp6WZJ6IZY4TfmAMQY_4jjDE2SDE3TzHJAgBp5FSv",
-    "checkpoint_interval": 5000,
-    "changes_pending": 0,
-    "pid": "<0.14029.1733>",
-    "node": "node.node.node..net",
-    "docs_read": 0,
-    "docs_written": 0,
-    "missing_revisions_found": 0,
-    "replication_id": "33af566bab6a58aee04e+continuous",
-    "revisions_checked": 7,
-    "source": "https://fake.fake123.com/db_abc/",
-    "source_seq": "2-g1AAAAEXeJzLYWBgYMlgS3QS87JL01JzCvRy0styQGqY0pkSLL___9_VgZTImMuUIA9JSUx1cTIAE2_IS79SQ5AMqkexQiLNAPzNAsjYp2QxwIkGRqAFNCU_SBjGMDGGFokp6WZJ6IZY4TfmAMQY_4jjDE2SDE3TzHJAgBp5FSv",
-    "started_on": 1
-  },
-  {
-    "view": 5,
-    "user": "treeman",
-    "updated_on": 1426614009,
-    "type": "view_compaction",
-    "total_changes": 1108953,
-    "node": "treeman.net",
-    "pid": "<0.19668.4045>",
-    "changes_done": 430000,
-    "database": "shards/c0000000-ffffffff/treecompany/fake.1234567890",
-    "design_document": "_design/trunk",
-    "phase": "view",
-    "progress": 38,
-    "started_on": 1426602505
-  },
-];
diff --git a/app/addons/activetasks/__tests__/reducer.test.js b/app/addons/activetasks/__tests__/reducer.test.js
deleted file mode 100644
index e1ddb8f..0000000
--- a/app/addons/activetasks/__tests__/reducer.test.js
+++ /dev/null
@@ -1,105 +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.
-
-import reducer from '../reducers';
-import ActionTypes from '../actiontypes';
-import fakedResponse from "./fakeActiveTaskResponse";
-
-describe('Active Tasks -- Stores', () => {
-  let initState;
-
-  beforeEach(() => {
-    initState = reducer(undefined, {
-      type: ActionTypes.ACTIVE_TASKS_FETCH_AND_SET,
-      options: fakedResponse
-    });
-  });
-
-  describe('Active Task Stores - Filter Tab Tray', () => {
-
-    it('should filter the table correctly, by radio -- All Tasks', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-        options: 'all_tasks'
-      });
-      expect(state.tasks.length).toBeGreaterThan(0);
-      expect(state.tasks.length).toEqual(state.filteredTasks.length);
-    });
-
-    it('should filter the table correctly, by radio', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-        options: 'replication'
-      });
-
-      //parse table and check that it only contains objects with type: Replication
-      expect(state.filteredTasks.length > 0).toBeTruthy();
-      state.filteredTasks.forEach(task => {
-        expect(task.type).toEqual('replication');
-        expect(task.type).toEqual(state.selectedRadio);
-      });
-    });
-
-    it('should search the table correctly', () => {
-      var searchTerm = 'base';
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SET_SEARCH_TERM,
-        options: searchTerm
-      });
-
-      const fakeFilteredTable = [
-        { user: 'information'},
-        { user: 'ooo'}
-      ];
-
-      expect(fakeFilteredTable[0].user).toBe(state.filteredTasks[0].user);
-      expect(fakeFilteredTable[1].user).toBe(state.filteredTasks[1].user);
-    });
-  });
-
-  describe('Active Task Stores - Table Header Sort - Select Ascending/Descending', () => {
-
-    it('should set header as ascending, on default', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-        options: 'all_tasks'
-      });
-      expect(state.headerIsAscending).toBeTruthy();
-    });
-
-    it('should set header as descending, if same header is selected again', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'sameHeader'
-      });
-      expect(state.headerIsAscending).toBeTruthy();
-
-      const state2 = reducer(state, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'sameHeader'
-      });
-      expect(state2.headerIsAscending).toBeFalsy();
-
-      const state3 = reducer(state2, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'sameHeader'
-      });
-      expect(state3.headerIsAscending).toBeTruthy();
-
-      const state4 = reducer(state3, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'differentHeader'
-      });
-      expect(state4.headerIsAscending).toBeTruthy();
-    });
-  });
-});
diff --git a/app/addons/activetasks/actions.js b/app/addons/activetasks/actions.js
deleted file mode 100644
index 60d6488..0000000
--- a/app/addons/activetasks/actions.js
+++ /dev/null
@@ -1,77 +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.
-import FauxtonAPI from '../../core/api';
-import ActionTypes from "./actiontypes";
-import fetchActiveTasks from './api';
-
-export const setActiveTaskIsLoading = (boolean) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SET_IS_LOADING,
-    options: boolean
-  };
-};
-
-export const setActiveTasks = (tasks) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_FETCH_AND_SET,
-    options: tasks
-  };
-};
-
-export const init = () => (dispatch) => {
-  dispatch(setActiveTaskIsLoading(true));
-  fetchActiveTasks()
-    .then(tasks => {
-      dispatch(setActiveTaskIsLoading(false));
-      dispatch(setActiveTasks(tasks));
-    })
-    .catch(error => {
-      FauxtonAPI.addNotification({
-        msg: `Fetching active tasks failed: ${error}`,
-        type: 'error'
-      });
-    });
-};
-
-export const switchTab = (tab) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-    options: tab
-  };
-};
-
-export const setSearchTerm = (searchTerm) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SET_SEARCH_TERM,
-    options: searchTerm
-  };
-};
-
-export const sortByColumnHeader = (columnName) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-    options: columnName
-  };
-};
-
-export const runPollingUpdate = () => (dispatch) => {
-  fetchActiveTasks()
-    .then(tasks => {
-      dispatch(setActiveTasks(tasks));
-    })
-    .catch(error => {
-      FauxtonAPI.addNotification({
-        msg: `Fetching active tasks failed: ${error}`,
-        type: 'error'
-      });
-    });
-};
diff --git a/app/addons/activetasks/actiontypes.js b/app/addons/activetasks/actiontypes.js
deleted file mode 100644
index 16e463d..0000000
--- a/app/addons/activetasks/actiontypes.js
+++ /dev/null
@@ -1,20 +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.
-export default {
-  ACTIVE_TASKS_SWITCH_TAB: 'ACTIVE_TASKS_SWITCH_TAB',
-  ACTIVE_TASKS_SET_COLLECTION: 'ACTIVE_TASKS_SET_COLLECTION',
-  ACTIVE_TASKS_SET_SEARCH_TERM: 'ACTIVE_TASKS_SET_SEARCH_TERM',
-  ACTIVE_TASKS_SORT_BY_COLUMN_HEADER: 'ACTIVE_TASKS_SORT_BY_COLUMN_HEADER',
-  ACTIVE_TASKS_FETCH_AND_SET: 'ACTIVE_TASKS_FETCH_AND_SET',
-  ACTIVE_TASKS_SET_IS_LOADING: 'ACTIVE_TASKS_SET_IS_LOADING',
-  ACTIVE_TASKS_POLLING_COLLECTION: 'ACTIVE_TASKS_POLLING_COLLECTION'
-};
diff --git a/app/addons/activetasks/api.js b/app/addons/activetasks/api.js
deleted file mode 100644
index 161c341..0000000
--- a/app/addons/activetasks/api.js
+++ /dev/null
@@ -1,25 +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.
-
-import Helpers from "../../helpers";
-import { get } from '../../core/ajax';
-
-export default () => {
-  return get(Helpers.getServerUrl('/_active_tasks'))
-    .then(tasks => {
-      if (tasks.error) {
-        throw new Error(tasks.reason);
-      }
-      return tasks;
-    });
-};
-
diff --git a/app/addons/activetasks/assets/less/activetasks.less b/app/addons/activetasks/assets/less/activetasks.less
deleted file mode 100644
index 5b4cb7a..0000000
--- a/app/addons/activetasks/assets/less/activetasks.less
+++ /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.
-
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-@import "../../../../../assets/less/mixins.less";
-
-#active-tasks-page {
-  overflow: auto;
-
-  .inner {
-    overflow: auto;
-    height: 100%;
-  }
-
-  .task-tabs li,
-  .active-tasks td.tableheader {
-    cursor: pointer;
-    padding-bottom: 15px;
-
-    &.type {
-      width: 10%;
-    }
-
-    &.database {
-      width: 30%;
-    }
-
-    &.started-on {
-      width: 13%;
-    }
-
-    &.updated-on {
-      width: 13%;
-    }
-
-    &.pid {
-      width: 10%;
-    }
-
-    &.progress {
-      width: 23%;
-    }
-  }
-
-  #active-tasks-table {
-    min-width: 725px;
-    td.header-field {
-      padding: 0px;
-    }
-
-    p.multiline-active-tasks-message {
-      margin: 0;
-      line-height: 1.3;
-      margin-bottom: 3px;
-
-      &.time:nth-child(2) {
-        color: #888;
-      }
-
-      &.to-from-database{
-        &:first-child {
-          border-bottom: 1px solid #ddd;
-        }
-        padding-bottom: 15px;
-      }
-    }
-  }
-
-  .task-search-database {
-    margin: 20px;
-  }
-
-  .active-tasks.dashboard-upper-menu {
-    left: 220px;
-
-    .closeMenu & {
-      left: 64px;
-    }
-  }
-
-  .component-tab-element-wrapper {
-    #active-tasks-search-box {
-      display: inline;
-      font-size: 14px;
-      font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-      height: 51px;
-      background-color: #eee;
-      width: 200px;
-      margin: 9px 0 0 0;
-
-      &:focus {
-        background-color: #fff;
-        outline-color: #fff;
-      };
-    }
-  }
-
-  .dashboard-lower-menu {
-    padding-top: 90px;
-    padding-left: 20px;
-  }
-
-  .header-field {
-    background-color: #ccc;
-
-
-    &.radio {
-      display: none;
-    }
-
-    &.label-text {
-      display: block;
-      font-weight: bold;
-      padding:10px;
-      margin: 0px;
-      height: 50px;
-      .noselect()
-    }
-
-    .table td& {
-      padding: 0px;
-      margin: 0px;
-    }
-
-    .active-tasks-header {
-      background-color: #ccc;
-    }
-
-    .icon-caret-up, .icon-caret-down {
-      color: @brandHighlight;
-    }
-  }
-}
-
-.active-tasks__polling-wrapper {
-  display: flex;
-  align-items: center;
-  flex-direction: row;
-  height: 100%;
-
-  &--ie1X {
-      align-items: stretch;
-  }
-}
diff --git a/app/addons/activetasks/base.js b/app/addons/activetasks/base.js
deleted file mode 100644
index f51cf89..0000000
--- a/app/addons/activetasks/base.js
+++ /dev/null
@@ -1,26 +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.
-
-import FauxtonAPI from "../../core/api";
-import Activetasks from "./routes";
-import "./assets/less/activetasks.less";
-import reducers from './reducers';
-
-Activetasks.initialize = function () {
-  FauxtonAPI.addHeaderLink({title: 'Active Tasks', icon: 'fonticon-activetasks', href: '#/activetasks'});
-};
-
-FauxtonAPI.addReducers({
-  activetasks: reducers
-});
-
-export default Activetasks;
diff --git a/app/addons/activetasks/components/controller.js b/app/addons/activetasks/components/controller.js
deleted file mode 100644
index ec8a841..0000000
--- a/app/addons/activetasks/components/controller.js
+++ /dev/null
@@ -1,59 +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.
-import React from 'react';
-import ActiveTasksFilterTabs from './filtertabs';
-import ActiveTaskTable from './table';
-
-export default class ActiveTasksController extends React.Component {
-  componentDidMount() {
-    this.props.init();
-  }
-
-  setNewSearchTerm = (searchTerm) => {
-    this.props.setSearchTerm(searchTerm);
-  };
-
-  switchTab = (newRadioButton) => {  //tabs buttons
-    this.props.switchTab(newRadioButton);
-  };
-
-  tableHeaderOnClick = (headerClicked) => {
-    this.props.sortByColumnHeader(headerClicked);
-  };
-
-  render() {
-    const {isLoading, tasks, searchTerm, selectedRadio, sortByHeader, headerIsAscending} = this.props;
-
-    const setSearchTerm = this.setNewSearchTerm;
-    const onTableHeaderClick = this.tableHeaderOnClick;
-
-    return (
-      <div id="active-tasks-page" className="scrollable">
-        <div className="inner">
-          <ActiveTasksFilterTabs
-            searchTerm={searchTerm}
-            selectedRadio={selectedRadio}
-            onSearch={setSearchTerm}
-            onRadioClick={this.switchTab}/>
-          <ActiveTaskTable
-            isLoading={isLoading}
-            tasks={tasks}
-            searchTerm={searchTerm}
-            selectedRadio={selectedRadio}
-            onTableHeaderClick={onTableHeaderClick}
-            sortByHeader={sortByHeader}
-            headerIsAscending={headerIsAscending} />
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/filtertabs.js b/app/addons/activetasks/components/filtertabs.js
deleted file mode 100644
index 8d5410c..0000000
--- a/app/addons/activetasks/components/filtertabs.js
+++ /dev/null
@@ -1,75 +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.
-import React from 'react';
-import Components from "../../components/react-components";
-const {TabElement, TabElementWrapper} = Components;
-
-export default class ActiveTasksFilterTabs extends React.Component {
-  static defaultProps = {
-    radioNames : [
-      'All Tasks',
-      'Replication',
-      'Database Compaction',
-      'Indexer',
-      'View Compaction'
-    ]
-  };
-
-  checked = (radioName) => {
-    return this.props.selectedRadio === radioName;
-  };
-
-  onRadioClick = (e) => {
-    var radioName = e.target.value;
-    this.props.onRadioClick(radioName);
-  };
-
-  createFilterTabs = () => {
-    return (
-      this.props.radioNames.map((radioName, i) => {
-        const checked = this.checked(radioName);
-
-        return (
-          <TabElement
-            key={i}
-            selected={checked}
-            text={radioName}
-            onChange={this.onRadioClick} />
-        );
-      })
-    );
-  };
-
-  searchTermChange = (e) => {
-    var searchTerm = e.target.value;
-    this.props.onSearch(searchTerm);
-  };
-
-  render() {
-    const filterTabs = this.createFilterTabs();
-    return (
-      <TabElementWrapper>
-        {filterTabs}
-        <li className="component-tab-list-element">
-          <input
-            id="active-tasks-search-box"
-            className="searchbox"
-            type="text"
-            name="search"
-            placeholder="Search for databases..."
-            value={this.props.searchTerm}
-            onChange={this.searchTermChange} />
-        </li>
-      </TabElementWrapper>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/polling.js b/app/addons/activetasks/components/polling.js
deleted file mode 100644
index 6e3d52e..0000000
--- a/app/addons/activetasks/components/polling.js
+++ /dev/null
@@ -1,48 +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.
-
-import React from 'react';
-import Helpers from '../../../helpers';
-import Components from "../../components/react-components";
-const { Polling } = Components;
-
-export default class ActiveTasksPollingWidgetController extends React.Component {
-
-  runPollingUpdate = () => {
-    this.props.runPollingUpdate();
-  };
-
-  getPluralForLabel = () => {
-    return this.state.pollingInterval === "1" ? '' : 's';
-  };
-
-
-  render() {
-    let activePollingClass = "active-tasks__polling-wrapper";
-    if (Helpers.isIE1X()) {
-      activePollingClass += " " + activePollingClass + "--ie1X";
-    }
-    return (
-      <div className={activePollingClass}>
-        <Polling
-          min={1}
-          max={30}
-          stepSize={1}
-          startValue={15}
-          valueUnits={"second"}
-          onPoll={this.runPollingUpdate}
-        />
-      </div>
-    );
-  }
-}
-
diff --git a/app/addons/activetasks/components/table.js b/app/addons/activetasks/components/table.js
deleted file mode 100644
index b006090..0000000
--- a/app/addons/activetasks/components/table.js
+++ /dev/null
@@ -1,44 +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.
-import React from 'react';
-import ActiveTasksTableBody from './tablebody';
-import ActiveTasksTableHeader from './tableheader';
-
-export default class ActiveTaskTable extends React.Component {
-  render() {
-    const {
-      tasks,
-      selectedRadio,
-      searchTerm,
-      sortByHeader,
-      onTableHeaderClick,
-      headerIsAscending,
-      isLoading
-    } = this.props;
-
-    return (
-      <div id="dashboard-lower-content">
-        <table id="active-tasks-table" className="table table-bordered table-striped active-tasks">
-          <ActiveTasksTableHeader
-            onTableHeaderClick={onTableHeaderClick}
-            sortByHeader={sortByHeader}
-            headerIsAscending={headerIsAscending}/>
-          <ActiveTasksTableBody
-            tasks={tasks}
-            selectedRadio={selectedRadio}
-            isLoading={isLoading}
-            searchTerm={searchTerm}/>
-        </table>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/tablebody.js b/app/addons/activetasks/components/tablebody.js
deleted file mode 100644
index bb73880..0000000
--- a/app/addons/activetasks/components/tablebody.js
+++ /dev/null
@@ -1,70 +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.
-
-import React from 'react';
-import ActiveTaskTableBodyContents from './tablebodycontents';
-
-export default class ActiveTasksTableBody extends React.Component {
-  createRows = () => {
-    var isThereASearchTerm = this.props.searchTerm.trim() === "";
-
-    if (this.props.tasks.length === 0 || this.props.isLoading) {
-      return isThereASearchTerm ? this.noActiveTasks() : this.noActiveTasksMatchFilter();
-    }
-
-    return this.props.tasks.map((item, key) => {
-      return <ActiveTaskTableBodyContents key={key} item={item} />;
-    });
-  };
-
-  getType = () => {
-    const type = this.props.selectedRadio;
-    if (type === "All Tasks") {
-      return "";
-    }
-
-    return type;
-  }
-
-  noActiveTasks = () => {
-    const type = this.getType();
-    let msg = <td  colSpan="6">No active {type} tasks.</td>;
-
-    if (this.props.isLoading) {
-      msg = <td  colSpan="6">Loading tasks.</td>;
-    }
-
-    return (
-      <tr className="no-matching-database-on-search">
-        {msg}
-      </tr>
-    );
-  };
-
-  noActiveTasksMatchFilter = () => {
-    const type = this.getType();
-
-    return (
-      <tr className="no-matching-database-on-search">
-        <td colSpan="6">No active {type} tasks match with filter: &quot;{this.props.searchTerm}&quot;</td>
-      </tr>
-    );
-  };
-
-  render() {
-    return (
-      <tbody className="js-tasks-go-here">
-        {this.createRows()}
-      </tbody>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/tablebodycontents.js b/app/addons/activetasks/components/tablebodycontents.js
deleted file mode 100644
index e8c6e2b..0000000
--- a/app/addons/activetasks/components/tablebodycontents.js
+++ /dev/null
@@ -1,117 +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.
-
-import React from 'react';
-import app from '../../../app';
-
-const activeTasksHelpers = {
-  getTimeInfo (timeStamp) {
-    var timeMessage = [
-      app.helpers.formatDate(timeStamp),
-      app.helpers.getDateFromNow(timeStamp)
-    ];
-    return timeMessage;
-  },
-
-  getDatabaseFieldMessage (item) {
-    var type = item.type;
-    var databaseFieldMessage = [];
-
-    if (type === 'replication') {
-      databaseFieldMessage.push('From: ' + item.source);
-      databaseFieldMessage.push('To: ' + item.target);
-    } else if (type === 'indexer') {
-      databaseFieldMessage.push(item.database);
-      databaseFieldMessage.push('(View: ' + item.design_document + ')');
-    } else {
-      databaseFieldMessage.push(item.database);
-    }
-
-    return databaseFieldMessage;
-  },
-
-  getProgressMessage (item) {
-    var progressMessage = [];
-    var type = item.type;
-
-    if (_.has(item, 'progress')) {
-      progressMessage.push('Progress: ' + item.progress + '%');
-    }
-
-    if (type === 'indexer') {
-      progressMessage.push(
-        'Processed ' + item.changes_done + ' of ' + item.total_changes + ' changes.'
-      );
-    } else if (type === 'replication') {
-      progressMessage.push(item.docs_written + ' docs written.');
-
-      if (_.has(item, 'changes_pending')) {
-        progressMessage.push(item.changes_pending + ' pending changes.');
-      }
-    }
-
-    if (_.has(item, 'changes_done')) {
-      progressMessage.push(item.changes_done + ' Changes done.');
-    }
-
-    return progressMessage;
-  },
-
-  getSourceSequence (item) {
-    return item.source_seq;
-  }
-
-};
-
-export default class ActiveTaskTableBodyContents extends React.Component {
-  getInfo = (item) => {
-    return {
-      type : item.type,
-      objectField: activeTasksHelpers.getDatabaseFieldMessage(item),
-      started_on: activeTasksHelpers.getTimeInfo(item.started_on),
-      updated_on: activeTasksHelpers.getTimeInfo(item.updated_on),
-      pid: item.pid.replace(/[<>]/g, ''),
-      progress: activeTasksHelpers.getProgressMessage(item),
-    };
-  };
-
-  multilineMessage = (messageArray, optionalClassName) => {
-
-    if (!optionalClassName) {
-      optionalClassName = '';
-    }
-    var cssClasses = 'multiline-active-tasks-message ' + optionalClassName;
-
-    return messageArray.map(function (msgLine, iterator) {
-      return <p key={iterator} className={cssClasses}>{msgLine}</p>;
-    });
-  };
-
-  render() {
-    var rowData =  this.getInfo(this.props.item);
-    var objectFieldMsg = this.multilineMessage(rowData.objectField, 'to-from-database');
-    var startedOnMsg = this.multilineMessage(rowData.started_on, 'time');
-    var updatedOnMsg = this.multilineMessage(rowData.updated_on, 'time');
-    var progressMsg = this.multilineMessage(rowData.progress);
-
-    return (
-      <tr>
-        <td>{rowData.type}</td>
-        <td>{objectFieldMsg}</td>
-        <td>{startedOnMsg}</td>
-        <td>{updatedOnMsg}</td>
-        <td>{rowData.pid}</td>
-        <td>{progressMsg}</td>
-      </tr>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/tableheader.js b/app/addons/activetasks/components/tableheader.js
deleted file mode 100644
index 2b85cc5..0000000
--- a/app/addons/activetasks/components/tableheader.js
+++ /dev/null
@@ -1,86 +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.
-
-import React from 'react';
-
-export class TableHeader extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.onTableHeaderClick = this.onTableHeaderClick.bind(this);
-  }
-
-
-  arrow = () => {
-    const sortBy = this.props.sortByHeader;
-    const currentName = this.props.headerName;
-    const headerIsAscending = this.props.headerIsAscending;
-    const arrow = headerIsAscending ? 'icon icon-caret-up' : 'icon icon-caret-down';
-
-    if (sortBy === currentName) {
-      return <i className={arrow}></i>;
-    }
-  };
-
-  onTableHeaderClick = () => {
-    this.props.onTableHeaderClick(this.props.headerName);
-  };
-
-  render() {
-    return (
-      <td className={`header-field ${this.props.headerName} tableheader`} onClick={this.onTableHeaderClick}>
-        <label className="header-field label-text active-tasks-header noselect">
-          {this.props.displayName} {this.arrow()}
-        </label>
-      </td>
-    );
-  }
-}
-
-export default class ActiveTasksTableHeader extends React.Component {
-  static defaultProps = {
-    headerNames : [
-      ['type', 'Type'],
-      ['database', 'Database'],
-      ['started-on', 'Started on'],
-      ['updated-on', 'Updated on'],
-      ['pid', 'PID'],
-      ['progress', 'Status']
-    ]
-  };
-
-  createTableHeadingFields = () => {
-    const {
-      onTableHeaderClick,
-      sortByHeader,
-      headerIsAscending
-    } = this.props;
-
-    return this.props.headerNames.map(function (header) {
-      return <TableHeader
-        headerName={header[0]}
-        displayName={header[1]}
-        key={header[0]}
-        onTableHeaderClick={onTableHeaderClick}
-        sortByHeader={sortByHeader}
-        headerIsAscending={headerIsAscending} />;
-    });
-  };
-
-  render() {
-    return (
-      <thead>
-        <tr>{this.createTableHeadingFields()}</tr>
-      </thead>
-    );
-  }
-}
diff --git a/app/addons/activetasks/container.js b/app/addons/activetasks/container.js
deleted file mode 100644
index 38f8fad..0000000
--- a/app/addons/activetasks/container.js
+++ /dev/null
@@ -1,55 +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.
-
-import { connect } from 'react-redux';
-import Controller from './layout';
-import {
-  init,
-  setSearchTerm,
-  sortByColumnHeader,
-  switchTab,
-  runPollingUpdate
-} from './actions';
-import {
-  getTasks,
-  getHeaderIsAscending,
-  getSelectedRadio,
-  getSortByHeader,
-  getSearchTerm,
-  getIsLoading
-} from './reducers';
-
-const mapStateToProps = ({activetasks}) => {
-  return {
-    tasks: getTasks(activetasks),
-    headerIsAscending: getHeaderIsAscending(activetasks),
-    selectedRadio: getSelectedRadio(activetasks),
-    sortByHeader: getSortByHeader(activetasks),
-    searchTerm: getSearchTerm(activetasks),
-    isLoading: getIsLoading(activetasks)
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    init: () => dispatch(init()),
-    setSearchTerm: (term) => dispatch(setSearchTerm(term)),
-    sortByColumnHeader: (column) => dispatch(sortByColumnHeader(column)),
-    switchTab: (tab) => dispatch(switchTab(tab)),
-    runPollingUpdate: () => dispatch(runPollingUpdate())
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(Controller);
diff --git a/app/addons/activetasks/layout.js b/app/addons/activetasks/layout.js
deleted file mode 100644
index e126237..0000000
--- a/app/addons/activetasks/layout.js
+++ /dev/null
@@ -1,41 +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.
-
-import React from 'react';
-import Helpers from "../../helpers";
-import FauxtonAPI from "../../core/api";
-import {OnePane, OnePaneHeader, OnePaneContent} from '../components/layouts';
-import ActiveTasksController from "./components/controller";
-import ActiveTasksPollingWidgetController from './components/polling';
-
-const crumbs = [
-  {'name': 'Active Tasks'}
-];
-
-export const ActiveTasksLayout = (props) => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={crumbs}
-        docURL={FauxtonAPI.constants.DOC_URLS.ACTIVE_TASKS}
-        endpoint={Helpers.getApiUrl('/_active_tasks')}
-      >
-        <ActiveTasksPollingWidgetController {...props} />
-      </OnePaneHeader>
-      <OnePaneContent>
-        <ActiveTasksController {...props} />
-      </OnePaneContent>
-    </OnePane>
-  );
-};
-
-export default ActiveTasksLayout;
diff --git a/app/addons/activetasks/reducers.js b/app/addons/activetasks/reducers.js
deleted file mode 100644
index bba4bf4..0000000
--- a/app/addons/activetasks/reducers.js
+++ /dev/null
@@ -1,141 +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.
-import ActionTypes from "./actiontypes";
-import { has, sortBy, isUndefined } from 'lodash';
-
-const initialState = {
-  isLoading: false,
-  sortByHeader: 'started-on',
-  headerIsAscending: true,
-  selectedRadio: 'All Tasks',
-  searchTerm: '',
-  tasks: [],
-  filteredTasks: []
-};
-
-const sortTasksByColumnHeader = (colName, tasks, headerIsAscending) => {
-  var sorted = sortBy(tasks, (item) => {
-    var variable = colName;
-
-    if (isUndefined(item[variable])) {
-      variable = 'source';
-    }
-    return item[variable];
-  });
-
-  if (!headerIsAscending) {
-    return sorted.reverse();
-  }
-
-  return sorted;
-};
-
-
-const setSearchTerm = (state, searchTerm) => {
-  const filteredTasks = filterTasks(searchTerm, state.selectedRadio, state.sortbyHeader, state.tasks, state.headerIsAscending);
-  return {
-    ...state,
-    filteredTasks,
-    searchTerm
-  };
-};
-
-const passesSearchFilter = (item, searchTerm) => {
-  const regex = new RegExp(searchTerm, 'g');
-  let itemDatabasesTerm = '';
-  if (has(item, 'database')) {
-    itemDatabasesTerm += item.database;
-  }
-  if (has(item, 'source')) {
-    itemDatabasesTerm += item.source;
-  }
-  if (has(item, 'target')) {
-    itemDatabasesTerm += item.target;
-  }
-
-  return regex.test(itemDatabasesTerm);
-};
-
-const passesRadioFilter = (item, selectedRadio) => {
-  const fixedSelectedRadio = selectedRadio.toLowerCase().replace(' ', '_');
-  return item.type ===  fixedSelectedRadio ||  fixedSelectedRadio === 'all_tasks';
-};
-
-const filterTasks = (searchTerm, selectedRadio, sortByHeader, tasks, headerIsAscending) => {
-  const filtered = tasks.filter(task => {
-    return passesRadioFilter(task, selectedRadio) && passesSearchFilter(task, searchTerm);
-  });
-
-  return sortTasksByColumnHeader(sortByHeader, filtered, headerIsAscending);
-};
-
-const setHeaderIsAscending = (prevSortbyHeader, sortByHeader, headerIsAscending) => {
-  if (prevSortbyHeader === sortByHeader) {
-    return !headerIsAscending;
-  }
-
-  return true;
-};
-
-export default (state = initialState, {type, options}) => {
-  switch (type) {
-    case ActionTypes.ACTIVE_TASKS_FETCH_AND_SET:
-      return {
-        ...state,
-        tasks: options,
-        filteredTasks: filterTasks(state.searchTerm, state.selectedRadio, state.sortByHeader, options, state.headerIsAscending)
-      };
-
-    case ActionTypes.ACTIVE_TASKS_SWITCH_TAB:
-      const filteredTasks = filterTasks(state.searchTerm, options, state.sortByHeader, state.tasks, headerIsAscending);
-      return {
-        ...state,
-        selectedRadio: options,
-        filteredTasks
-      };
-
-    case ActionTypes.ACTIVE_TASKS_CHANGE_POLLING_INTERVAL:
-      return {
-        ...state,
-        pollingIntervalSeconds: options
-      };
-
-    case ActionTypes.ACTIVE_TASKS_SET_SEARCH_TERM:
-      return setSearchTerm(state, options);
-
-    case ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER:
-      const prevSortbyHeader = state.sortByHeader;
-      const sortByHeader = options;
-      const headerIsAscending = setHeaderIsAscending(prevSortbyHeader, sortByHeader, state.headerIsAscending);
-      const headerFilteredTasks = filterTasks(state.searchTerm, state.selectedRadio, sortByHeader, state.tasks, headerIsAscending);
-      return {
-        ...state,
-        sortByHeader,
-        headerIsAscending,
-        filteredTasks: headerFilteredTasks
-      };
-
-    case ActionTypes.ACTIVE_TASKS_SET_IS_LOADING:
-      return {
-        ...state,
-        isLoading: options
-      };
-  }
-  return state;
-};
-
-export const getTasks = (state) => state.filteredTasks;
-export const getHeaderIsAscending = (state) => state.headerIsAscending;
-export const getIsLoading = (state) => state.isLoading;
-export const getSelectedRadio = (state) => state.selectedRadio;
-export const getSortByHeader = (state) => state.sortByHeader;
-export const getSearchTerm = (state) => state.searchTerm;
diff --git a/app/addons/activetasks/routes.js b/app/addons/activetasks/routes.js
deleted file mode 100644
index 2d51fc4..0000000
--- a/app/addons/activetasks/routes.js
+++ /dev/null
@@ -1,34 +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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import Layout from './container';
-
-var ActiveTasksRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Active Tasks',
-
-  routes: {
-    'activetasks/:id': 'showActiveTasks',
-    'activetasks': 'showActiveTasks'
-  },
-
-  roles: ['_admin'],
-
-  showActiveTasks: function () {
-    return <Layout />;
-  }
-});
-
-export default {
-  RouteObjects: [ActiveTasksRouteObject]
-};
diff --git a/app/addons/auth/__tests__/components.test.js b/app/addons/auth/__tests__/components.test.js
deleted file mode 100644
index 8a1066e..0000000
--- a/app/addons/auth/__tests__/components.test.js
+++ /dev/null
@@ -1,95 +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.
-
-import React from "react";
-import LoginForm from "../components/loginform";
-import {CreateAdminForm} from "../components/createadminform";
-import {ChangePasswordForm} from '../components/changepasswordform';
-import * as Actions from "../actions";
-import { mount } from 'enzyme';
-import sinon from "sinon";
-
-describe('Auth -- Components', () => {
-
-  describe('LoginForm', () => {
-    let stub;
-
-    beforeEach(() => {
-      stub = sinon.stub(Actions, 'login');
-    });
-
-    afterEach(() => {
-      Actions.login.restore();
-    });
-
-    it('should trigger login event when form submitted', () => {
-      const loginForm = mount(<LoginForm/>);
-      loginForm.find('#login').simulate('submit');
-      expect(stub.calledOnce).toBeTruthy();
-    });
-
-    it('in case of nothing in state, should pass actual values to Actions.login()', () => {
-      const username = 'bob';
-      const password = 'smith';
-
-      const loginForm = mount(
-        <LoginForm
-          testBlankUsername={username}
-          testBlankPassword={password}
-        />);
-
-      loginForm.find('#login').simulate('submit');
-      expect(stub.calledOnce).toBeTruthy();
-
-      // confirm Actions.login() received the values that weren't in the DOM
-      expect(stub.args[0][0]).toBe(username);
-      expect(stub.args[0][1]).toBe(password);
-    });
-
-  });
-
-  describe('ChangePasswordForm', () => {
-
-    it('should update state on password change', () => {
-      const changePasswordForm = mount(<ChangePasswordForm />);
-      changePasswordForm.find('#password').simulate('change', { target: { value: 'bobsyouruncle' }});
-      expect(changePasswordForm.state('password')).toEqual('bobsyouruncle');
-    });
-
-    it('should update state on password confirm change', () => {
-      const changePasswordForm = mount(<ChangePasswordForm />);
-      changePasswordForm.find('#password-confirm').simulate('change', { target: { value: 'hotdiggity' }});
-      expect(changePasswordForm.state('passwordConfirm')).toEqual('hotdiggity');
-    });
-
-    it('should call action to submit form', () => {
-      const spy = sinon.spy();
-      const changePasswordForm = mount(<ChangePasswordForm username={"bobsyouruncle"} changePassword={spy} />);
-      changePasswordForm.find('#change-password').simulate('submit');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-  describe('CreateAdminForm', () => {
-    it('should update username state', () => {
-      const createAdminForm = mount(<CreateAdminForm loginAfter={false} />);
-      createAdminForm.find('#username').simulate('change',  { target: { value: 'catsmeow' }});
-      expect(createAdminForm.state('username')).toEqual('catsmeow');
-    });
-
-    it('should call action to update password confirm on field change', () => {
-      const createAdminForm = mount(<CreateAdminForm loginAfter={false} />);
-      createAdminForm.find('#password').simulate('change',  { target: { value: 'topnotch' }});
-      expect(createAdminForm.state('password')).toEqual('topnotch');
-    });
-  });
-});
diff --git a/app/addons/auth/actions.js b/app/addons/auth/actions.js
deleted file mode 100644
index 1e094c9..0000000
--- a/app/addons/auth/actions.js
+++ /dev/null
@@ -1,143 +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.
-import FauxtonAPI from "../../core/api";
-import app from "../../app";
-import ActionTypes from './actiontypes';
-import Api from './api';
-
-const {
-  AUTH_HIDE_PASSWORD_MODAL,
-} = ActionTypes;
-
-const errorHandler = ({ message }) => {
-  FauxtonAPI.addNotification({
-    msg: message,
-    type: "error"
-  });
-};
-
-const validate = (...predicates) => {
-  return predicates.every(isTrue => isTrue);
-};
-
-export const validateUser = (username, password) => {
-  return validate(!_.isEmpty(username), !_.isEmpty(password));
-};
-
-export const validatePasswords = (password, passwordConfirm) => {
-  return validate(
-    !_.isEmpty(password),
-    !_.isEmpty(passwordConfirm),
-    password === passwordConfirm
-  );
-};
-
-export const login = (username, password, urlBack) => {
-  if (!validateUser(username, password)) {
-    return errorHandler({message: app.i18n.en_US['auth-missing-credentials']});
-  }
-
-  return Api.login({name: username, password})
-    .then(resp => {
-      if (resp.error) {
-        errorHandler({message: resp.reason});
-        return resp;
-      }
-
-      let msg = app.i18n.en_US['auth-logged-in'];
-      if (msg) {
-        FauxtonAPI.addNotification({msg});
-      }
-
-      if (urlBack && !urlBack.includes("login")) {
-        return FauxtonAPI.navigate(urlBack);
-      }
-      FauxtonAPI.navigate("/");
-    })
-    .catch(errorHandler);
-};
-
-export const changePassword = (username, password, passwordConfirm, nodes) => () => {
-  if (!validatePasswords(password, passwordConfirm)) {
-    return errorHandler({message: app.i18n.en_US['auth-passwords-not-matching']});
-  }
-  //To change an admin's password is the same as creating an admin. So we just use the
-  //same api function call here.
-  Api.createAdmin({
-    name: username,
-    password,
-    node: nodes[0].node
-  }).then(
-    () => {
-      FauxtonAPI.addNotification({
-        msg: app.i18n.en_US["auth-change-password"]
-      });
-    },
-    errorHandler
-  );
-};
-
-export const createAdmin = (username, password, loginAfter, nodes) => () => {
-  const node = nodes[0].node;
-  if (!validateUser(username, password)) {
-    return errorHandler({message: app.i18n.en_US['auth-missing-credentials']});
-  }
-
-  Api.createAdmin({name: username, password, node})
-    .then(resp => {
-      if (resp.error) {
-        return errorHandler({message: `${app.i18n.en_US['auth-admin-creation-failed-prefix']} ${resp.reason}`});
-      }
-
-      FauxtonAPI.addNotification({
-        msg: app.i18n.en_US['auth-admin-created']
-      });
-
-      if (loginAfter) {
-        return FauxtonAPI.navigate("/login");
-      }
-    });
-};
-
-// simple authentication method - does nothing other than check creds
-export const authenticate = (username, password, onSuccess) => {
-  Api.login({
-    name: username,
-    password: password
-  })
-    .then((resp) => {
-      if (resp.error) {
-        throw (resp);
-      }
-      hidePasswordModal();
-      onSuccess(username, password);
-    })
-    .catch(() => {
-      FauxtonAPI.addNotification({
-        msg: "Your username or password is incorrect.",
-        type: "error",
-        clear: true
-      });
-    });
-};
-
-export const hidePasswordModal = () => {
-  FauxtonAPI.dispatch({ type: AUTH_HIDE_PASSWORD_MODAL });
-};
-
-export const logout = () => {
-  FauxtonAPI.addNotification({ msg: "You have been logged out." });
-  Api.logout()
-    .then(Api.getSession)
-    .then(() => FauxtonAPI.navigate('/'))
-    .catch(errorHandler);
-};
diff --git a/app/addons/auth/actiontypes.js b/app/addons/auth/actiontypes.js
deleted file mode 100644
index 4ab3e5b..0000000
--- a/app/addons/auth/actiontypes.js
+++ /dev/null
@@ -1,18 +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.
-
-export default {
-  AUTH_CREDS_VALID: 'AUTH_CREDS_VALID',
-  AUTH_CREDS_INVALID: 'AUTH_CREDS_INVALID',
-  AUTH_SHOW_PASSWORD_MODAL: 'AUTH_SHOW_PASSWORD_MODAL',
-  AUTH_HIDE_PASSWORD_MODAL: 'AUTH_HIDE_PASSWORD_MODAL'
-};
diff --git a/app/addons/auth/api.js b/app/addons/auth/api.js
deleted file mode 100644
index a281675..0000000
--- a/app/addons/auth/api.js
+++ /dev/null
@@ -1,57 +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.
-
-import app from './../../app';
-import Helpers from "../../helpers";
-import {deleteFormEncoded, get, postFormEncoded, put} from '../../core/ajax';
-
-
-export function createAdmin({name, password, node}) {
-  const url = Helpers.getServerUrl(`/_node/${node}/_config/admins/${name}`);
-  return put(url, password);
-}
-
-let loggedInSessionPromise;
-
-export function getSession() {
-  if (loggedInSessionPromise) {
-    return loggedInSessionPromise;
-  }
-
-  const url = Helpers.getServerUrl('/_session');
-  const promise = get(url).then(resp => {
-    if (resp.userCtx.name) {
-      loggedInSessionPromise = promise;
-    }
-    return resp.userCtx;
-  });
-
-  return promise;
-}
-
-export function login(body) {
-  const url = Helpers.getServerUrl('/_session');
-  return postFormEncoded(url, app.utils.queryParams(body));
-}
-
-export function logout() {
-  loggedInSessionPromise = null;
-  const url = Helpers.getServerUrl('/_session');
-  return deleteFormEncoded(url, app.utils.queryParams({ username: "_", password: "_" }));
-}
-
-export default {
-  createAdmin,
-  login,
-  logout,
-  getSession
-};
diff --git a/app/addons/auth/assets/less/auth.less b/app/addons/auth/assets/less/auth.less
deleted file mode 100644
index bf6ddcc..0000000
--- a/app/addons/auth/assets/less/auth.less
+++ /dev/null
@@ -1,27 +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.
-
-@import "../../../../../assets/less/variables.less";
-
-.sidenav header {
-  padding-left: 24px !important;
-  h3 {
-    margin: 8px 0 4px;
-  }
-}
-
-.faux__auth-page {
-  padding: 20px !important;
-  h3 {
-    margin-top: 0;
-  }
-}
diff --git a/app/addons/auth/base.js b/app/addons/auth/base.js
deleted file mode 100644
index 0fce5f8..0000000
--- a/app/addons/auth/base.js
+++ /dev/null
@@ -1,70 +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.
-
-import FauxtonAPI from "../../core/api";
-import RouteObjects from './routes';
-import "./assets/less/auth.less";
-import Session from './session';
-
-const cleanupAuthSection = () => {
-  FauxtonAPI.removeHeaderLink({ id: 'auth', bottomNav: true });
-};
-
-FauxtonAPI.setSession(new Session({allowAdminParty: true}));
-
-export default ({
-  initialize: () => {
-    FauxtonAPI.addHeaderLink({
-      id: 'auth',
-      title: 'Login',
-      href: '#/login',
-      icon: 'fonticon-user',
-      bottomNav: true
-    });
-
-    FauxtonAPI.session.onChange(() => {
-      const session = FauxtonAPI.session;
-      let link;
-
-      if (session.isAdminParty()) {
-        link = {
-          id: 'auth',
-          title: 'Admin Party!',
-          href: '#/createAdmin',
-          icon: 'fonticon-user',
-          bottomNav: true
-        };
-
-        cleanupAuthSection();
-        FauxtonAPI.addHeaderLink(link);
-        FauxtonAPI.hideLogin();
-
-      } else if (session.isLoggedIn()) {
-        link = {
-          id: 'auth',
-          title: 'Your Account',
-          href: '#/changePassword',
-          icon: 'fonticon-user',
-          bottomNav: true
-        };
-
-        cleanupAuthSection();
-        FauxtonAPI.addHeaderLink(link);
-        FauxtonAPI.showLogout();
-      } else {
-        cleanupAuthSection();
-        FauxtonAPI.showLogin();
-      }
-    });
-  },
-  RouteObjects
-});
diff --git a/app/addons/auth/components/changepasswordform.js b/app/addons/auth/components/changepasswordform.js
deleted file mode 100644
index 14943d7..0000000
--- a/app/addons/auth/components/changepasswordform.js
+++ /dev/null
@@ -1,100 +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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-import FauxtonAPI from '../../../core/api';
-import {
-  changePassword
-} from "./../actions";
-
-import {connect} from 'react-redux';
-
-export class ChangePasswordForm extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      password: '',
-      passwordConfirm: ''
-    };
-  }
-
-  onChangePassword(e) {
-    this.setState({password: e.target.value});
-  }
-
-  onChangePasswordConfirm(e) {
-    this.setState({passwordConfirm: e.target.value});
-  }
-
-  componentDidMount() {
-    this.passwordField.focus();
-  }
-
-  changePassword(e) {
-    e.preventDefault();
-    this.props.changePassword(this.props.username, this.state.password, this.state.passwordConfirm, this.props.nodes);
-  }
-
-  render() {
-    return (
-      <div className="faux__auth-page">
-        <h3>Change Password</h3>
-
-        <form id="change-password" onSubmit={this.changePassword.bind(this)}>
-          <p>
-            Enter your new password.
-          </p>
-
-          <input
-            id="password"
-            type="password"
-            ref={node => this.passwordField = node}
-            name="password"
-            placeholder="Password"
-            size="24"
-            onChange={this.onChangePassword.bind(this)}
-            value={this.state.password}
-          />
-          <br />
-          <input
-            id="password-confirm"
-            type="password"
-            name="password_confirm"
-            placeholder="Verify Password"
-            size="24"
-            onChange={this.onChangePasswordConfirm.bind(this)}
-            value={this.state.passwordConfirm}
-          />
-
-          <br />
-          <p>
-            <button type="submit" className="btn btn-primary">Change</button>
-          </p>
-        </form>
-      </div>
-    );
-  }
-}
-
-const mapStateToProps = ({clusters}) => {
-  return {
-    nodes: clusters.nodes,
-    username: FauxtonAPI.session.user().name
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  {changePassword}
-)(ChangePasswordForm);
diff --git a/app/addons/auth/components/createadminform.js b/app/addons/auth/components/createadminform.js
deleted file mode 100644
index 333b419..0000000
--- a/app/addons/auth/components/createadminform.js
+++ /dev/null
@@ -1,124 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import {
-  createAdmin
-} from "./../actions";
-import {connect} from 'react-redux';
-
-export class CreateAdminForm extends React.Component {
-  constructor(props) {
-    super(props);
-    this.state = {
-      username: '',
-      password: ''
-    };
-  }
-
-  onChangeUsername(e) {
-    this.setState({username: e.target.value});
-  }
-
-  onChangePassword(e) {
-    this.setState({password: e.target.value});
-  }
-
-  componentDidMount() {
-    this.usernameField.focus();
-  }
-
-  createAdmin(e) {
-    e.preventDefault();
-    this.props.createAdmin(
-      this.state.username,
-      this.state.password,
-      this.props.loginAfter,
-      this.props.nodes
-    );
-  }
-
-  render() {
-    return (
-      <div className="faux__auth-page">
-        <h3>Create Admins</h3>
-
-        <p>
-          Before a server admin is configured, all clients have admin privileges. This is fine when
-
-          HTTP access is restricted to trusted users. <strong>
-            If end-users will be accessing this
-            CouchDB, you must create an admin account to prevent accidental (or malicious) data
-
-            loss.
-          </strong>
-        </p>
-        <p>
-          Server admins can create and destroy databases, install and update _design documents, run
-
-          the test suite, and edit all aspects of CouchDB configuration.
-        </p>
-
-        <form id="create-admin-form" onSubmit={this.createAdmin.bind(this)}>
-          <input
-            id="username"
-            type="text"
-            ref={node => this.usernameField = node}
-            name="name"
-            placeholder="Username"
-            size="24"
-            onChange={this.onChangeUsername.bind(this)}
-          />
-          <br />
-          <input
-            id="password"
-            type="password"
-            name="password"
-            placeholder="Password"
-            size="24"
-            onChange={this.onChangePassword.bind(this)}
-          />
-          <p>
-            Non-admin users have read and write access to all databases, which
-            are controlled by validation. CouchDB can be configured to block all
-            access to anonymous users.
-          </p>
-          <button type="submit" id="create-admin" className="btn btn-primary">
-            Create Admin
-          </button>
-        </form>
-      </div>
-    );
-  }
-}
-
-CreateAdminForm.propTypes = {
-  loginAfter: PropTypes.bool.isRequired
-};
-
-CreateAdminForm.defaultProps = {
-  loginAfter: false
-};
-
-const mapStateToProps = ({clusters}) => {
-  return {
-    nodes: clusters.nodes
-  };
-};
-
-
-export default connect(
-  mapStateToProps,
-  {createAdmin}
-)(CreateAdminForm);
diff --git a/app/addons/auth/components/index.js b/app/addons/auth/components/index.js
deleted file mode 100644
index 2c38e5a..0000000
--- a/app/addons/auth/components/index.js
+++ /dev/null
@@ -1,23 +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.
-
-import LoginForm from './loginform.js';
-import PasswordModal from './passwordmodal.js';
-import CreateAdminForm from './createadminform.js';
-import ChangePasswordForm from './changepasswordform.js';
-
-export default {
-  LoginForm,
-  PasswordModal,
-  CreateAdminForm,
-  ChangePasswordForm
-};
diff --git a/app/addons/auth/components/loginform.js b/app/addons/auth/components/loginform.js
deleted file mode 100644
index b961c93..0000000
--- a/app/addons/auth/components/loginform.js
+++ /dev/null
@@ -1,113 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import { login } from "./../actions";
-
-class LoginForm extends React.Component {
-  constructor() {
-    super();
-    this.state = {
-      username: "",
-      password: ""
-    };
-  }
-  onUsernameChange(e) {
-    this.setState({username: e.target.value});
-  }
-  onPasswordChange(e) {
-    this.setState({password: e.target.value});
-  }
-
-  submit(e) {
-    e.preventDefault();
-    if (!this.checkUnrecognizedAutoFill()) {
-      this.login(this.state.username, this.state.password);
-    }
-  }
-  // Safari has a bug where autofill doesn't trigger a change event. This checks for the condition where the state
-  // and form fields have a mismatch. See: https://issues.apache.org/jira/browse/COUCHDB-2829
-  checkUnrecognizedAutoFill() {
-    if (this.state.username !== "" || this.state.password !== "") {
-      return false;
-    }
-    let username = this.props.testBlankUsername
-      ? this.props.testBlankUsername
-      : this.usernameField.value;
-    let password = this.props.testBlankPassword
-      ? this.props.testBlankPassword
-      : this.passwordField.value;
-    this.setState({ username: username, password: password }); // doesn't set immediately, hence separate login() call
-    this.login(username, password);
-
-    return true;
-  }
-  login(username, password) {
-    login(username, password, this.props.urlBack);
-  }
-  componentDidMount() {
-    this.usernameField.focus();
-  }
-  render() {
-    return (
-      <div className="couch-login-wrapper">
-        <div className="row-fluid">
-          <div className="span12">
-            <form id="login" onSubmit={this.submit.bind(this)}>
-              <p className="help-block">
-                Enter your username and password.
-              </p>
-              <input
-                id="username"
-                type="text"
-                name="username"
-                ref={node => this.usernameField = node}
-                placeholder="Username"
-                size="24"
-                onChange={this.onUsernameChange.bind(this)}
-                value={this.state.username}
-              />
-              <br />
-              <input
-                id="password"
-                type="password"
-                name="password"
-                ref={node => this.passwordField = node}
-                placeholder="Password"
-                size="24"
-                onChange={this.onPasswordChange.bind(this)}
-                value={this.state.password}
-              />
-              <br />
-              <button id="submit" className="btn btn-success" type="submit">
-                Log In
-              </button>
-            </form>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-LoginForm.defaultProps = {
-  urlBack: ""
-};
-
-LoginForm.propTypes = {
-  urlBack: PropTypes.string.isRequired
-};
-
-export default LoginForm;
diff --git a/app/addons/auth/components/passwordmodal.js b/app/addons/auth/components/passwordmodal.js
deleted file mode 100644
index b652c66..0000000
--- a/app/addons/auth/components/passwordmodal.js
+++ /dev/null
@@ -1,109 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import { Modal } from "react-bootstrap";
-import { hidePasswordModal, authenticate } from "./../actions";
-import Components from "../../components/react-components";
-import FauxtonAPI from "../../../core/api";
-
-class PasswordModal extends React.Component {
-  constructor(props) {
-    super(props);
-    this.state = {
-      password: ""
-    };
-    this.authenticate = this.authenticate.bind(this);
-    this.onKeyPress = this.onKeyPress.bind(this);
-  }
-
-  // clicking <Enter> should submit the form
-  onKeyPress(e) {
-    if (e.key === "Enter") {
-      this.authenticate();
-    }
-  }
-  // default authentication function. This can be overridden via props if you want to do something different
-  authenticate() {
-    const username = FauxtonAPI.session.user().name;
-    this.props.onSubmit(username, this.state.password, this.props.onSuccess);
-  }
-  render() {
-    const {
-      visible,
-      onClose,
-      submitBtnLabel,
-      headerTitle,
-      modalMessage
-    } = this.props;
-    if (!this.props.visible) {
-      return null;
-    }
-
-    return (
-      <Modal
-        dialogClassName="enter-password-modal"
-        show={visible}
-        onHide={() => onClose()}
-      >
-        <Modal.Header closeButton={true}>
-          <Modal.Title>{headerTitle}</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          {modalMessage}
-          <input
-            style={{ width: "385px" }}
-            type="password"
-            className="password-modal-input"
-            placeholder="Enter your password"
-            autoFocus={true}
-            value={this.state.password}
-            onChange={e => this.setState({ password: e.target.value })}
-            onKeyPress={this.onKeyPress}
-          />
-        </Modal.Body>
-        <Modal.Footer>
-          <a className="cancel-link" onClick={() => onClose()}>Cancel</a>
-          <Components.ConfirmButton
-            text={submitBtnLabel}
-            onClick={this.authenticate}
-          />
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-
-PasswordModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  modalMessage: PropTypes.oneOfType([
-    PropTypes.string,
-    PropTypes.element
-  ]),
-  onSubmit: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  submitBtnLabel: PropTypes.string
-};
-
-PasswordModal.defaultProps = {
-  headerTitle: "Enter Password",
-  visible: false,
-  modalMessage: "",
-  onClose: hidePasswordModal,
-  onSubmit: authenticate,
-  onSuccess: () => {},
-  submitBtnLabel: "Continue"
-};
-
-export default PasswordModal;
diff --git a/app/addons/auth/layout.js b/app/addons/auth/layout.js
deleted file mode 100644
index 54b59ef..0000000
--- a/app/addons/auth/layout.js
+++ /dev/null
@@ -1,93 +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.
-
-import React from 'react';
-import {OnePane, OnePaneContent} from '../components/layouts';
-import {Breadcrumbs} from '../components/header-breadcrumbs';
-import Components from "./components";
-import {TabElementWrapper, TabElement} from '../components/components/tabelement';
-import FauxtonAPI from "../../core/api";
-
-const {
-  CreateAdminForm,
-  ChangePasswordForm
-} = Components;
-
-export const OnePaneHeader = ({crumbs}) => {
-  return (
-    <header>
-      <div className='flex-layout flex-row'>
-        <div id='breadcrumbs' className='flex-body'>
-          <Breadcrumbs crumbs={crumbs}/>
-        </div>
-      </div>
-    </header>
-  );
-};
-
-export const AuthLayout = ({crumbs, component}) => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={crumbs}
-      >
-      </OnePaneHeader>
-      <OnePaneContent>
-        {component}
-      </OnePaneContent>
-    </OnePane>
-  );
-};
-
-const Tabs = ({changePassword}) => {
-  return (
-    <TabElementWrapper>
-      <TabElement
-        key={1}
-        selected={changePassword}
-        text={"Change Password"}
-        onChange={() => {
-          FauxtonAPI.navigate('#changePassword');
-        }}
-      />
-      <TabElement
-        key={2}
-        selected={!changePassword}
-        text={"Create Server Admin"}
-        onChange={() => {
-          FauxtonAPI.navigate('#addAdmin');
-        }}
-      />
-    </TabElementWrapper>
-  );
-};
-
-export const AdminLayout = ({crumbs, changePassword}) => {
-  let content = changePassword ? <ChangePasswordForm /> : <CreateAdminForm loginAfter={false} />;
-  return (
-    <OnePane>
-      <OnePaneHeader crumbs={crumbs}/>
-      <OnePaneContent>
-        <div className="template-content flex-body flex-layout flex-col">
-          <Tabs changePassword={changePassword} />
-          <div id="dashboard-conten1t" className="flex-layout flex-col">
-            {content}
-          </div>
-        </div>
-      </OnePaneContent>
-    </OnePane>
-
-  );
-
-};
-
-export default AuthLayout;
diff --git a/app/addons/auth/routes/auth.js b/app/addons/auth/routes/auth.js
deleted file mode 100644
index d274c08..0000000
--- a/app/addons/auth/routes/auth.js
+++ /dev/null
@@ -1,60 +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.
-
-import React from "react";
-import FauxtonAPI from "../../../core/api";
-import ClusterActions from "../../cluster/actions";
-import { AuthLayout } from "./../layout";
-import app from "../../../app";
-import Components from "./../components";
-import {logout} from '../actions';
-
-const {
-  LoginForm,
-  CreateAdminForm
-} = Components;
-
-const crumbs = [{ name: "Log In to CouchDB" }];
-
-export default FauxtonAPI.RouteObject.extend({
-  routes: {
-    "login?*extra": "login",
-    "login": "login",
-    "logout": "logout",
-    "createAdmin": "checkNodes",
-    "createAdmin/:node": "createAdminForNode"
-  },
-  checkNodes() {
-    ClusterActions.navigateToNodeBasedOnNodeCount("/createAdmin/");
-  },
-  login() {
-    return (
-      <AuthLayout
-        crumbs={crumbs}
-        component={<LoginForm urlBack={app.getParams().urlback} />}
-      />
-    );
-  },
-  logout() {
-    logout();
-  },
-  createAdminForNode() {
-    ClusterActions.fetchNodes();
-    const crumbs = [{ name: "Create Admin" }];
-    return (
-      <AuthLayout
-        crumbs={crumbs}
-        component={<CreateAdminForm loginAfter={true} />}
-      />
-    );
-  }
-});
diff --git a/app/addons/auth/routes/index.js b/app/addons/auth/routes/index.js
deleted file mode 100644
index da37e64..0000000
--- a/app/addons/auth/routes/index.js
+++ /dev/null
@@ -1,16 +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.
-
-import Auth from './auth';
-import User from './user';
-
-export default [Auth, User];
diff --git a/app/addons/auth/routes/user.js b/app/addons/auth/routes/user.js
deleted file mode 100644
index 36a8f53..0000000
--- a/app/addons/auth/routes/user.js
+++ /dev/null
@@ -1,68 +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.
-
-import React from "react";
-import FauxtonAPI from "../../../core/api";
-import ClusterActions from "../../cluster/actions";
-import { AdminLayout } from "./../layout";
-
-export default FauxtonAPI.RouteObject.extend({
-  hideNotificationCenter: true,
-  hideApiBar: true,
-  selectedHeader: 'Your Account',
-
-  routes: {
-    changePassword: {
-      route: "checkNodesForPasswordChange",
-      roles: ["fx_loggedIn"]
-    },
-    "changePassword/:node": {
-      route: "changePassword",
-      roles: ["fx_loggedIn"]
-    },
-    addAdmin: {
-      route: "checkNodesForAddAdmin",
-      roles: ["_admin"]
-    },
-    "addAdmin/:node": {
-      route: "addAdmin",
-      roles: ["_admin"]
-    }
-  },
-
-  checkNodesForPasswordChange() {
-    ClusterActions.navigateToNodeBasedOnNodeCount("/changePassword/");
-  },
-
-  checkNodesForAddAdmin() {
-    ClusterActions.navigateToNodeBasedOnNodeCount("/addAdmin/");
-  },
-
-  changePassword() {
-    ClusterActions.fetchNodes();
-    return (
-      <AdminLayout
-        crumbs={[{ name: "User Management" }]}
-        changePassword={true}
-      />
-    );
-  },
-  addAdmin() {
-    ClusterActions.fetchNodes();
-    return (
-      <AdminLayout
-        crumbs={[{ name: "User Management" }]}
-        changePassword={false}
-      />
-    );
-  }
-});
diff --git a/app/addons/auth/session.js b/app/addons/auth/session.js
deleted file mode 100644
index 20e72fc..0000000
--- a/app/addons/auth/session.js
+++ /dev/null
@@ -1,110 +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.
-
-import { uniqueId, each, includes } from "lodash";
-import Api from './api';
-import Promise from 'bluebird';
-
-function isAdmin(roles = []) {
-  return includes(roles, "_admin");
-}
-
-export default class {
-
-  constructor(opts) {
-    this._user = {
-      name: false,
-      roles: []
-    };
-    this._onChange = {};
-    this._authenticatedPromise = new Promise((resolve, reject) => {
-      this._authenticateResolve = resolve;
-      this._authenticateReject = reject;
-    });
-
-    this._allowAdminParty = opts.allowAdminParty;
-  }
-
-  isAuthenticated () {
-    return this._authenticatedPromise;
-  }
-
-  setUser(user) {
-    if (this._user.name !== user.name) {
-      this._user = {
-        name: user.name,
-        roles: user.roles,
-        isAdmin: isAdmin(user.roles)
-      };
-      each(this._onChange, fn => fn(this._user));
-    }
-    return this._user;
-  }
-
-  user() {
-    return this._user;
-  }
-
-  getSession() {
-    return Api.getSession()
-      .then(userCtx => {
-        this.setUser(userCtx);
-        if (this.isLoggedIn()) {
-          this._authenticateResolve(this.user());
-        }
-      })
-      .catch(err => {
-        this._authenticateReject(err);
-      });
-  }
-
-  isAdminParty() {
-    if (!this._allowAdminParty) {
-      return false;
-    }
-
-    return !this._user.name && this._user.isAdmin;
-  }
-
-  isLoggedIn() {
-    return !_.isNull(this._user.name);
-  }
-
-  userRoles() {
-    const user = this._user;
-
-    if (this.isLoggedIn()) {
-      if (user.roles.indexOf("fx_loggedIn") === -1) {
-        user.roles.push("fx_loggedIn");
-      }
-      return user.roles;
-    }
-    return [];
-  }
-
-  onChange(fn) {
-    let uuid = uniqueId();
-    this._onChange[uuid] = fn;
-    return () => {
-      delete this._onChange[uuid];
-    };
-  }
-
-  matchesRoles(roles = []) {
-    if (roles.length === 0) {
-      return true;
-    }
-
-    const numberMatchingRoles = _.intersection(this.userRoles(), roles).length;
-    return numberMatchingRoles > 0;
-  }
-}
diff --git a/app/addons/cluster/__tests__/cluster.test.js b/app/addons/cluster/__tests__/cluster.test.js
deleted file mode 100644
index c9012bf..0000000
--- a/app/addons/cluster/__tests__/cluster.test.js
+++ /dev/null
@@ -1,42 +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.
-import FauxtonAPI from "../../../core/api";
-import {DisabledConfigController} from "../cluster";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from 'sinon';
-
-
-describe('Cluster Controller', () => {
-  let controller;
-
-  beforeEach(() => {
-    FauxtonAPI.reduxDispatch = sinon.stub();
-
-    var nodeList = [
-      {'node': 'node1@127.0.0.1', 'isInCluster': true},
-      {'node': 'node2@127.0.0.1', 'isInCluster': true},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false}
-    ];
-
-    controller = mount(
-      <DisabledConfigController nodes={nodeList} />
-    );
-  });
-
-  it('renders the amount of nodes', () => {
-    expect(controller.text()).toMatch(/6 nodes/);
-  });
-});
diff --git a/app/addons/cluster/actions.js b/app/addons/cluster/actions.js
deleted file mode 100644
index 60ec0c9..0000000
--- a/app/addons/cluster/actions.js
+++ /dev/null
@@ -1,58 +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.
-
-import FauxtonAPI from "../../core/api";
-import getNodes from "./api";
-import ActionTypes from "./actiontypes";
-
-export default {
-  fetchNodes () {
-    getNodes().then((nodes) => {
-      this.updateNodes({
-        nodes: nodes.nodes_mapped
-      });
-    })
-      .catch(err => {
-        FauxtonAPI.addNotification({
-          type: 'error',
-          msg: err.message,
-          clear: true
-        });
-      });
-  },
-
-  updateNodes (options) {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.CLUSTER_FETCH_NODES,
-      options: options
-    });
-  },
-
-  navigateToNodeBasedOnNodeCount (successtarget) {
-    getNodes().then((nodes) => {
-      const allNodes = nodes.all_nodes;
-
-      if (allNodes.length === 1) {
-        return FauxtonAPI.navigate(successtarget + allNodes[0]);
-      }
-      return FauxtonAPI.navigate('/cluster/disabled', {trigger: true});
-    })
-      .catch(err => {
-        FauxtonAPI.addNotification({
-          type: 'error',
-          msg: err.message,
-          clear: true
-        });
-      });
-  }
-
-};
diff --git a/app/addons/cluster/actiontypes.js b/app/addons/cluster/actiontypes.js
deleted file mode 100644
index 525e7f6..0000000
--- a/app/addons/cluster/actiontypes.js
+++ /dev/null
@@ -1,15 +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.
-
-export default {
-  CLUSTER_FETCH_NODES: 'CLUSTER_FETCH_NODES'
-};
diff --git a/app/addons/cluster/api.js b/app/addons/cluster/api.js
deleted file mode 100644
index a6c05a1..0000000
--- a/app/addons/cluster/api.js
+++ /dev/null
@@ -1,34 +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.
-
-import Helpers from "../../helpers";
-import {get} from '../../core/ajax';
-
-export default () => {
-  return get(Helpers.getServerUrl('/_membership'))
-    .then(res => {
-      if (!res.all_nodes) {
-        const details = res.reason ? res.reason : '';
-        throw new Error('Failed to load list of nodes.' + details);
-      }
-
-      const list = res.all_nodes.reduce(function (acc, node) {
-        var isInCluster = res.cluster_nodes.indexOf(node) !== -1;
-
-        acc.push({node: node, isInCluster: isInCluster});
-        return acc;
-      }, []);
-
-      res.nodes_mapped = list;
-      return res;
-    });
-};
diff --git a/app/addons/cluster/base.js b/app/addons/cluster/base.js
deleted file mode 100644
index d61ca99..0000000
--- a/app/addons/cluster/base.js
+++ /dev/null
@@ -1,23 +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.
-
-import Cluster from "./routes";
-import FauxtonAPI from "../../core/api";
-import reducers from './reducers';
-
-Cluster.initialize = function () {};
-
-FauxtonAPI.addReducers({
-  clusters: reducers
-});
-
-export default Cluster;
diff --git a/app/addons/cluster/cluster.js b/app/addons/cluster/cluster.js
deleted file mode 100644
index 7a4d1a3..0000000
--- a/app/addons/cluster/cluster.js
+++ /dev/null
@@ -1,50 +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.
-
-import React from "react";
-import {connect} from 'react-redux';
-
-export class DisabledConfigController extends React.Component {
-  render() {
-    return (
-      <div className="config-warning-cluster-wrapper">
-        <div className="config-warning-cluster-container">
-          <div>
-            <div className="config-warning-icon-container pull-left">
-              <i className="fonticon-attention-circled"></i>
-            </div>
-            It seems that you are running a cluster with {this.props.nodes.length} nodes. For CouchDB 2.0
-            or greater we recommend using a configuration management tools like Chef, Ansible,
-            Puppet or Salt (in no particular order) to configure your nodes in a cluster.
-            <br/>
-            <br/>
-            <div className="config-warning-other-text">
-              We highly recommend against configuring nodes in your cluster using the HTTP API and
-              suggest using a configuration management tool for all configurations.
-            </div>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-const mapStateToProps = ({clusters}) => {
-  return {
-    nodes: clusters.nodes
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  null,
-)(DisabledConfigController);
diff --git a/app/addons/cluster/reducers.js b/app/addons/cluster/reducers.js
deleted file mode 100644
index 8a48c7a..0000000
--- a/app/addons/cluster/reducers.js
+++ /dev/null
@@ -1,29 +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.
-
-import ActionTypes from "./actiontypes";
-
-const initialState = {
-  nodes: []
-};
-
-export default (state = initialState, {type, options}) => {
-  switch (type) {
-    case ActionTypes.CLUSTER_FETCH_NODES:
-      return {
-        ...state,
-        nodes: options.nodes
-      };
-  }
-
-  return state;
-};
diff --git a/app/addons/cluster/routes.js b/app/addons/cluster/routes.js
deleted file mode 100644
index 37ed665..0000000
--- a/app/addons/cluster/routes.js
+++ /dev/null
@@ -1,43 +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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import Helpers from "../../helpers";
-import DisabledConfigController from "./cluster";
-import ClusterActions from "./actions";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-
-var ConfigDisabledRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Configuration',
-
-  routes: {
-    'cluster/disabled': 'showDisabledFeatureScreen'
-  },
-
-  showDisabledFeatureScreen: function () {
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<DisabledConfigController/>}
-      endpoint={Helpers.getServerUrl('/_membership')}
-      docURL={FauxtonAPI.constants.DOC_URLS.MEMBERSHIP}
-      crumbs={[
-        { name: 'Config disabled' }
-      ]}
-    />;
-  }
-});
-
-export default {
-  RouteObjects: [ConfigDisabledRouteObject]
-};
diff --git a/app/addons/components/README.md b/app/addons/components/README.md
deleted file mode 100644
index 01bf4b5..0000000
--- a/app/addons/components/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Components
-
-small building blocks for Fauxton built using React
diff --git a/app/addons/components/__tests__/accordion.test.js b/app/addons/components/__tests__/accordion.test.js
deleted file mode 100644
index 40eb602..0000000
--- a/app/addons/components/__tests__/accordion.test.js
+++ /dev/null
@@ -1,48 +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.
-
-import { Accordion, AccordionItem } from '../components/accordion';
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-
-describe('Accordion', () => {
-
-  it('Shows and hides content after clicking on header', () => {
-    const el = mount(
-      <Accordion>
-        <AccordionItem title={'Click to open'}>
-          <p id="test_content">Have a great day</p>
-        </AccordionItem>
-      </Accordion>
-    );
-
-    expect(el.find('.faux--accordion__item-content').hasClass('in')).toBe(false);
-    el.find('.faux--accordion__item-header').simulate('click');
-    expect(el.find('.faux--accordion__item-content').hasClass('in')).toBe(true);
-  });
-
-  it('Calls onClick event', () => {
-    const spy = sinon.spy();
-    const el = mount(
-      <Accordion>
-        <AccordionItem title={'Click to open'} onClick={spy}>
-          <p id="test_content">Have a great day</p>
-        </AccordionItem>
-      </Accordion>
-    );
-
-    el.find('.faux--accordion__item-header').simulate('click');
-    sinon.assert.called(spy);
-  });
-
-});
diff --git a/app/addons/components/__tests__/apilinks.test.js b/app/addons/components/__tests__/apilinks.test.js
deleted file mode 100644
index 75dfe15..0000000
--- a/app/addons/components/__tests__/apilinks.test.js
+++ /dev/null
@@ -1,37 +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.
-import { JSONLink, DocLink } from "../components/apibar";
-import { mount } from "enzyme";
-import React from "react";
-import ReactDOM from "react-dom";
-
-describe('JSONLink', () => {
-
-  it('Should render with url', () => {
-    const url = "http://couchdb.com/_all_dbs";
-    const el = mount(<JSONLink endpoint={url}/>);
-
-    expect(el.find('a').prop('href')).toEqual(url);
-  });
-
-});
-
-describe('DocLink', () => {
-
-  it('Should render with url', () => {
-    const url = "http://couchdb.com/help/_all_dbs";
-    const el = mount(<DocLink docURL={url}/>);
-
-    expect(el.find('a').prop('href')).toEqual(url);
-  });
-
-});
diff --git a/app/addons/components/__tests__/badges.test.js b/app/addons/components/__tests__/badges.test.js
deleted file mode 100644
index 5cb84cc..0000000
--- a/app/addons/components/__tests__/badges.test.js
+++ /dev/null
@@ -1,34 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-describe('Badges', () => {
-  it('renders a list of badges', () => {
-    const el = mount(
-      <ReactComponents.BadgeList elements={['foo', 'bar']} removeBadge={() => {}} />
-    );
-
-    expect(el.find('.component-badge').length).toBe(2);
-  });
-
-  it('supports custom label formatters', () => {
-    const el = mount(
-      <ReactComponents.BadgeList elements={['foo', 'bar']} removeBadge={() => {}} getLabel={(el) => { return el + 'foo'; }} />
-    );
-
-    expect(el.find('.component-badge').first().text()).toBe('foofoo×');
-    expect(el.find('.component-badge').last().text()).toBe('barfoo×');
-  });
-
-});
diff --git a/app/addons/components/__tests__/beautify.test.js b/app/addons/components/__tests__/beautify.test.js
deleted file mode 100644
index faefe5f..0000000
--- a/app/addons/components/__tests__/beautify.test.js
+++ /dev/null
@@ -1,68 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-describe('Beautify', () => {
-  let beautifyEl;
-
-  it('should be empty for multi-lined code', () => {
-    const correctCode = 'function() {\n    console.log("hello");\n}';
-    beautifyEl = mount(
-      <ReactComponents.Beautify code={correctCode}/>
-    );
-    expect(beautifyEl.instance().render()).toBeNull();
-  });
-
-  it('should have button to beautify for single line code', () => {
-    const badCode = '() => { console.log("hello"); }';
-    beautifyEl = mount(<ReactComponents.Beautify code={badCode}/>);
-    expect(beautifyEl.find('button').hasClass('beautify')).toBeTruthy();
-  });
-
-  it('on click beautifies code', () => {
-    let fixedCode;
-    const correctCode = 'function() {\n    console.log("hello");\n}';
-
-    const beautifiedCode = (code) => {
-      fixedCode = code;
-    };
-
-    beautifyEl = mount(
-      <ReactComponents.Beautify
-        beautifiedCode={beautifiedCode}
-        code={'function() { console.log("hello"); }'}
-        noOfLines={1}/>
-    );
-    beautifyEl.simulate('click');
-    expect(fixedCode).toBe(correctCode);
-  });
-
-  it('on click beautifies es6 code', () => {
-    let fixedCode;
-    const correctCode = '({\n    type,\n    code\n}) => type === \'WIDGET\' && emit(code, 1)';
-
-    const beautifiedCode = (code) => {
-      fixedCode = code;
-    };
-
-    beautifyEl = mount(
-      <ReactComponents.Beautify
-        beautifiedCode={beautifiedCode}
-        code={'({type,code}) => type === \'WIDGET\' && emit(code,1)'}
-        noOfLines={1}/>
-    );
-    beautifyEl.simulate('click');
-    expect(fixedCode).toBe(correctCode);
-  });
-});
diff --git a/app/addons/components/__tests__/codeEditor.test.js b/app/addons/components/__tests__/codeEditor.test.js
deleted file mode 100644
index a4990c6..0000000
--- a/app/addons/components/__tests__/codeEditor.test.js
+++ /dev/null
@@ -1,137 +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.
-
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-var code = 'function (doc) {\n  emit(doc._id, 1);\n}';
-var code2 = 'function (doc) {\n if(doc._id) { \n emit(doc._id, 2); \n } \n}';
-
-var ignorableErrors = [
-  'Missing name in function declaration.',
-  "['{a}'] is better written in dot notation."
-];
-
-describe('Code Editor', () => {
-  let codeEditorEl, spy;
-
-  beforeEach(() => {
-    spy = sinon.spy();
-
-    codeEditorEl = mount(
-      <ReactComponents.CodeEditor defaultCode={code} blur={spy} />
-    );
-  });
-
-  describe('Tracking edits', () => {
-    it('no change on mount', () => {
-      expect(codeEditorEl.instance().hasChanged()).toBeFalsy();
-    });
-
-    it('detects change on user input', () => {
-      codeEditorEl.instance().editor.setValue(code2, -1);
-      expect(codeEditorEl.instance().hasChanged()).toBeTruthy();
-    });
-  });
-
-  describe('onBlur', () => {
-    it('calls blur function', () => {
-      codeEditorEl.instance().editor._emit('blur');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-  describe('setHeightToLineCount', () => {
-    it('check default num lines #1', () => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} setHeightToLineCount={true} />
-      );
-      codeEditorEl.update();
-      expect(codeEditorEl.instance().editor.getSession().getDocument().getLength()).toBe(3);
-    });
-    it('check default num lines #2', () => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code2} setHeightToLineCount={true} />
-      );
-      expect(codeEditorEl.instance().editor.getSession().getDocument().getLength()).toBe(5);
-    });
-    // Skipping because the maxLines option is not working in the ACE editor
-    it.skip('check maxLines', () => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code2} setHeightToLineCount={true} maxLines={2} />
-      );
-      expect(codeEditorEl.instance().editor.getSession().getDocument().getLength()).toBe(2);
-    });
-  });
-
-  describe('removeIncorrectAnnotations', () => {
-    beforeEach(() => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} ignorableErrors={ignorableErrors} />
-      );
-    });
-    it('removes default errors that do not apply to CouchDB Views', () => {
-      expect(codeEditorEl.instance().getAnnotations()).toEqual([]);
-    });
-  });
-
-  describe('getEditor', () => {
-    beforeEach(() => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} />
-      );
-    });
-    it('returns a reference to get access to the editor', () => {
-      expect(codeEditorEl.instance().getEditor()).toBeTruthy();
-    });
-  });
-
-  describe('parseLineForStringMatch', () => {
-    const initEditor = (code) => {
-      const editor = mount(
-        <ReactComponents.CodeEditor defaultCode={code} />
-      );
-      sinon.stub(editor.instance(), 'getSelectionStart').returns({row: 1});
-      sinon.stub(editor.instance(), 'getSelectionEnd').returns({row: 1});
-      sinon.stub(editor.instance(), 'isRowExpanded').returns(true);
-      return editor;
-    };
-
-    it('returns matches on pretty formatted code', () => {
-      const code = '{\n "field": "my string value" \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value" ').toBe(matches[3]);
-    });
-    it('returns matches when line ends with comma', () => {
-      const code = '{\n "field": "my string value", \n "field2": 123 \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value", ').toBe(matches[3]);
-    });
-    it('returns matches on code with extra spaces', () => {
-      const code = '{\n "field"  \t :  \t "my string value"  \t  ,  \t  \n "field2": 123 \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value"  \t  ,  \t  ').toBe(matches[3]);
-    });
-    it('returns matches on code with special and non-ASCII chars', () => {
-      const code = '{\n "@langua漢字g e" : "my string value",\n "field2": 123 \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value",').toBe(matches[3]);
-    });
-  });
-
-});
diff --git a/app/addons/components/__tests__/codeEditorPanel.test.js b/app/addons/components/__tests__/codeEditorPanel.test.js
deleted file mode 100644
index a13608b..0000000
--- a/app/addons/components/__tests__/codeEditorPanel.test.js
+++ /dev/null
@@ -1,75 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-var codeNoNewlines = 'function (doc) {emit(doc._id, 1);}';
-var code = 'function (doc) {\n  emit(doc._id, 1);\n}';
-
-describe('CodeEditorPanel', () => {
-
-  describe('Doc icon', () => {
-    it('hidden by default', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel defaultCode={code} />
-      );
-      expect(codeEditorEl.find('.icon-question-sign').length).toBe(0);
-    });
-    it('hidden by default', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel defaultCode={code} docLink="http://link.com" />
-      );
-      expect(codeEditorEl.find('.icon-question-sign').length).toBe(1);
-    });
-  });
-
-  describe('Zen Mode', () => {
-    it('shows zen mode by default', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel defaultCode={code} />
-      );
-      expect(codeEditorEl.find('.zen-editor-icon').length).toBe(1);
-    });
-
-    it('omits zen mode if explicitly turned off', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} allowZenMode={false} />
-      );
-      expect(codeEditorEl.find('.zen-editor-icon').length).toBe(0);
-    });
-  });
-
-  describe('Beautify', () => {
-    it('confirm clicking beautify actually works within context of component', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel
-          defaultCode={codeNoNewlines}
-        />
-      );
-
-      // confirm there are no newlines in the code at this point
-      expect(codeEditorEl.instance().getValue().match(/\n/g)).toBeNull();
-
-      codeEditorEl.find('.beautify').simulate('click');
-
-      // now confirm newlines are found
-      expect(codeEditorEl.instance().getValue().match(/\n/g).length).toBe(2);
-    });
-  });
-
-});
diff --git a/app/addons/components/__tests__/confirmButton.test.js b/app/addons/components/__tests__/confirmButton.test.js
deleted file mode 100644
index 1b3df1d..0000000
--- a/app/addons/components/__tests__/confirmButton.test.js
+++ /dev/null
@@ -1,51 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('ConfirmButton', function () {
-  let button;
-
-  it('should render text properties', function () {
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here to render Rocko Artischocko" />
-    );
-    expect(button.text()).toBe('Click here to render Rocko Artischocko');
-  });
-
-  it('should use onClick handler if provided', function () {
-    const spy = sinon.spy();
-
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here" onClick={spy} />
-    );
-
-    button.simulate('click');
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('shows icon by default', function () {
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here" onClick={function () { }} />
-    );
-    expect(button.find('.icon').length).toBe(1);
-  });
-
-  it('optionally omits the icon', function () {
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here" onClick={function () { }} showIcon={false} />
-    );
-    expect(button.find('.icon').length).toBe(0);
-  });
-});
diff --git a/app/addons/components/__tests__/copy.test.js b/app/addons/components/__tests__/copy.test.js
deleted file mode 100644
index 64216c7..0000000
--- a/app/addons/components/__tests__/copy.test.js
+++ /dev/null
@@ -1,39 +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.
-import { Copy } from "../components/copy";
-import { mount } from "enzyme";
-import React from "react";
-import ReactDOM from "react-dom";
-import uuid from 'uuid';
-
-describe('Copy', () => {
-
-  it('shows a copy icon by default', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} text="copy me"/>);
-    expect(wrapper.find('.icon-paste').length).toBe(1);
-  });
-
-  it('shows text if specified', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} text="copy me" displayType="text" />);
-    expect(wrapper.find('.icon-paste').length).toBe(0);
-  });
-
-  it('shows custom text if specified', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} displayType="text" textDisplay="booyah!" text="copy me" />);
-    expect(wrapper.html()).toMatch(/booyah!/);
-  });
-
-  it('shows an input field and button if specified', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} displayType='input' text="http://localhost:8000/_all_dbs" />);
-    expect(wrapper.find('input').length).toBe(1);
-  });
-});
diff --git a/app/addons/components/__tests__/deleteDatabaseModal.test.js b/app/addons/components/__tests__/deleteDatabaseModal.test.js
deleted file mode 100644
index 9c12cd7..0000000
--- a/app/addons/components/__tests__/deleteDatabaseModal.test.js
+++ /dev/null
@@ -1,57 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-const noop = () => {};
-
-describe('DeleteDatabaseModal', function () {
-
-  it('submitting is disabled when initially rendered', function () {
-    const modal = mount(
-      <ReactComponents.DeleteDatabaseModal
-        showHide={noop}
-        modalProps={{isSystemDatabase: false, showDeleteModal: true, dbId: 'fooo'}} />
-    );
-
-    expect(modal.find('button.delete').first().prop('disabled')).toBe(true);
-  });
-
-  it('submitting is disabled when garbage entered', function () {
-    const modal = mount(
-      <ReactComponents.DeleteDatabaseModal
-        showHide={noop}
-        modalProps={{isSystemDatabase: false, showDeleteModal: true, dbId: 'fooo'}} />
-    );
-
-    const input = modal.find('input');
-
-    input.simulate('change', {target: {value: 'Hello, world'}});
-    expect(modal.find('button.delete').prop('disabled')).toBe(true);
-  });
-
-  it('submitting is enabled when same db name entered', function () {
-    const modal = mount(
-      <ReactComponents.DeleteDatabaseModal
-        showHide={noop}
-        modalProps={{isSystemDatabase: false, showDeleteModal: true, dbId: 'fooo'}} />
-    );
-
-    var input = modal.find('.modal').find('input');
-
-    input.simulate('change', {target: {value: 'fooo'}});
-    expect(modal.find('button.delete').prop('disabled')).toBeFalsy();
-  });
-
-
-});
diff --git a/app/addons/components/__tests__/doc.test.js b/app/addons/components/__tests__/doc.test.js
deleted file mode 100644
index 6107ca1..0000000
--- a/app/addons/components/__tests__/doc.test.js
+++ /dev/null
@@ -1,181 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-const noop = () => {};
-
-describe('Document', () => {
-  let el;
-
-  const doc = {};
-  _.times(1000, (n) => {
-    doc['prop' + n] = n;
-  });
-
-  const docContent = JSON.stringify(doc, null, '  ');
-
-  it('hosts child elements', () => {
-    el = mount(
-      <ReactComponents.Document docIdentifier="foo" docChecked={noop}>
-        <div className="foo-children"></div>
-      </ReactComponents.Document>
-    );
-    expect(el.find('.foo-children').length).toBeGreaterThan(0);
-  });
-
-  it('does not require child elements', () => {
-    el = mount(
-      <ReactComponents.Document docIdentifier="foo" docChecked={noop} />
-    );
-    expect(el.find('.doc-edit-symbol').length).toBe(0);
-  });
-
-  it('you can check it', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} checked={true} docIdentifier="foo" />
-    );
-    expect(el.find('input').prop('data-checked')).toBe(true);
-  });
-
-  it('you can uncheck it', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} docIdentifier="foo" />
-    );
-    expect(el.find('[data-checked="true"]').length).toBe(0);
-  });
-
-  it('it calls an onchange callback', () => {
-    var spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.Document doc={{id: "foo"}} isDeletable={true} docChecked={spy} docIdentifier="foo" />
-    );
-    el.find('input[type="checkbox"]').first().simulate('change', {target: {value: 'Hello, world'}});
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('it calls an onclick callback', () => {
-    var spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} onClick={spy} docIdentifier="foo" />
-    );
-    el.find('.doc-item header').first().simulate('click');
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('can render without checkbox', () => {
-    var spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={false} onDoubleClick={spy} docIdentifier="foo" />
-    );
-    expect(el.find('input[type="checkbox"]').length).toBe(0);
-    expect(el.find('.checkbox-dummy').length).toBeGreaterThan(0);
-  });
-
-  it('contains a doc-data element when there\'s doc content', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} checked={true} docIdentifier="foo" docContent='{ "content": true }' />
-    );
-    expect(el.find('.doc-data').length).toBe(1);
-  });
-
-  it('doesn\'t contain a doc-data element when there\'s no doc content', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} checked={true} docIdentifier="foo" docContent='' />
-    );
-    expect(el.find('.doc-data').length).toBe(0);
-  });
-
-  it('allows empty headers', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header={null} isDeletable={true} checked={true} docIdentifier="foo" docContent='' />,
-    );
-    expect(el.find('.header-doc-id').text()).toBe('');
-  });
-
-  it('allows supports headers with "', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent='' />
-    );
-    expect(el.find('.header-doc-id').text()).toBe('"foo"');
-  });
-
-  it('small docs should not be truncated', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent='{ "content": true }' />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(0);
-  });
-
-  it('large docs should get truncated', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent={docContent} />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(1);
-  });
-
-  it('custom truncate value', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent={docContent} maxRows={2000} />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(0);
-  });
-
-  it('disabling truncation', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent={docContent} truncate={false} />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(0);
-  });
-
-  it('shows icon only for docs with type MangoIndex', () => {
-    const index = {
-      type: "json",
-      def: { fields: [{ foo: "asc" }] }
-    };
-    const content = JSON.stringify(index, null, '  ');
-    const elMangoIndex = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true}
-        checked={false} docIdentifier="foo" docContent={content}
-        truncate={false} docType="MangoIndex"/>
-    );
-    expect(elMangoIndex.find('i.fonticon-document').exists()).toBe(true);
-
-    const elRegularDoc = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true}
-        checked={false} docIdentifier="foo" docContent={content}
-        truncate={false} docType="view"/>
-    );
-    expect(elRegularDoc.find('i.fonticon-documents').exists()).toBe(false);
-  });
-
-  it('shows icon for partitioned mango index', () => {
-    const index = {
-      type: "json",
-      partitioned: true,
-      def: { fields: [{ foo: "asc" }] }
-    };
-    const content = JSON.stringify(index, null, '  ');
-    const elMangoIndex = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true}
-        checked={false} docIdentifier="foo" docContent={content}
-        truncate={false} docType="MangoIndex"/>
-    );
-    expect(elMangoIndex.find('i.fonticon-documents').exists()).toBe(true);
-  });
-
-});
diff --git a/app/addons/components/__tests__/headerBreadcrumbs.test.js b/app/addons/components/__tests__/headerBreadcrumbs.test.js
deleted file mode 100644
index 8231aee..0000000
--- a/app/addons/components/__tests__/headerBreadcrumbs.test.js
+++ /dev/null
@@ -1,75 +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.
-
-import React from 'react';
-import {mount} from 'enzyme';
-
-import {Breadcrumbs} from '../header-breadcrumbs';
-
-describe('Breadcrumbs', () => {
-  it('should not inject dividers if 1 element present', () => {
-
-    const crumbs = [{name: 'pineapple'}];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-    expect(el.find('.faux-header__breadcrumbs-divider').length).toBe(0);
-  });
-
-  it('should inject 2 dividers if 3 elements present', () => {
-
-    const crumbs = [
-      {name: 'pineapple'},
-      {name: 'mango'},
-      {name: 'guayaba'}
-    ];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-
-    expect(el.find('.faux-header__breadcrumbs-divider').length).toBe(2);
-  });
-
-  it('linked breadcrumbs are possible', () => {
-
-    const crumbs = [
-      {name: 'pineapple'},
-      {name: 'mango', link: 'http://example.com'},
-      {name: 'guayaba'}
-    ];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-    expect(el.find('.faux-header__breadcrumbs-link').length).toBe(1);
-  });
-
-  it('linked breadcrumbs are not created for non-linked elements', () => {
-
-    const crumbs = [
-      {name: 'pineapple'},
-      {name: 'mango'},
-      {name: 'guayaba'}
-    ];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-    expect(el.find('.faux-header__breadcrumbs-link').length).toBe(0);
-  });
-});
diff --git a/app/addons/components/__tests__/headerTogglebutton.test.js b/app/addons/components/__tests__/headerTogglebutton.test.js
deleted file mode 100644
index 9ea0b59..0000000
--- a/app/addons/components/__tests__/headerTogglebutton.test.js
+++ /dev/null
@@ -1,30 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('Header Togglebutton', () => {
-  let toggleEl, toggleCallback;
-  beforeEach(() => {
-    toggleCallback = sinon.spy();
-    toggleEl = mount(<ReactComponents.ToggleHeaderButton fonticon={'foo'}
-      classString={'bar'} toggleCallback={toggleCallback} />);
-  });
-
-
-  it('should call the passed callback', () => {
-    toggleEl.simulate('click');
-    expect(toggleCallback.calledOnce).toBeTruthy();
-  });
-});
diff --git a/app/addons/components/__tests__/paddedBorderedBox.test.js b/app/addons/components/__tests__/paddedBorderedBox.test.js
deleted file mode 100644
index 80abf3e..0000000
--- a/app/addons/components/__tests__/paddedBorderedBox.test.js
+++ /dev/null
@@ -1,27 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-describe('PaddedBorderedBox', function () {
-  let el;
-
-  it('hosts child elements', function () {
-    el = mount(
-      <ReactComponents.PaddedBorderedBox>
-        <div className="foo-children"></div>
-      </ReactComponents.PaddedBorderedBox>
-    );
-    expect(el.find('.foo-children').length).toBeGreaterThan(0);
-  });
-});
diff --git a/app/addons/components/__tests__/polling.test.js b/app/addons/components/__tests__/polling.test.js
deleted file mode 100644
index e1d9cec..0000000
--- a/app/addons/components/__tests__/polling.test.js
+++ /dev/null
@@ -1,105 +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.
-import {Polling, clearPollCounter, resetPollCounter} from "../components/polling";
-import {mount} from "enzyme";
-import sinon from "sinon";
-import React from "react";
-
-describe("Polling", () => {
-  describe('Counters', () => {
-
-    it('resetPollCounter calls cb after set time', done => {
-      let called = false;
-      resetPollCounter(100, () => {
-        called = true;
-        expect(called).toBeTruthy();
-        done();
-      });
-    });
-
-    it('clearRefreshCounter stops counter', done => {
-      let called = false;
-      resetPollCounter(100, () => {
-        called = true;
-      });
-
-      clearPollCounter();
-      setTimeout(() => {
-        expect(called).toBeFalsy();
-        done();
-      }, 200);
-    });
-  });
-
-  describe('Component', () => {
-    var clock;
-    beforeEach(() => {
-      clock = sinon.useFakeTimers();
-    });
-
-    afterEach(() => {
-      clock.restore();
-    });
-
-    it('renders slider with correct info', () => {
-      const wrapper = mount(<Polling
-        startValue={10}
-        min={1}
-        max={20}
-        stepSize={1}
-        onPoll={() => {}}
-      />);
-
-      const props = wrapper.find('.faux__polling-info-slider').at(0).props();
-      expect(props.defaultValue).toEqual(10);
-      expect(props.step).toEqual(1);
-      expect(props.min).toEqual(1);
-      expect(props.max).toEqual(21);
-    });
-
-    it('turns polling off if value is max', () => {
-      const wrapper = mount(<Polling
-        startValue={10}
-        min={1}
-        max={20}
-        stepSize={1}
-        onPoll={() => {}}
-      />);
-
-      const handler = wrapper.find('.rc-slider-handle').at(1);
-      wrapper.simulate('focus');
-      // Simulate key END to move handle to the max value
-      handler.simulate('keyDown', { keyCode: 35 });
-      const isOff = wrapper.find('.faux__polling-info-value--off').text();
-      expect(isOff.toLowerCase()).toEqual("off");
-    });
-
-    it('turns polling off if value is max', (done) => {
-      let pollCalled = false;
-      const onPoll = () => {
-        pollCalled = true;
-        expect(pollCalled).toBeTruthy();
-        done();
-      };
-      mount(<Polling
-        startValue={1}
-        min={1}
-        max={20}
-        stepSize={1}
-        onPoll={onPoll}
-      />);
-
-      clock.tick(1010);
-
-    });
-  });
-});
diff --git a/app/addons/components/__tests__/stringEditModal.test.js b/app/addons/components/__tests__/stringEditModal.test.js
deleted file mode 100644
index ffd5921..0000000
--- a/app/addons/components/__tests__/stringEditModal.test.js
+++ /dev/null
@@ -1,33 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-//need enzyme to support portals
-describe('String Edit Modal', () => {
-  var stub = () => {};
-
-  describe('onSave', () => {
-    it('ensures same content returns on saving', () => {
-      var string = "a string!";
-      var spy = sinon.spy();
-      const el = mount(
-        <ReactComponents.StringEditModal visible={true} onClose={stub} onSave={spy} value={string} />
-      );
-      el.find('#string-edit-save-btn').simulate('click');
-      sinon.assert.calledOnce(spy);
-      sinon.assert.calledWith(spy, string);
-    });
-  });
-});
diff --git a/app/addons/components/__tests__/styledSelect.test.js b/app/addons/components/__tests__/styledSelect.test.js
deleted file mode 100644
index a1e6366..0000000
--- a/app/addons/components/__tests__/styledSelect.test.js
+++ /dev/null
@@ -1,47 +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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('styled select', () => {
-  let selectorEl, spy = sinon.spy();
-
-  beforeEach(() => {
-    const selectContent = (
-      <optgroup label="Select a document">
-        <option value="new">New Design Document</option>
-        <option value="foo">New Design Document</option>
-      </optgroup>
-    );
-
-    selectorEl = mount(
-      <ReactComponents.StyledSelect
-        selectValue={"foo"}
-        selectId="new-ddoc"
-        selectClass=""
-        selectContent={selectContent}
-        selectChange={spy} />
-    );
-  });
-
-  it('calls the callback on select', () => {
-    selectorEl.find('#new-ddoc').simulate('change', {
-      target: {
-        value: 'new'
-      }
-    });
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-});
diff --git a/app/addons/components/__tests__/tabwindowwrapper.test.js b/app/addons/components/__tests__/tabwindowwrapper.test.js
deleted file mode 100644
index 2745bb2..0000000
--- a/app/addons/components/__tests__/tabwindowwrapper.test.js
+++ /dev/null
@@ -1,61 +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.
-import { TabWindowWrapper } from "../components/tabwindowwrapper";
-import { mount } from "enzyme";
-import React from "react";
-import ReactDOM from "react-dom";
-
-describe('TabWindowWrapper', () => {
-  const mock = () => {
-    return (<div></div>);
-  };
-
-  const tabs = [
-    {
-      name: 'Tab1',
-      component: mock,
-      route: 'tab1'
-    },
-    {
-      name: 'Tab2',
-      component: mock,
-      route: 'tab2'
-    },
-    {
-      name: 'Tab3',
-      component: mock,
-      route: 'tab3'
-    }
-  ];
-
-  it('shows all tabs', () => {
-    const wrapper = mount(<TabWindowWrapper tabs={tabs} selectedTab={"Tab1"}/>);
-    expect(wrapper.find('.component-tab-element-wrapper').length).toBe(1);
-    expect(wrapper.find('.tab-element-content').length).toBe(3);
-  });
-
-  it('shows the selected tab', () => {
-    const wrapper = mount(<TabWindowWrapper tabs={tabs} selectedTab={"Tab2"}/>);
-    expect(wrapper.find('.tab-element-checked .tab-element-content').html()).toMatch(/Tab2/);
-  });
-
-  it('shows tab badge', () => {
-    const tabNoBadge = [{name: 'Tab1', component: mock, route: 'tab1'}];
-    const wrapperNoBadge = mount(<TabWindowWrapper tabs={tabNoBadge} selectedTab={"Tab1"}/>);
-    expect(wrapperNoBadge.find('.tab-element-badge').length).toBe(0);
-
-    const tabWithBadge = [{name: 'Tab1', component: mock, route: 'tab1', badgeText: 'new'}];
-    const wrapperWithBadge = mount(<TabWindowWrapper tabs={tabWithBadge} selectedTab={"Tab1"}/>);
-    expect(wrapperWithBadge.find('.tab-element-badge').length).toBe(1);
-    expect(wrapperWithBadge.find('.tab-element-badge').text()).toBe('new');
-  });
-});
diff --git a/app/addons/components/__tests__/zenMode.test.js b/app/addons/components/__tests__/zenMode.test.js
deleted file mode 100644
index 1873227..0000000
--- a/app/addons/components/__tests__/zenMode.test.js
+++ /dev/null
@@ -1,55 +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.
-
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-var code = 'function (doc) {\n  emit(doc._id, 1);\n}';
-
-describe('Zen Mode', () => {
-  let el, spy;
-
-  beforeEach(() => {
-    spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.ZenModeOverlay defaultCode={code} onExit={spy} />
-    );
-  });
-
-  afterEach(() => {
-    window.localStorage.removeItem('zenTheme');
-  });
-
-  describe('Toggle theme', () => {
-    it('defaults to dark theme', () => {
-      expect(el.find('div.zen-theme-dark').exists()).toBeTruthy();
-    });
-
-    it('switch to light theme on click', () => {
-      el.find('.js-toggle-theme').simulate('click');
-      expect(el.find('div.zen-theme-light').exists()).toBeTruthy();
-      // reset
-      el.find('.js-toggle-theme').simulate('click');
-    });
-  });
-
-  describe('Closing zen mode', () => {
-    it('method called', () => {
-      el.find('.js-exit-zen-mode').simulate('click');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-});
diff --git a/app/addons/components/actions.js b/app/addons/components/actions.js
deleted file mode 100644
index bc1783b..0000000
--- a/app/addons/components/actions.js
+++ /dev/null
@@ -1,57 +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.
-
-import { deleteRequest } from '../../core/ajax';
-import FauxtonAPI from '../../core/api';
-import ActionTypes from './actiontypes';
-
-function showDeleteDatabaseModal (options) {
-  FauxtonAPI.dispatch({
-    type: ActionTypes.CMPNTS_DATABASES_SHOWDELETE_MODAL,
-    options: options
-  });
-}
-
-function deleteDatabase (dbId, onDeleteSuccess) {
-  const url = FauxtonAPI.urls('databaseBaseURL', 'server', dbId, '');
-
-  deleteRequest(url).then(resp => {
-    if (!resp.ok) {
-      const msg = resp.reason || '';
-      throw new Error(msg);
-    }
-    this.showDeleteDatabaseModal({ showModal: true });
-
-    FauxtonAPI.addNotification({
-      msg: 'The database <code>' + _.escape(dbId) + '</code> has been deleted.',
-      clear: true,
-      escape: false // beware of possible XSS when the message changes
-    });
-
-    Backbone.history.loadUrl(FauxtonAPI.urls('allDBs', 'app'));
-    if (onDeleteSuccess) {
-      onDeleteSuccess();
-    }
-  }).catch(err => {
-    FauxtonAPI.addNotification({
-      msg: 'Could not delete the database. ' + err.message,
-      type: 'error',
-      clear: true
-    });
-  });
-}
-
-
-export default {
-  deleteDatabase: deleteDatabase,
-  showDeleteDatabaseModal: showDeleteDatabaseModal
-};
diff --git a/app/addons/components/actiontypes.js b/app/addons/components/actiontypes.js
deleted file mode 100644
index d9e7183..0000000
--- a/app/addons/components/actiontypes.js
+++ /dev/null
@@ -1,15 +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.
-
-export default {
-  CMPNTS_DATABASES_SHOWDELETE_MODAL: 'CMPNTS_DATABASES_SHOWDELETE_MODAL'
-};
diff --git a/app/addons/components/assets/less/accordion.less b/app/addons/components/assets/less/accordion.less
deleted file mode 100644
index 16a504f..0000000
--- a/app/addons/components/assets/less/accordion.less
+++ /dev/null
@@ -1,27 +0,0 @@
-.faux--accordion {
-  list-style: none;
-  margin: 0px;
-  width: 100%;
-}
-
-.faux--accordion__item {
-  background-color: transparent;
-  transition: all 0.5s linear;
-}
-
-.faux--accordion__item-header {
-  border: 0;
-  background-color: transparent;
-  color: inherit;
-  font-size: inherit;
-  padding-left: 0px;
-  span {
-    padding-left: 0.5rem;
-  }
-}
-
-.faux--accordion__item-content {
-  padding-left: 1.35rem;
-  padding-top: 0.75rem;
-  font-size: inherit;
-}
diff --git a/app/addons/components/assets/less/badges.less b/app/addons/components/assets/less/badges.less
deleted file mode 100644
index a049758..0000000
--- a/app/addons/components/assets/less/badges.less
+++ /dev/null
@@ -1,20 +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.
-ul.component-badgelist {
-  margin: 0;
-  display: inline-block;
-  li {
-    list-style-type: none;
-    float: left;
-    margin-left: 5px;
-  }
-}
diff --git a/app/addons/components/assets/less/bulk-selector.less b/app/addons/components/assets/less/bulk-selector.less
deleted file mode 100644
index a55ba7f..0000000
--- a/app/addons/components/assets/less/bulk-selector.less
+++ /dev/null
@@ -1,123 +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.
-
-#bulk-action-component-popover {
-  font-size: 13px;
-
-  i.icon {
-    margin-right: 10px;
-  }
-
-  ul {
-    margin: inherit;
-  }
-
-  li {
-    padding: 14px 15px;
-    line-height: 0;
-    cursor: pointer;
-    list-style-type: none;
-
-    &.disabled {
-      color: #cccccc;
-      cursor: default;
-      &:hover {
-        background-color: inherit;
-      }
-    }
-
-    &:hover {
-      background-color: #fbcece; // light red
-    }
-    &:last-child {
-      -webkit-border-bottom-right-radius: 5px;
-      -webkit-border-bottom-left-radius: 5px;
-      -moz-border-radius-bottomright: 5px;
-      -moz-border-radius-bottomleft: 5px;
-      border-bottom-right-radius: 5px;
-      border-bottom-left-radius: 5px;
-    }
-  }
-  .popover-title {
-    margin: -1px;
-  }
-
-  .popover {
-    left: 10px !important;
-
-    .arrow {
-      margin-left: -39px;
-    }
-  }
-
-  .popover-content {
-    padding: 0;
-  }
-}
-
-.bulk-action-component {
-  min-height: 43px;
-
-  button {
-    height: 26px;
-    width: 26px;
-    background-color: @background;
-    border: 1px solid @darkBorder;
-    margin-left: 7px;
-  }
-
-  .fonticon-trash:before {
-    font-size: 12px;
-    margin-left: 2px;
-    margin-top: 1px;
-  }
-
-
-  .separator {
-    border-left: 1px solid @darkBorder;
-    margin: 5px 0;
-    height: 15px;
-  }
-
-  .bulk-action-component-selector-group {
-
-    .fonticon {
-      font-size: 8px;
-      color: #505050;
-      padding: 3px 0;
-      &:hover {
-        color: @dangerRed;
-      }
-    }
-
-  }
-
-  .bulk-action-component-panel {
-    input[type="checkbox"] {
-      margin: 6px;
-    }
-
-    border: 1px solid @darkBorder;
-
-    position: relative;
-    float: left;
-    div.arrow-button {
-      height: 24px;
-      width: 24px;
-      transform: rotate(90deg);
-      cursor: pointer;
-      i {
-        margin-left: 10px;
-      }
-    }
-  }
-}
diff --git a/app/addons/components/assets/less/code-editor.less b/app/addons/components/assets/less/code-editor.less
deleted file mode 100644
index eff819b..0000000
--- a/app/addons/components/assets/less/code-editor.less
+++ /dev/null
@@ -1,100 +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.
-
-.zen-editor-icon {
-  float: right;
-  font-size: 13px;
-  margin-top: 3px;
-}
-
-.full-page-editor-modal-wrapper {
-  position: fixed;
-  padding: 110px;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  margin: 0;
-  width: 100%;
-  z-index: 1025;
-
-  &.zen-theme-dark {
-    background-color: #323232;
-  }
-  &.zen-theme-light {
-    background-color: #ffffff;
-  }
-
-  &>div {
-    height: 100%;
-    &.zen-mode-controls {
-      height: 96px;
-    }
-  }
-
-  .ace_editor {
-    height: 100%;
-    font-size: 15px;
-    line-height: 25px;
-    background-color: inherit;
-
-    .ace_gutter, .ace_gutter-active-line {
-      background-color: inherit;
-    }
-  }
-}
-
-.zen-theme-light {
-  .zen-mode-controls {
-    color: #999999;
-  }
-}
-
-.zen-mode-controls {
-  position: absolute;
-  right: 30px;
-  top: 30px;
-  font-size: 20px;
-  color: white;
-
-  .zen-mode-controls-wrapper {
-    position: relative;
-    float: left;
-  }
-
-  .tooltips {
-    position: relative;
-    float: left;
-  }
-
-  ul {
-    float: right;
-    list-style-type: none;
-  }
-
-  .tooltip {
-    margin-right: 20px;
-    min-width: 140px;
-  }
-
-  span {
-    cursor: pointer;
-    width: 23px;
-    height: 23px;
-    margin: 10px;
-    display: inline-block;
-  }
-}
-
-html body .ace_editor .ace_marker-layer .ace_selection {
-  background-color: rgba(29, 151, 215, 0.5);
-}
diff --git a/app/addons/components/assets/less/components.less b/app/addons/components/assets/less/components.less
deleted file mode 100644
index a334648..0000000
--- a/app/addons/components/assets/less/components.less
+++ /dev/null
@@ -1,29 +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.
-
-@import "../../../../../assets/less/variables.less";
-
-@import "accordion.less";
-@import "header-togglebutton.less";
-@import "styled-select.less";
-@import "docs.less";
-@import "loading-lines.less";
-@import "code-editor.less";
-@import "bulk-selector.less";
-@import "badges.less";
-@import "modals.less";
-@import "tab-element.less";
-@import "header-breadcrumbs.less";
-@import "layouts.less";
-@import "polling.less";
-@import "jsonlink.less";
-@import "menudropdown.less";
diff --git a/app/addons/components/assets/less/docs.less b/app/addons/components/assets/less/docs.less
deleted file mode 100644
index a148d08..0000000
--- a/app/addons/components/assets/less/docs.less
+++ /dev/null
@@ -1,133 +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.
-
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-#doc-list {
-  .custom-inputs {
-    display: none;
-  }
-  padding: 30px 12px 0 12px;
-  div.doc-row {
-    margin-bottom: 20px;
-    .doc-item {
-      vertical-align: top;
-      position: relative;
-      .box-shadow(3px 4px 0 rgba(0, 0, 0, 0.3));
-      .doc-data {
-        border-bottom: 1px solid @docHeaderBorderBottom;
-        border-left: 1px solid @docHeaderOtherBorders;
-        border-right: 1px solid @docHeaderOtherBorders;
-        font-family: monospace;
-        .prettyprint--small {
-          font-size: 11px;
-        }
-        .prettyprint--large {
-          font-size: 15px;
-        }
-      }
-      header {
-        cursor: pointer;
-        font-weight: bold;
-        position: relative;
-        padding: 5px 10px;
-        background-color: @docHeaderBG;
-        border-bottom: 1px solid @docHeaderBorderBottom;
-        border-left: 1px solid @docHeaderOtherBorders;
-        border-right: 1px solid @docHeaderOtherBorders;
-        border-top: 1px solid @docHeaderOtherBorders;
-        .header-doc-id {
-          color: @docHeaderDocId;
-          margin-left: 0;
-        }
-        .header-keylabel {
-          margin-right: 10px;
-        }
-        .header-keylabel:empty
-        {
-          display:none;
-        }
-        .header-keylabel,
-        .fonticon-pencil {
-          color: @docHeaderLabels;
-        }
-        .doc-edit-symbol {
-          position: relative;
-        }
-        .fonticon-pencil {
-          font-size: 16px;
-        }
-        .fonticon-pencil:hover {
-          color: @hoverHighlight;
-        }
-      }
-    }
-  }
-}
-
-.view #doc-list {
-  padding-top: 12px;
-}
-
-.show-select {
-  #doc-list {
-    padding: 0px 0 30px 0;
-    .custom-inputs {
-      display: block;
-      float: left;
-    }
-  }
-  .checkbox.inline {
-    padding-top: 17px;
-    padding-left: 0;
-    label {
-      padding-left: 23px; // 7px to the right-border + 16px around
-    }
-  }
-  .checkbox-dummy {
-    width: 20px;
-    height: 20px;
-    padding-left: 23px;
-    margin-right: 15px;
-  }
-  .doc-item {
-    width: auto;
-    overflow: hidden;
-  }
-  label.label-checkbox-doclist {
-    // https://code.google.com/p/chromium/issues/detail?id=411065
-    -webkit-user-select: none;
-    height: 1px;
-    width: 1px;
-  }
-  /* checkboxes in doc-list */
-  input[type="checkbox"] + label:before {
-    background-color: @docCheckBoxUncheckedBG;
-    border: @docCheckBoxUncheckedBorder;
-  }
-  input[type="checkbox"] + label:hover:before {
-    border: @docCheckBoxHoverBorder;
-  }
-  input[type="checkbox"]:checked + label::before {
-    border: @docCheckBoxCheckedBorder;
-    background-color: @docCheckBoxCheckedBG;
-  }
-}
-
-.doc-content-truncated {
-  background-color: #4d4d4d;
-  color: #bbbbbb;
-  padding: 10px;
-  font-size: 13px;
-  margin: 0;
-}
diff --git a/app/addons/components/assets/less/header-breadcrumbs.less b/app/addons/components/assets/less/header-breadcrumbs.less
deleted file mode 100644
index 7e4b8a0..0000000
--- a/app/addons/components/assets/less/header-breadcrumbs.less
+++ /dev/null
@@ -1,51 +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.
-
-@import "../../../../../assets/less/variables.less";
-
-.faux-header__breadcrumbs {
-  .display-flex();
-  height: @collapsedNavWidth;
-}
-
-.faux-header__breadcrumbs-element {
-  margin: 0 4px 0 4px;
-  color: #333;
-  padding: 18px 10px;
-  font-size: 24px;
-  text-shadow: none;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-a.faux-header__breadcrumbs-link {
-  color: @brandHighlight;
-  &:hover {
-  color: @hoverHighlight;
-  text-decoration: none;
-  cursor: pointer;
-  }
-}
-
-
-.faux-header__breadcrumbs-divider {
-  width: 13px;
-  padding-top: 22px;
-  font-size: 20px;
-}
-
-.faux-header__controlbox-backlink {
-  border-right: 1px solid #ccc;
-  padding-left: 10px;
-  padding-right: 2px;
-}
diff --git a/app/addons/components/assets/less/header-togglebutton.less b/app/addons/components/assets/less/header-togglebutton.less
deleted file mode 100644
index 9df3672..0000000
--- a/app/addons/components/assets/less/header-togglebutton.less
+++ /dev/null
@@ -1,73 +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.
-@import "../../../../../assets/less/variables.less";
-
-.header-control-box {
-  color: #666;
-  font-size: 13px;
-  line-height: 33px;
-  padding: 12px 20px 12px 20px;
-  height: @collapsedNavWidth;
-  background-color: transparent;
-  border: none;
-  border-left: 1px solid @btnBorder;
-  text-decoration: none;
-  .icon {
-    font-size: 20px;
-    &:before {
-      float: left;
-      margin: 10px 0 0 0;
-    }
-  }
-  span {
-    margin-left: 6px;
-  }
-  .icon.fontawesome {
-    &:before {
-      margin: 6px 6px 0 0;
-    }
-  }
-}
-
-.header-control-square {
-  height: @collapsedNavWidth;
-  width: @collapsedNavWidth;
-  float: left;
-  .icon {
-    &:before {
-      margin: 0;
-      float: none;
-    }
-  }
-}
-
-.header-control-box:hover {
-  .icon, span {
-    color: @hoverHighlight;
-  }
-}
-
-.js-headerbar-togglebutton-selected {
-  .icon, span {
-    color: @linkColor;
-  }
-}
-
-button.control-toggle-alternative-header {
-  float: left;
-  border-right: 1px solid @btnBorder;
-  border-left: none;
-}
-
-button.control-toggle-alternative-header.js-headerbar-togglebutton-selected {
-  border-right: none;
-}
diff --git a/app/addons/components/assets/less/jsonlink.less b/app/addons/components/assets/less/jsonlink.less
deleted file mode 100644
index 304a848..0000000
--- a/app/addons/components/assets/less/jsonlink.less
+++ /dev/null
@@ -1,80 +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.
-
-.faux__jsonlink {
-  /*width: 76px; Static width cause rendering problems on Edge */
-  border-left: 1px solid #ccc;
-  padding: 16px 12px 12px 12px !important;
-  height: 64px;
-  background-color: rgba(0, 0, 0, 0);
-  text-align: center;
-  min-width: 55px;
-}
-
-.faux__jsonlink-link {
-  color: #666;
-  text-decoration: none;
-  line-height: 33px;
-  font-size: 13px;
-}
-
-.faux__jsonlink-link:visited,
-.faux__jsonlink-link:focus,
-.faux__jsonlink-link:active {
-  text-decoration: none;
-  color: #666;
-}
-
-.faux__jsonlink-link-brackets {
-  font-size: 15px;
-  padding-right: 3px;
-  font-weight: 500;
-}
-
-.faux__doclink {
-  text-align: center;
-  width: 55px;
-  border-left: 1px solid #ccc;
-  padding: 18px 12px 12px 12px !important;
-  height: 64px;
-  background-color: rgba(0, 0, 0, 0);
-}
-
-.faux__doclink-link {
-  color: #666;
-  text-decoration: none;
-  line-height: 33px;
-  font-size: 20px;
-}
-
-.faux__doclink-link:active,
-.faux__doclink-link:focus,
-.faux__doclink-link:visited {
-  text-decoration: none;
-  color: #666;
-}
-
-@media (max-width: 1090px) {
-  #main:not(.closeMenu) {
-    .faux__jsonlink-link-label{
-      display: none;
-    }
-  }
-}
-
-@media (max-width: 1120px) {
-  #main.closeMenu {
-    .faux__jsonlink-link-label{
-      display: none;
-    }
-  }
-}
diff --git a/app/addons/components/assets/less/layouts.less b/app/addons/components/assets/less/layouts.less
deleted file mode 100644
index 8d72807..0000000
--- a/app/addons/components/assets/less/layouts.less
+++ /dev/null
@@ -1,37 +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.
-.template {
-  height: 100%;
-}
-
-.right-header-flex {
-  display: flex;
-  align-items: center;
-  flex-direction: row;
-  height: 100%;
-
-  &--ie1X{
-     align-items:stretch;
-  }
-}
-
-//yes !important!!! We have to overridde some styles I can't override any other way for now
-div.faux__breadcrumbs-mango-header {
-  height: 64px !important;
-  -ms-flex: 0 0 440px !important;
-  flex: 0 0 440px !important;
-  overflow: hidden !important;
-}
-
-div.faux__jsondoc-wrapper {
-  display:flex;
-}
diff --git a/app/addons/components/assets/less/loading-lines.less b/app/addons/components/assets/less/loading-lines.less
deleted file mode 100644
index ce3a5d8..0000000
--- a/app/addons/components/assets/less/loading-lines.less
+++ /dev/null
@@ -1,76 +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.
-
-
-@import "../../../../../assets/less/variables.less";
-
-
-@loadingLinesHeight: 30px;
-@loadingLinesMargin: 3px;
-@loadingLinesWidth: 10px;
-@loadingLinesTime: 0.8s;
-@loadingLinesEffect: linear;
-@loadingLinesColor: @brandHighlight;
-
-.loading-lines {
-  display: block;
-  width: 80px;
-  margin-left: auto;
-  margin-right: auto;
-  div {
-    background-color: @loadingLinesColor;
-    width: @loadingLinesWidth;
-    height: 1px;
-    float: left;
-    animation: height-change @loadingLinesTime infinite @loadingLinesEffect;
-    -webkit-animation: height-change @loadingLinesTime infinite @loadingLinesEffect;
-  }
-}
-
-#line2 {
-  animation-delay: 0.1s;
-  -webkit-animation-delay: 0.1s;
-  margin-left: @loadingLinesMargin;
-}
-#line3 {
-  animation-delay: 0.2s;
-  -webkit-animation-delay: 0.2s;
-  margin-left: @loadingLinesMargin;
-}
-#line4 {
-  animation-delay: 0.3s;
-  -webkit-animation-delay: 0.3s;
-  margin-left: @loadingLinesMargin;
-}
-
-@-webkit-keyframes height-change {
-  0% {
-    height: 1px;
-  }
-  50% {
-    height: @loadingLinesHeight;
-  }
-  100% {
-    height: 1px;
-  }
-}
-@keyframes height-change {
-  0% {
-    height: 1px;
-  }
-  50% {
-    height: @loadingLinesHeight;
-  }
-  100% {
-    height: 1px;
-  }
-}
diff --git a/app/addons/components/assets/less/menudropdown.less b/app/addons/components/assets/less/menudropdown.less
deleted file mode 100644
index 2638a29..0000000
--- a/app/addons/components/assets/less/menudropdown.less
+++ /dev/null
@@ -1,17 +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.
-
-
-.dropdown-menu > li > a.fonticon-placeholder:before {
-  padding-right: 17px;
-  content: "";
-}
diff --git a/app/addons/components/assets/less/modals.less b/app/addons/components/assets/less/modals.less
deleted file mode 100644
index 93e1ba3..0000000
--- a/app/addons/components/assets/less/modals.less
+++ /dev/null
@@ -1,25 +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.
-
-
-@import "../../../../../assets/less/variables.less";
-
-.modal .cancel-link {
-  margin: 0 15px;
-  font-size: 14px;
-  color: #666;
-  &:hover {
-    color: @hoverHighlight;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
diff --git a/app/addons/components/assets/less/polling.less b/app/addons/components/assets/less/polling.less
deleted file mode 100644
index 0c423e4..0000000
--- a/app/addons/components/assets/less/polling.less
+++ /dev/null
@@ -1,87 +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.
-
-.faux__polling {
-  padding: 0 15px !important;
-  width: 236px;
-
-  .rc-slider-rail {
-    background-color: @sliderBackground;
-    height: 8px;
-    border: 1px solid @sliderBorderColor;
-  }
-
-  .rc-slider-track {
-    background-color: @sliderBackgroundHighlight;
-    height: 8px;
-    border: 1px solid @sliderBackgroundHighlight;
-  }
-
-  .rc-slider-handle {
-    height: 14px;
-    width: 14px;
-    margin-top: -3px;
-    border: 1px solid @sliderBackgroundHighlight;
-    border-radius: 8px;
-    background-color: @sliderBackgroundHighlight;
-  }
-}
-
-.faux__polling-info {
-  font-size: 14px;
-}
-
-.faux__polling-info-text {
-  color: #666;
-}
-
-.faux__polling-info-value {
-  float: right;
-}
-
-.faux__polling-info-value--off {
-  color: #999;
-}
-
-.faux__polling-info-value--active {
-  color: @brandHighlight;
-}
-
-.faux__polling-info-slider {
-  cursor: pointer;
-  height: 20px;
-  padding-top: 8px;
-}
-
-div.faux__refresh-btn {
-  border-left: 1px solid #ccc;
-  line-height: 40px;
-  padding: 12px 13px;
-  flex: 0 0 auto;
-}
-
-.faux__refresh-icon {
-  margin-right: 4px;
-}
-
-.faux__refresh-link:visited,
-.faux__refresh-link:focus,
-.faux__refresh-link {
-  color: #666;
-  font-size: 14px;
-  text-decoration: none;
-}
-
-.faux__refresh-link:hover {
-  text-decoration: none;
-  color: @hoverHighlight;
-}
diff --git a/app/addons/components/assets/less/styled-select.less b/app/addons/components/assets/less/styled-select.less
deleted file mode 100644
index 78a83e3..0000000
--- a/app/addons/components/assets/less/styled-select.less
+++ /dev/null
@@ -1,78 +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.
-
-.styled-select {
-  width: 200px;
-}
-
-.styled-select label {
-  margin: 0;
-}
-
-.styled-select select {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  appearance: none;
-  background-color: #e6e6e6;
-  border: 1px solid #b3b3b3;
-  width: 200px;
-  text-indent: 4px;
-  height: 46px;
-  padding-right: 35px;
-  color: #333;
-}
-
-//bug in firefox for text-indent
-@-moz-document url-prefix() {
-  .styled-select  select {
-    text-indent: 0px;
-  }
-}
-
-.styled-select select:-moz-focusring {
-  color: transparent;
-  text-shadow: 0 0 0 #000;
-}
-
-.styled-select select::-ms-expand {
-  display: none;
-}
-
-.styled-select-icon {
-  pointer-events: none;
-  position: absolute;
-  right: 10px;
-  top: 12px;
-  color: #333;
-}
-
-.styled-select-hover-icon {
-  pointer-events: none;
-  position: absolute;
-  right: 10px;
-  top: 12px;
-  color: @hoverHighlight;
-  display: none;
-  z-index: 30;
-}
-
-//this is a litte css trick to create a hover effect for the triangle. We can't use the normal hover event because we
-//need to set pointer-events to none so that a click on the triangle is actually a click on the select dropdown
-.styled-select:hover {
-  .styled-select-hover-icon {
-    display: inline;
-  }
-
-  .styled-select-icon {
-    display: none;
-  }
-}
diff --git a/app/addons/components/assets/less/tab-element.less b/app/addons/components/assets/less/tab-element.less
deleted file mode 100644
index 63060d3..0000000
--- a/app/addons/components/assets/less/tab-element.less
+++ /dev/null
@@ -1,115 +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.
-
-@import "../../../../../assets/less/mixins.less";
-
-.component-tab-element-wrapper {
-  margin-left: 0;
-  padding-left: 0;
-  margin-bottom: 0;
-  height: 60px;
-  background-color: #CBCBCB;
-  padding-left: 20px;
-  overflow: hidden;
-  width: 100%;
-  min-width: 770px;
-}
-
-.component-tab-list-element {
-  list-style-type: none;
-}
-
-.component-tab-element {
-  background-color: #eee;
-  margin-top: 10px;
-  margin-right: 5px;
-  margin-bottom: -1px;
-  float: left;
-  list-style-type: none;
-  line-height: 40px;
-
-  input {
-    display: none;
-  }
-
-  label {
-    margin-right: 0;
-    margin-bottom: 0;
-    line-height: 25px;
-    .noselect()
-  }
-
-  .tab-element-content {
-    padding: 8px 12px 12px 12px;
-  }
-
-  .tab-element-indicator-wrapper {
-    height: 5px;
-  }
-
-  .tab-element-badge {
-    display: inline-block;
-    min-width: 10px;
-    padding: 3px 7px;
-    line-height: 1;
-    color: #fff;
-    text-align: center;
-    white-space: nowrap;
-    vertical-align: middle;
-    background-color: @linkColorHover;
-    border-radius: 10px;
-    margin-left: 0.25rem;
-    font-size: 0.75rem;
-  }
-
-  .tab-element-indicator {
-    height: 0px;
-    transition: all .25s linear;
-  }
-
-  &.tab-element-checked .tab-element-indicator {
-    height: 5px;
-    background-color: @linkColorHover;
-  };
-
-  &.tab-element-checked {
-    background-color: #fff;
-    label {
-      cursor: default;
-      pointer-events: none;
-    }
-  }
-
-  &.tab-element-checked .tab-element-content {
-    font-weight: bold;
-  }
-
-  transition: all .25s linear;
-
-  &:hover {
-    background-color: #fff;
-    color: @linkColorHover;
-  };
-
-  &.tab-element-checked .tab-element-content:hover {
-    color: initial;
-  };
-
-  &.tab-element-checked:hover {
-    color: initial;
-  };
-
-  &:hover .tab-element-indicator {
-    height: 5px;
-    background-color: @linkColorHover;
-  };
-}
diff --git a/app/addons/components/assets/less/tab-window-wrapper.less b/app/addons/components/assets/less/tab-window-wrapper.less
deleted file mode 100644
index 5c2da30..0000000
--- a/app/addons/components/assets/less/tab-window-wrapper.less
+++ /dev/null
@@ -1,19 +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.
-
-#dashboard-content > .tab__wrapper {
-  padding: 0;
-}
-
-.tab__container > div {
-	padding: 20px;
-}
\ No newline at end of file
diff --git a/app/addons/components/base.js b/app/addons/components/base.js
deleted file mode 100644
index 47789ef..0000000
--- a/app/addons/components/base.js
+++ /dev/null
@@ -1,17 +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.
-
-import "./assets/less/components.less";
-
-export default {
-  initialize () {}
-};
diff --git a/app/addons/components/components/accordion.js b/app/addons/components/components/accordion.js
deleted file mode 100644
index 48de9af..0000000
--- a/app/addons/components/components/accordion.js
+++ /dev/null
@@ -1,74 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Collapse } from 'react-bootstrap';
-import classnames from 'classnames';
-
-export const Accordion = (props) => {
-  const { children, className, style } = props;
-  const classNames = classnames('faux--accordion', className);
-  return (
-    <ul className={classNames} style={style}>
-      {children}
-    </ul>
-  );
-};
-
-export class AccordionItem extends React.Component {
-  static propTypes = {
-    title: PropTypes.string.isRequired
-  };
-
-  static defaultProps = {
-    onClick: () => { }
-  };
-
-  state = {
-    open: false
-  };
-
-  handleClick = (event) => {
-    const newOpen = !this.state.open;
-    this.setState({ open: newOpen });
-    this.props.onClick({ isOpen: newOpen, event });
-  };
-
-  render() {
-    const { children, title } = this.props;
-    const icon = this.state.open ? 'fonticon-down-open' : 'fonticon-right-open';
-    const contentClassNames = classnames(
-      'faux--accordion__item-content', 'collapse',
-      {in: this.state.open}
-    );
-
-    return (
-      <li
-        className='faux--accordion__item'
-        onClick={this.handleClick}>
-        <button
-          type="button"
-          className={`faux--accordion__item-header`}
-          onClick={this.handleClick}>
-          <i className={icon}></i>
-          <span>{title}</span>
-        </button>
-        <Collapse in={this.state.open}>
-          <div className={contentClassNames}>
-            { children }
-          </div>
-        </Collapse>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/components/components/apibar.js b/app/addons/components/components/apibar.js
deleted file mode 100644
index 83b44e8..0000000
--- a/app/addons/components/components/apibar.js
+++ /dev/null
@@ -1,43 +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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export const JSONLink = ({endpoint}) => {
-  if (!endpoint) {
-    return null;
-  }
-
-  return (
-    <div className="faux__jsonlink">
-      <a data-bypass={true} className="faux__jsonlink-link" href={endpoint} target="_blank" rel="noopener noreferrer">
-        <span className="faux__jsonlink-link-brackets">{'{\u00a0}'}</span>
-        <span className="faux__jsonlink-link-label">JSON</span>
-      </a>
-    </div>
-  );
-};
-
-export const DocLink = ({docURL}) => {
-  if (!docURL) {
-    return null;
-  }
-
-  return (
-    <div className="faux__doclink">
-      <a data-bypass="true" href={docURL} target="_blank" rel="noopener noreferrer" className="faux__doclink-link">
-        <i className="icon fonticon-bookmark"></i>
-      </a>
-    </div>
-  );
-};
diff --git a/app/addons/components/components/badge.js b/app/addons/components/components/badge.js
deleted file mode 100644
index 47dd2e5..0000000
--- a/app/addons/components/components/badge.js
+++ /dev/null
@@ -1,82 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class BadgeList extends React.Component {
-  static propTypes = {
-    elements: PropTypes.array.isRequired,
-    removeBadge: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    getLabel (el) {
-      return el;
-    },
-
-    getId (el) {
-      return el;
-    }
-  };
-
-  getBadges = () => {
-    return this.props.elements.map(function (el, i) {
-      return <Badge
-        label={this.props.getLabel(el)}
-        key={i}
-        id={el}
-        remove={this.removeBadge} />;
-    }.bind(this));
-  };
-
-  removeBadge = (label, el) => {
-    this.props.removeBadge(label, el);
-  };
-
-  render() {
-    return (
-      <ul className="component-badgelist">
-        {this.getBadges()}
-      </ul>
-    );
-  }
-}
-
-export class Badge extends React.Component {
-  static propTypes = {
-    label: PropTypes.string.isRequired,
-    remove: PropTypes.func.isRequired
-  };
-
-  remove = (e) => {
-    e.preventDefault();
-    this.props.remove(this.props.label, this.props.id);
-  };
-
-  render() {
-    return (
-      <li className="component-badge">
-        <span className="label label-info">{this.props.label}</span>
-        <a
-          href="#"
-          className="label label-info remove-filter"
-          onClick={this.remove} data-bypass="true"
-        >
-          &times;
-        </a>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/components/components/beautify.js b/app/addons/components/components/beautify.js
deleted file mode 100644
index 79f4df9..0000000
--- a/app/addons/components/components/beautify.js
+++ /dev/null
@@ -1,61 +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.
-import React from "react";
-import ReactDOM from "react-dom";
-import beautifyHelper from "../../../../assets/js/plugins/beautify";
-import {Tooltip, OverlayTrigger} from 'react-bootstrap';
-
-const helper = beautifyHelper.js_beautify ? beautifyHelper.js_beautify : beautifyHelper;
-
-export class Beautify extends React.Component {
-  noOfLines = () => {
-    return this.props.code.split(/\r\n|\r|\n/).length;
-  };
-
-  canBeautify = () => {
-    return this.noOfLines() === 1;
-  };
-
-  beautify = (event) => {
-    event.preventDefault();
-    var beautifiedCode = helper(this.props.code);
-    this.props.beautifiedCode(beautifiedCode);
-  };
-
-  getTooltip = () => {
-    return (
-      <Tooltip id="tooltip">
-      Switch to editable code format.
-      </Tooltip>
-    );
-  };
-
-  render() {
-    if (!this.canBeautify()) {
-      return null;
-    }
-
-    const tooltip = this.getTooltip();
-
-    return (
-      <OverlayTrigger placement="right" overlay={tooltip}>
-        <button
-          onClick={this.beautify}
-          className="beautify beautify_map btn btn-primary btn-small beautify-tooltip"
-          type="button"
-        >
-          Format Code
-        </button>
-      </OverlayTrigger>
-    );
-  }
-}
diff --git a/app/addons/components/components/bulkaction.js b/app/addons/components/components/bulkaction.js
deleted file mode 100644
index fc63a81..0000000
--- a/app/addons/components/components/bulkaction.js
+++ /dev/null
@@ -1,108 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import {OverlayTrigger, Popover} from "react-bootstrap";
-
-export class BulkActionComponent extends React.Component {
-  static propTypes = {
-    hasSelectedItem: PropTypes.bool.isRequired,
-    removeItem: PropTypes.func.isRequired,
-    selectAll: PropTypes.func,
-    toggleSelect: PropTypes.func.isRequired,
-    isChecked: PropTypes.bool.isRequired,
-    disabled: PropTypes.bool
-  };
-
-  static defaultProps = {
-    disabled: false,
-    title: 'Select rows that can be...',
-    bulkIcon: 'fonticon-trash',
-    buttonTitle: 'Delete all selected',
-    dropdownContentText: 'Deleted',
-    enableOverlay: false
-  };
-
-  render() {
-    return (
-      <div className="bulk-action-component">
-        <div className="bulk-action-component-selector-group">
-          {this.getMasterSelector()}
-          {this.getMultiSelectOptions()}
-        </div>
-      </div>
-    );
-  }
-
-  getMultiSelectOptions = () => {
-    if (!this.props.hasSelectedItem) {
-      return null;
-    }
-
-    return (
-      <button
-        onClick={this.props.removeItem}
-        className={'fonticon ' + this.props.bulkIcon}
-        title={this.props.buttonTitle} />
-    );
-  };
-
-  getPopupContent = () => {
-    return (
-      <ul className="bulk-action-component-popover-actions">
-        <li onClick={this.selectAll} >
-          <i className="icon fonticon-cancel"></i> {this.props.dropdownContentText}
-        </li>
-      </ul>
-    );
-  };
-
-  selectAll = () => {
-    this.bulkActionPopover.hide();
-    this.props.selectAll();
-  };
-
-  getOverlay = () => {
-    return (
-      <OverlayTrigger
-        ref={node => this.bulkActionPopover = node}
-        trigger="click"
-        placement="bottom"
-        rootClose={true}
-        overlay={
-          <Popover id="bulk-action-component-popover" title={this.props.title}>
-            {this.getPopupContent()}
-          </Popover>
-        }>
-        <div className="arrow-button">
-          <i className="fonticon fonticon-play"></i>
-        </div>
-      </OverlayTrigger>
-    );
-  };
-
-  getMasterSelector = () => {
-    return (
-      <div className="bulk-action-component-panel">
-        <input type="checkbox"
-          checked={this.props.isChecked}
-          onChange={this.props.toggleSelect}
-          disabled={this.props.disabled} />
-        {this.props.enableOverlay ? <div className="separator"></div> : null}
-        {this.props.enableOverlay ? this.getOverlay() : null}
-      </div>
-    );
-  };
-}
diff --git a/app/addons/components/components/codeeditor.js b/app/addons/components/components/codeeditor.js
deleted file mode 100644
index ca7a9e3..0000000
--- a/app/addons/components/components/codeeditor.js
+++ /dev/null
@@ -1,380 +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.
-import React from "react";
-import FauxtonAPI from "../../../core/api";
-import ace from "brace";
-import "brace/ext/searchbox";
-import {StringEditModal} from './stringeditmodal';
-
-require('brace/mode/javascript');
-require('brace/mode/json');
-require('brace/theme/idle_fingers');
-
-export class CodeEditor extends React.Component {
-  static defaultProps = {
-    id: 'code-editor',
-    mode: 'javascript',
-    theme: 'idle_fingers',
-    fontSize: 13,
-
-    // this sets the default value for the editor. On the fly changes are stored in state in this component only. To
-    // change the editor content after initial construction use CodeEditor.setValue()
-    defaultCode: '',
-    disabled: false,
-    showGutter: true,
-    highlightActiveLine: true,
-    showPrintMargin: false,
-    autoScrollEditorIntoView: true,
-    autoFocus: false,
-    stringEditModalEnabled: false,
-
-    // these two options create auto-resizeable code editors, with a maximum number of lines
-    setHeightToLineCount: false,
-    maxLines: 10,
-    minLines: 11, // show double digits in sidebar
-
-    // optional editor key commands (e.g. specific save action)
-    editorCommands: [],
-
-    // notifies users that there is unsaved changes in the editor when navigating away from the page
-    notifyUnsavedChanges: false,
-
-    // an optional array of ignorable Ace errors. Lets us filter out errors based on context
-    ignorableErrors: [],
-
-    // un-Reacty, but the code editor is a self-contained component and it's helpful to be able to tie into
-    // editor specific events like content changes and leaving the editor
-    change () {},
-    blur () {}
-  };
-
-  state = {
-    originalCode: this.props.defaultCode,
-
-    // these are all related to the (optional) string edit modal
-    stringEditModalVisible: false,
-    stringEditIconVisible: false,
-    stringEditIconStyle: {},
-    stringEditModalValue: ''
-  };
-
-  hasChanged = () => {
-    return !_.isEqual(this.state.originalCode, this.getValue());
-  };
-
-  clearChanges = () => {
-    this.setState({
-      originalCode: this.getValue()
-    });
-  };
-
-  setupAce = (props, shouldUpdateCode) => {
-    this.editor = ace.edit(this.ace);
-
-    // see https://github.com/ajaxorg/ace/issues/36 don't steal browser's default keybinding
-    this.editor.commands.bindKeys(
-      {
-        "Ctrl-L|Command-L": null,
-        "Ctrl-Shift-L|Command-Shift-L": "gotoline"
-      }
-    );
-
-    // suppresses an Ace editor error
-    this.editor.$blockScrolling = Infinity;
-
-    if (shouldUpdateCode) {
-      this.setValue(props.defaultCode);
-    }
-
-    this.editor.setShowPrintMargin(props.showPrintMargin);
-    this.editor.autoScrollEditorIntoView = props.autoScrollEditorIntoView;
-
-    this.editor.setOption('highlightActiveLine', this.props.highlightActiveLine);
-
-    if (this.props.setHeightToLineCount) {
-      this.setHeightToLineCount();
-    }
-
-    if (this.props.ignorableErrors) {
-      this.removeIgnorableAnnotations();
-    }
-
-    this.addCommands();
-    this.editor.getSession().setMode('ace/mode/' + props.mode);
-    this.editor.setTheme('ace/theme/' + props.theme);
-    this.editor.setFontSize(props.fontSize);
-    this.editor.getSession().setTabSize(2);
-    this.editor.getSession().setUseSoftTabs(true);
-
-    if (this.props.autoFocus) {
-      this.editor.focus();
-    }
-    this.editor.setReadOnly(props.disabled);
-  };
-
-  addCommands = () => {
-    _.each(this.props.editorCommands, (command) => {
-      this.editor.commands.addCommand(command);
-    });
-  };
-
-  setupEvents = () => {
-    this.editor.on('blur', _.bind(this.onBlur, this));
-    this.editor.on('change', _.bind(this.onContentChange, this));
-
-    if (this.props.stringEditModalEnabled) {
-      this.editor.on('changeSelection', _.bind(this.showHideEditStringGutterIcon, this));
-      this.editor.getSession().on('changeBackMarker', _.bind(this.showHideEditStringGutterIcon, this));
-      this.editor.getSession().on('changeScrollTop', _.bind(this.updateEditStringGutterIconPosition, this));
-    }
-
-    if (this.props.notifyUnsavedChanges) {
-      window.addEventListener('beforeunload', this.quitWarningMsg);
-      FauxtonAPI.beforeUnload('editor_' + this.props.id, this.quitWarningMsg);
-    }
-  };
-
-  onBlur = () => {
-    this.props.blur(this.getValue());
-  };
-
-  onContentChange = () => {
-    if (this.props.setHeightToLineCount) {
-      this.setHeightToLineCount();
-    }
-    this.props.change(this.getValue());
-  };
-
-  quitWarningMsg = () => {
-    if (this.hasChanged()) {
-      return 'Your changes have not been saved. Click Cancel to return to the document, or OK to proceed.';
-    }
-  };
-
-  removeEvents = () => {
-    if (this.props.notifyUnsavedChanges) {
-      window.removeEventListener('beforeunload', this.quitWarningMsg);
-      FauxtonAPI.removeBeforeUnload('editor_' + this.props.id);
-    }
-  };
-
-  setHeightToLineCount = () => {
-    var numLines = this.editor.getSession().getDocument().getLength();
-    var maxLines = (numLines > this.props.maxLines) ? this.props.maxLines : numLines;
-    this.editor.setOptions({
-      maxLines: maxLines,
-      minLines: this.props.minLines
-    });
-  };
-
-  componentDidMount() {
-    this.setupAce(this.props, true);
-    this.setupEvents();
-
-    if (this.props.autoFocus) {
-      this.editor.focus();
-    }
-  }
-
-  componentWillUnmount() {
-    this.removeEvents();
-    this.editor.destroy();
-  }
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    this.setupAce(nextProps, false);
-  }
-
-  getAnnotations = () => {
-    return this.editor.getSession().getAnnotations();
-  };
-
-  isIgnorableError = (msg) => {
-    return _.includes(this.props.ignorableErrors, msg);
-  };
-
-  removeIgnorableAnnotations = () => {
-    var isIgnorableError = this.isIgnorableError;
-    this.editor.getSession().on('changeAnnotation', function () {
-      var annotations = this.editor.getSession().getAnnotations();
-      var newAnnotations = _.reduce(annotations, function (annotations, error) {
-        if (!isIgnorableError(error.raw)) {
-          annotations.push(error);
-        }
-        return annotations;
-      }, []);
-
-      if (annotations.length !== newAnnotations.length) {
-        this.editor.getSession().setAnnotations(newAnnotations);
-      }
-    }.bind(this));
-  };
-
-  showHideEditStringGutterIcon = () => {
-    if (this.hasErrors() || !this.parseLineForStringMatch()) {
-      this.setState({ stringEditIconVisible: false });
-      return false;
-    }
-
-    this.setState({
-      stringEditIconVisible: true,
-      stringEditIconStyle: {
-        top: this.getGutterIconPosition()
-      }
-    });
-
-    return true;
-  };
-
-  updateEditStringGutterIconPosition = () => {
-    if (!this.state.stringEditIconVisible) {
-      return;
-    }
-    this.setState({
-      stringEditIconStyle: {
-        top: this.getGutterIconPosition()
-      }
-    });
-  };
-
-  getGutterIconPosition = () => {
-    var rowHeight = this.getRowHeight();
-    var scrollTop = this.editor.session.getScrollTop();
-    var positionFromTop = (rowHeight * this.documentToScreenRow(this.getSelectionStart().row)) - scrollTop;
-    return positionFromTop + 'px';
-  };
-
-  parseLineForStringMatch = () => {
-    const selStart = this.getSelectionStart().row;
-    const selEnd   = this.getSelectionEnd().row;
-
-    // one JS(ON) string can't span more than one line - we edit one string, so ensure we don't select several lines
-    if (selStart >= 0 && selEnd >= 0 && selStart === selEnd && this.isRowExpanded(selStart)) {
-      const editLine = this.getLine(selStart);
-      const editMatch = editLine.match(/^([ \t]*)("[^"]*["][ \t]*:[ \t]*)?(["|'].*"[ \t]*,?[ \t]*)$/);
-      if (editMatch) {
-        return editMatch;
-      }
-    }
-    return false;
-  };
-
-  openStringEditModal = () => {
-    const matches = this.parseLineForStringMatch();
-    let string = matches[3].trim();
-    // Removes trailing comma and surrouding spaces
-    if (string.substring(string.length - 1) === ',') {
-      string = string.substring(0, string.length - 1).trim();
-    }
-    // Removes surrouding quotes
-    string = string.substring(1, string.length - 1);
-
-    this.setState({
-      stringEditModalVisible: true,
-      stringEditModalValue: string
-    });
-  };
-
-  saveStringEditModal = (newString) => {
-    // replace the string on the selected line
-    var line = this.parseLineForStringMatch();
-    var indent = line[1] || '',
-        key = line[2] || '',
-        originalString = line[3],
-        comma = '';
-    if (originalString.substring(originalString.length - 1) === ',') {
-      comma = ',';
-    }
-    this.replaceCurrentLine(indent + key + JSON.stringify(newString) + comma + '\n');
-    this.closeStringEditModal();
-  };
-
-  closeStringEditModal = () => {
-    this.setState({
-      stringEditModalVisible: false
-    });
-  };
-
-  hasErrors = () => {
-    return !_.every(this.getAnnotations(), (error) => {
-      return this.isIgnorableError(error.raw);
-    });
-  };
-
-  setReadOnly = (readonly) => {
-    this.editor.setReadOnly(readonly);
-  };
-
-  setValue = (code, lineNumber) => {
-    lineNumber = lineNumber ? lineNumber : -1;
-    this.editor.setValue(code, lineNumber);
-  };
-
-  getValue = () => {
-    return this.editor.getValue();
-  };
-
-  getEditor = () => {
-    return this;
-  };
-
-  getLine = (lineNum) => {
-    return this.editor.session.getLine(lineNum);
-  };
-
-  getSelectionStart = () => {
-    return this.editor.getSelectionRange().start;
-  };
-
-  getSelectionEnd = () => {
-    return this.editor.getSelectionRange().end;
-  };
-
-  getRowHeight = () => {
-    return this.editor.renderer.layerConfig.lineHeight;
-  };
-
-  isRowExpanded = (row) => {
-    return !this.editor.getSession().isRowFolded(row);
-  };
-
-  documentToScreenRow = (row) => {
-    return this.editor.getSession().documentToScreenRow(row, 0);
-  };
-
-  replaceCurrentLine = (replacement) => {
-    this.editor.getSelection().selectLine();
-    this.editor.insert(replacement);
-    this.editor.getSelection().moveCursorUp();
-  };
-
-  render() {
-    return (
-      <div>
-        <div ref={node => this.ace = node} className="js-editor" id={this.props.id}></div>
-        <button ref={node => this.stringEditIcon = node}
-          className="btn string-edit"
-          title="Edit string"
-          disabled={!this.state.stringEditIconVisible || this.props.disabled}
-          style={this.state.stringEditIconStyle} onClick={this.openStringEditModal}>
-          <i className="icon icon-edit"></i>
-        </button>
-        <StringEditModal
-          ref={node => this.stringEditModal = node}
-          visible={this.state.stringEditModalVisible}
-          value={this.state.stringEditModalValue}
-          onSave={this.saveStringEditModal}
-          onClose={this.closeStringEditModal} />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/codeeditorpanel.js b/app/addons/components/components/codeeditorpanel.js
deleted file mode 100644
index 825138d..0000000
--- a/app/addons/components/components/codeeditorpanel.js
+++ /dev/null
@@ -1,145 +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.
-import React from "react";
-import ReactDOM from "react-dom";
-import {CodeEditor} from './codeeditor';
-import {Beautify} from './beautify';
-import {ZenModeOverlay} from './zenmodeoverlay';
-
-
-// list of JSHINT errors to ignore: gets around problem of anonymous functions not being valid
-const ignorableErrors = [
-  'Missing name in function declaration.',
-  "['{a}'] is better written in dot notation."
-];
-
-/**
- * A pre-packaged JS editor panel for use on the Edit Index / Mango pages. Includes options for a title, zen mode
- * icon and beautify button.
- */
-export class CodeEditorPanel extends React.Component {
-  static defaultProps = {
-    id: 'code-editor',
-    className: '',
-    defaultCode: '',
-    title: '',
-    docLink: '',
-    allowZenMode: true,
-    blur () {}
-  };
-
-  getStoreState = () => {
-    return {
-      zenModeEnabled: false,
-      code: this.props.defaultCode
-    };
-  };
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (nextProps.defaultCode !== this.props.defaultCode) {
-      this.setState({ code: nextProps.defaultCode });
-    }
-  }
-
-  getZenModeIcon = () => {
-    if (this.props.allowZenMode) {
-      return <span className="fonticon fonticon-resize-full zen-editor-icon" title="Enter Zen mode" onClick={this.enterZenMode}></span>;
-    }
-  };
-
-  getDocIcon = () => {
-    if (this.props.docLink) {
-      return (
-        <a className="help-link"
-          data-bypass="true"
-          href={this.props.docLink}
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          <i className="icon-question-sign"></i>
-        </a>
-      );
-    }
-  };
-
-  getZenModeOverlay = () => {
-    if (this.state.zenModeEnabled) {
-      return (
-        <ZenModeOverlay
-          defaultCode={this.state.code}
-          mode={this.props.mode}
-          ignorableErrors={ignorableErrors}
-          onExit={this.exitZenMode} />
-      );
-    }
-  };
-
-  enterZenMode = () => {
-    this.setState({
-      zenModeEnabled: true,
-      code: this.codeEditor.getValue()
-    });
-  };
-
-  exitZenMode = (content) => {
-    this.setState({ zenModeEnabled: false });
-    this.getEditor().setValue(content);
-  };
-
-  getEditor = () => {
-    return this.codeEditor;
-  };
-
-  getValue = () => {
-    return this.getEditor().getValue();
-  };
-
-  beautify = (code) => {
-    this.setState({ code: code });
-    this.getEditor().setValue(code);
-  };
-
-  update = () => {
-    this.getEditor().setValue(this.state.code);
-  };
-
-  state = this.getStoreState();
-
-  render() {
-    var classes = 'control-group';
-    if (this.props.className) {
-      classes += ' ' + this.props.className;
-    }
-    return (
-      <div className={classes}>
-        <label>
-          <span>{this.props.title}</span>
-          {this.getDocIcon()}
-          {this.getZenModeIcon()}
-        </label>
-        <CodeEditor
-          id={this.props.id}
-          ref={node => this.codeEditor = node}
-          mode="javascript"
-          defaultCode={this.state.code}
-          showGutter={true}
-          ignorableErrors={ignorableErrors}
-          setHeightToLineCount={true}
-          maxLines={10000}
-          blur={this.props.blur}
-        />
-        <Beautify code={this.state.code} beautifiedCode={this.beautify} />
-        {this.getZenModeOverlay()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/confirmbutton.js b/app/addons/components/components/confirmbutton.js
deleted file mode 100644
index 1846592..0000000
--- a/app/addons/components/components/confirmbutton.js
+++ /dev/null
@@ -1,66 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class ConfirmButton extends React.Component {
-  static propTypes = {
-    showIcon: PropTypes.bool,
-    id: PropTypes.string,
-    customIcon: PropTypes.string,
-    style: PropTypes.object,
-    buttonType: PropTypes.string,
-    'data-id': PropTypes.string,
-    onClick: PropTypes.func,
-    disabled: PropTypes.bool,
-  };
-
-  static defaultProps = {
-    disabled: false,
-    showIcon: true,
-    customIcon: 'fonticon-ok-circled',
-    buttonType: 'btn-primary',
-    style: {},
-    'data-id': null,
-    onClick () { }
-  };
-
-  getIcon = () => {
-    if (!this.props.showIcon) {
-      return null;
-    }
-    return (
-      <i className={"icon " + this.props.customIcon} />
-    );
-  };
-
-  render() {
-    const { onClick, buttonType, id, style, text, disabled } = this.props;
-    return (
-      <button
-        onClick={onClick}
-        type="submit"
-        disabled={disabled}
-        data-id={this.props['data-id']}
-        className={'btn save ' + buttonType}
-        id={id}
-        style={style}
-      >
-        {this.getIcon()}
-        {text}
-      </button>
-    );
-  }
-}
diff --git a/app/addons/components/components/copy.js b/app/addons/components/components/copy.js
deleted file mode 100644
index 85b9f42..0000000
--- a/app/addons/components/components/copy.js
+++ /dev/null
@@ -1,103 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import Clipboard from 'clipboard';
-
-let clipboard;
-
-// Locates the specific element on the DOM, configures the clipboard, and
-// sets the callback on 'success' (usually a Fauxton notification).
-export const initializeClipboard = (uniqueKey, cb) => {
-  clipboard = new Clipboard('#copy-' + uniqueKey);
-  clipboard.on('success', function() {
-    cb();
-  });
-};
-
-// Cleans up the fake elements left around by clipboard.js
-export const destroyClipboard = () => {
-  clipboard.destroy();
-};
-
-export class Copy extends React.Component {
-  componentDidMount () {
-    initializeClipboard(this.props.uniqueKey, this.props.onClipboardClick);
-  }
-
-  componentWillUnmount () {
-    destroyClipboard();
-  }
-
-  // Necessary for copy elements that are not unmounted even though they are
-  // no longer visible (ex. Notification  rows in the notification center).
-  componentDidUpdate () {
-    initializeClipboard(this.props.uniqueKey, this.props.onClipboardClick);
-  }
-
-  getClipboardElement () {
-    if (this.props.displayType === 'icon') {
-      return (<i aria-hidden="true" className="fontawesome icon-paste"></i>);
-    }
-    return this.props.textDisplay;
-  }
-
-  getClipboardButton () {
-    const btnClasses = this.props.displayType === 'input' ? "btn copy-button" : "copy" + " clipboard-copy-element";
-    return (
-      <button
-        aria-label="Copy to Clipboard"
-        className={btnClasses}
-        data-clipboard-text={this.props.text}
-        title={this.props.title}
-        id={"copy-" + this.props.uniqueKey}
-      >
-        {this.getClipboardElement()}
-      </button>
-    );
-  }
-
-  render () {
-    if (this.props.displayType === 'input') {
-      return (
-        <p>
-          <input
-            type="text"
-            className="input-xxlarge text-field-to-copy"
-            readOnly
-            value={this.props.text} />
-          {this.getClipboardButton()}
-        </p>
-      );
-    }
-    return (
-      this.getClipboardButton()
-    );
-  }
-}
-
-Copy.defaultProps = {
-  displayType: 'icon',
-  textDisplay: 'Copy',
-  title: 'Copy to clipboard',
-  onClipboardClick: function () { }
-};
-
-Copy.propTypes = {
-  text: PropTypes.string.isRequired,
-  displayType: PropTypes.oneOf(['icon', 'text', 'input']),
-  uniqueKey: PropTypes.string.isRequired,
-  onClipboardClick: PropTypes.func.isRequired
-};
diff --git a/app/addons/components/components/deletedatabasemodal.js b/app/addons/components/components/deletedatabasemodal.js
deleted file mode 100644
index 004ad68..0000000
--- a/app/addons/components/components/deletedatabasemodal.js
+++ /dev/null
@@ -1,119 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import {Modal} from "react-bootstrap";
-import Actions from "../actions";
-
-export class DeleteDatabaseModal extends React.Component {
-  static propTypes = {
-    showHide: PropTypes.func.isRequired,
-    modalProps: PropTypes.object,
-    onSuccess: PropTypes.func
-  };
-
-  state = {
-    inputValue: '',
-    disableSubmit: true
-  };
-
-  close = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-
-    this.setState({
-      inputValue: '',
-      disableSubmit: true
-    });
-
-    this.props.showHide({showModal: false});
-  };
-
-  open = () => {
-    this.props.showHide({showModal: true});
-  };
-
-  getDatabaseName = () => {
-    return this.props.modalProps.dbId.trim();
-  };
-
-  onInputChange = (e) => {
-    const val = e.target.value.trim();
-
-    this.setState({
-      inputValue: val
-    });
-
-    this.setState({
-      disableSubmit: val !== this.getDatabaseName()
-    });
-  };
-
-  onDeleteClick = (e) => {
-    e.preventDefault();
-
-    Actions.deleteDatabase(this.getDatabaseName(), this.props.onSuccess);
-  };
-
-  onInputKeypress = (e) => {
-    if (e.keyCode === 13 && this.state.disableSubmit !== true) {
-      Actions.deleteDatabase(this.getDatabaseName(), this.props.onSuccess);
-    }
-  };
-
-  render() {
-    var isSystemDatabase = this.props.modalProps.isSystemDatabase;
-    var showDeleteModal = this.props.modalProps.showDeleteModal;
-    var dbId = this.props.modalProps.dbId;
-
-    var warning = isSystemDatabase ? (
-      <p style={{color: '#d14'}} className="warning">
-        <b>You are about to delete a system database, be careful!</b>
-      </p>
-    ) : null;
-
-    return (
-      <Modal dialogClassName="delete-db-modal" show={showDeleteModal} onHide={this.close}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Confirm Deletion</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          {warning}
-          <p>
-            Warning: This action will permanently delete <code>{dbId}</code>.
-            To confirm the deletion of the database and all of the
-            database&apos;s documents, you must enter the database&apos;s name.
-          </p>
-          <input
-            type="text"
-            className="input-block-level"
-            onKeyUp={this.onInputKeypress}
-            onChange={this.onInputChange}
-            autoFocus={true} />
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" onClick={this.close} data-bypass="true" className="cancel-link">Cancel</a>
-          <button
-            disabled={this.state.disableSubmit}
-            onClick={this.onDeleteClick}
-            className="btn btn-danger delete">
-            <i className="icon icon-trash" /> Delete Database
-          </button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/components/components/document.js b/app/addons/components/components/document.js
deleted file mode 100644
index abb6a68..0000000
--- a/app/addons/components/components/document.js
+++ /dev/null
@@ -1,148 +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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../core/api';
-import Constants from '../../documents/constants';
-import Helpers from '../../documents/helpers';
-
-export class Document extends React.Component {
-  static propTypes = {
-    docIdentifier: PropTypes.string.isRequired,
-    docType: PropTypes.string,
-    docChecked: PropTypes.func.isRequired,
-    truncate: PropTypes.bool,
-    maxRows: PropTypes.number,
-    resultsStyle: PropTypes.object
-  };
-
-  static defaultProps = {
-    truncate: true,
-    maxRows: 500,
-    resultsStyle: {
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    },
-    docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-  };
-
-  onChange = (e) => {
-    e.preventDefault();
-    this.props.docChecked(this.props.doc.id, this.props.doc._rev);
-  };
-
-  getUrlFragment = () => {
-    if (!this.props.children) {
-      return '';
-    }
-
-    return (
-      <div className="doc-edit-symbol pull-right" title="Edit document">
-        {this.props.children}
-      </div>
-    );
-  };
-
-  getExtensionIcons = () => {
-    var extensions = FauxtonAPI.getExtensions('DocList:icons');
-    return _.map(extensions, (Extension, i) => {
-      return (<Extension doc={this.props.doc} key={i} />);
-    });
-  };
-
-  getDocumentTypeIcon = () => {
-    if (this.props.docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-      if (this.props.docContent.includes(`"partitioned": true`)) {
-        return <i className="fonticon-documents" title="Partitioned index"></i>;
-      }
-      return <i className="fonticon-document" title="Global index"></i>;
-    }
-    return null;
-  };
-
-  getCheckbox = () => {
-    if (!this.props.isDeletable) {
-      return <div className="checkbox-dummy"></div>;
-    }
-
-    return (
-      <div className="checkbox inline">
-        <input
-          id={'checkbox-' + this.props.docIdentifier}
-          checked={this.props.checked}
-          data-checked={this.props.checked}
-          type="checkbox"
-          onChange={this.onChange}
-          className="js-row-select" />
-        <label onClick={this.onChange}
-          className="label-checkbox-doclist"
-          htmlFor={'checkbox-' + this.props.docIdentifier} />
-      </div>
-    );
-  };
-
-  onClick = (e) => {
-    this.props.onClick(this.props.docIdentifier, this.props.doc, e);
-  };
-
-  getDocContent = () => {
-    if (_.isEmpty(this.props.docContent)) {
-      return null;
-    }
-
-    // if need be, truncate the document
-    var content = this.props.docContent;
-    var isTruncated = false;
-    if (this.props.truncate) {
-      var result = Helpers.truncateDoc(this.props.docContent, this.props.maxRows);
-      isTruncated = result.isTruncated;
-      content = result.content;
-    }
-    const { fontSize } = this.props.resultsStyle;
-    const classNames = classnames('prettyprint', {
-      'prettyprint--small': fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL,
-      'prettyprint--large': fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE
-    });
-    return (
-      <div className="doc-data">
-        <pre className={classNames}>{content}</pre>
-        {isTruncated ? <div className="doc-content-truncated">(truncated)</div> : null}
-      </div>
-    );
-  };
-
-  render() {
-    return (
-      <div data-id={this.props.docIdentifier} className="doc-row">
-        <div className="custom-inputs">
-          {this.getCheckbox()}
-        </div>
-        <div className="doc-item">
-          <header onClick={this.onClick}>
-            <span className="header-keylabel">
-              {this.getDocumentTypeIcon()}
-              {this.props.keylabel}
-            </span>
-            <span className="header-doc-id">
-              {this.props.header ? '"' + this.props.header + '"' : null}
-            </span>
-            {this.getUrlFragment()}
-            <div className="doc-item-extension-icons pull-right">{this.getExtensionIcons()}</div>
-          </header>
-          {this.getDocContent()}
-        </div>
-        <div className="clearfix"></div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/loadlines.js b/app/addons/components/components/loadlines.js
deleted file mode 100644
index 0fa2b74..0000000
--- a/app/addons/components/components/loadlines.js
+++ /dev/null
@@ -1,21 +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.
-import React from "react";
-import ReactDOM from "react-dom";
-
-export const LoadLines = () =>
-  <div className="loading-lines">
-    <div id="line1"> </div>
-    <div id="line2"> </div>
-    <div id="line3"> </div>
-    <div id="line4"> </div>
-  </div>;
diff --git a/app/addons/components/components/menudropdown.js b/app/addons/components/components/menudropdown.js
deleted file mode 100644
index 8df4c23..0000000
--- a/app/addons/components/components/menudropdown.js
+++ /dev/null
@@ -1,154 +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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from "react";
-import { Button, Dropdown } from "react-bootstrap";
-import RootCloseWrapper from 'react-overlays/lib/RootCloseWrapper';
-
-export class MenuDropDown extends React.Component {
-  static defaultProps = {
-    icon: 'fonticon-plus-circled',
-    hideArrow: false,
-    toggleType: 'link'
-  };
-
-  static propTypes = {
-    icon: PropTypes.string,
-    hideArrow: PropTypes.bool,
-    links: PropTypes.array.isRequired,
-    toggleType: PropTypes.string.isRequired
-  };
-
-  createSectionLinks = (links) => {
-    if (!links) { return null; }
-
-    return links.map((link, key) => {
-      return this.createEntry(link, key);
-    });
-  };
-
-  createEntry = (link, key) => {
-    return (
-      <li key={key}>
-        <a className={classnames('icon', link.icon, { 'fonticon-placeholder': !link.icon})}
-          data-bypass={link.external ? 'true' : ''}
-          href={link.url}
-          onClick={link.onClick}
-          target={link.external ? '_blank' : ''}>
-          {link.title}
-        </a>
-      </li>
-    );
-  };
-
-  createSectionTitle = (title, key) => {
-    if (!title) {
-      return null;
-    }
-
-    return (
-      <li key={key} className="header-label">{title}</li>
-    );
-  };
-
-  createSection = () => {
-    return this.props.links.map((linkSection, key) => {
-      if (linkSection.title && linkSection.links) {
-        return ([
-          this.createSectionTitle(linkSection.title, 'title_' + key),
-          this.createSectionLinks(linkSection.links)
-        ]);
-      }
-      return this.createEntry(linkSection, 'el' + key);
-    });
-  };
-
-  render() {
-    const menuItems = this.createSection();
-    const arrowClass = this.props.hideArrow ? '' : 'arrow';
-    const CustomMenuToggle = this.props.toggleType === 'button' ? CustomMenuButtonToggle : CustomMenuLinkToggle;
-    return (
-      <Dropdown id="dropdown-menu">
-        <CustomMenuToggle bsRole="toggle" icon={this.props.icon}>
-        </CustomMenuToggle>
-        <CustomMenu bsRole="menu" className={arrowClass}>
-          {menuItems}
-        </CustomMenu>
-      </Dropdown>
-    );
-  }
-}
-
-class CustomMenuButtonToggle extends React.Component {
-  constructor(props, context) {
-    super(props, context);
-    this.handleClick = this.handleClick.bind(this);
-  }
-
-  handleClick(e) {
-    e.preventDefault();
-    this.props.onClick(e);
-  }
-
-  render() {
-    return (
-      <Button
-        onClick={this.handleClick}>
-        <i className={"dropdown-toggle " + this.props.icon}
-          style={{ fontSize: '1rem', boxShadow: '0px 0px 0px' }}>
-        </i>
-        {this.props.children}
-      </Button>
-    );
-  }
-}
-
-class CustomMenuLinkToggle extends React.Component {
-  constructor(props, context) {
-    super(props, context);
-    this.handleClick = this.handleClick.bind(this);
-  }
-
-  handleClick(e) {
-    e.preventDefault();
-    this.props.onClick(e);
-  }
-
-  render() {
-    return (
-      <a className={"dropdown-toggle icon " + this.props.icon}
-        style={{ fontSize: '1rem', boxShadow: '0px 0px 0px' }}
-        onClick={this.handleClick}>
-        {this.props.children}
-      </a>
-    );
-  }
-}
-
-export class CustomMenu extends React.Component {
-  constructor(props, context) {
-    super(props, context);
-  }
-
-  render() {
-    const { children, open, onClose, className } = this.props;
-    return (
-      <RootCloseWrapper disabled={!open} onRootClose={onClose}>
-        <ul className={classnames('dropdown-menu', className)} role="menu" aria-labelledby="dLabel">
-          {children}
-        </ul>
-      </RootCloseWrapper>
-    );
-  }
-}
diff --git a/app/addons/components/components/paddedborderbox.js b/app/addons/components/components/paddedborderbox.js
deleted file mode 100644
index 166e129..0000000
--- a/app/addons/components/components/paddedborderbox.js
+++ /dev/null
@@ -1,25 +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.
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class PaddedBorderedBox extends React.Component {
-  render() {
-    return (
-      <div className="bordered-box">
-        <div className="padded-box">
-          {this.props.children}
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/polling.js b/app/addons/components/components/polling.js
deleted file mode 100644
index 26859a1..0000000
--- a/app/addons/components/components/polling.js
+++ /dev/null
@@ -1,149 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Slider from 'rc-slider';
-
-let pollIntervalId;
-
-export const clearPollCounter = () => {
-  if (pollIntervalId) {
-    window.clearInterval(pollIntervalId);
-  }
-};
-
-export const resetPollCounter = (time, cb) => {
-  clearPollCounter();
-  pollIntervalId = window.setInterval(cb, time);
-};
-
-const getCountdown = (secsString, units, max, min) => {
-  const secs = parseInt(secsString, 10);
-  if (secs === 0 || secs > max || secs < min) {
-    return 'off';
-  }
-
-  if (secs < 60 && units === 'minute') {
-    return `${secs} seconds`;
-  }
-
-  let displayValue = secs;
-  if (units === 'minute') {
-    displayValue = Math.floor(secs / 60);
-  }
-  return `${displayValue} ${displayValue === 1 ? units : `${units}s`}`;
-};
-
-export class Polling extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      value: this.props.startValue
-    };
-    this.updatePollingFreq = this.updatePollingFreq.bind(this);
-  }
-
-  componentDidMount () {
-    this.setPollingCounter(this.state.value);
-  }
-
-  componentWillUnmount () {
-    clearPollCounter();
-  }
-
-  setPollingCounter (value) {
-    const {min, max, onPoll} = this.props;
-    this.setState({value: value});
-
-    if (value === 0 || value < min || value > max) {
-      clearPollCounter();
-      return;
-    }
-
-    resetPollCounter(value * 1000, () => onPoll());
-  }
-
-  updatePollingFreq (newValue) {
-    this.setPollingCounter(parseInt(newValue, 10));
-  }
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (this.props.startValue !== nextProps.startValue) {
-      this.setPollingCounter(nextProps.startValue);
-    }
-  }
-
-  render () {
-    const {
-      stepSize,
-      min,
-      max,
-      valueUnits
-    } = this.props;
-
-    const {value} = this.state;
-
-    const pollValue = getCountdown(value, valueUnits, max, min);
-    const pollStyle = pollValue === 'off' ? 'faux__polling-info-value--off' : 'faux__polling-info-value--active';
-    return (
-      <div className='faux__polling'>
-        <div className='faux__polling-info'>
-          <span className='faux__polling-info-text'>Polling Interval</span>
-          <span className={`faux__polling-info-value faux__polling-info-value ${pollStyle}`}>{pollValue}</span>
-        </div>
-        <Slider
-          className="faux__polling-info-slider"
-          min={min}
-          max={max + stepSize}
-          defaultValue={value}
-          onChange={this.updatePollingFreq}
-        />
-      </div>
-    );
-  }
-}
-
-Polling.defaultProps = {
-  startValue: 0,
-  min: 0,
-  valueUnits: 'minute'
-};
-
-Polling.propTypes = {
-  startValue: PropTypes.number,
-  valueUnits: PropTypes.string,
-  min: PropTypes.number,
-  max: PropTypes.number.isRequired,
-  stepSize: PropTypes.number.isRequired,
-  onPoll: PropTypes.func.isRequired,
-};
-
-export const RefreshBtn = ({refresh}) =>
-  <div className="faux__refresh-btn">
-    <a
-      className="faux__refresh-link"
-      href="#"
-      data-bypass="true"
-      onClick={e => {
-        e.preventDefault();
-        refresh();
-      }}
-    >
-      <i className="faux__refresh-icon fonticon-arrows-cw"></i>
-      Refresh
-    </a>
-  </div>;
-
-RefreshBtn.propTypes = {
-  refresh: PropTypes.func.isRequired
-};
diff --git a/app/addons/components/components/stringeditmodal.js b/app/addons/components/components/stringeditmodal.js
deleted file mode 100644
index df5877d..0000000
--- a/app/addons/components/components/stringeditmodal.js
+++ /dev/null
@@ -1,90 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import {Modal} from "react-bootstrap";
-import ace from "brace";
-import Helpers from "../../documents/helpers";
-require('brace/mode/javascript');
-require('brace/mode/json');
-require('brace/theme/idle_fingers');
-
-// this appears when the cursor is over a string. It shows an icon in the gutter that opens the modal.
-export class StringEditModal extends React.Component {
-  static propTypes = {
-    value: PropTypes.string.isRequired,
-    visible: PropTypes.bool.isRequired,
-    onClose: PropTypes.func.isRequired,
-    onSave: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    visible: false,
-    onClose () { },
-    onSave () { }
-  };
-
-  state = {
-    editorInitialized: false
-  };
-
-  initAceEditor = (dom_node) => {
-    this.editor = ace.edit(dom_node);
-    this.editor.$blockScrolling = Infinity; // suppresses an Ace editor error
-    this.editor.setShowPrintMargin(false);
-    this.editor.setOption('highlightActiveLine', true);
-    this.editor.setTheme('ace/theme/idle_fingers');
-    const val = Helpers.parseJSON(this.props.value);
-    this.editor.setValue(val, -1);
-    if (!this.state.editorInitialized) {
-      this.setState({ editorInitialized: true });
-    }
-  };
-
-  closeModal = () => {
-    this.props.onClose();
-  };
-
-  save = () => {
-    this.props.onSave(this.editor.getValue());
-  };
-
-  getSaveBtn = () => {
-    return this.state.editorInitialized && (
-      <button id="string-edit-save-btn" onClick={this.save} className="btn btn-primary save">
-        <i className="fonticon-circle-check"></i> Modify Text
-      </button>);
-  };
-
-  render() {
-    return (
-      <Modal className="string-editor-modal" show={this.props.visible} onHide={this.closeModal}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Edit Value <span id="string-edit-header"></span></Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <div id="modal-error" className="hide alert alert-error"/>
-          <div id="string-editor-wrapper">
-            <div id="string-editor-container" ref={node => this.initAceEditor(node)} className="doc-code"></div>
-          </div>
-        </Modal.Body>
-        <Modal.Footer>
-          <a className="cancel-link" onClick={this.closeModal}>Cancel</a>
-          { this.getSaveBtn() }
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/components/components/styledselect.js b/app/addons/components/components/styledselect.js
deleted file mode 100644
index 5a4d5c5..0000000
--- a/app/addons/components/components/styledselect.js
+++ /dev/null
@@ -1,42 +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.
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class StyledSelect extends React.Component {
-  static propTypes = {
-    selectValue: PropTypes.string.isRequired,
-    selectId: PropTypes.string.isRequired,
-    selectChange: PropTypes.func.isRequired
-  };
-
-  render() {
-    return (
-      <div className="styled-select">
-        <label htmlFor={this.props.selectId}>
-          <i className="fonticon-down-dir styled-select-icon"></i>
-          <i className="fonticon-down-dir styled-select-hover-icon"></i>
-          <select
-            value={this.props.selectValue}
-            id={this.props.selectId}
-            className={this.props.selectValue}
-            onChange={this.props.selectChange}
-          >
-            {this.props.selectContent}
-          </select>
-        </label>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/tabelement.js b/app/addons/components/components/tabelement.js
deleted file mode 100644
index 37f1e72..0000000
--- a/app/addons/components/components/tabelement.js
+++ /dev/null
@@ -1,62 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export const TabElement = ({selected, text, onChange, iconClass, badgeText}) => {
-
-  const additionalClass = selected ? 'tab-element-checked' : '';
-  let badge = null;
-  if (badgeText) {
-    badge = <span className="tab-element-badge">{badgeText}</span>;
-  }
-  return (
-    <li className={`component-tab-element ${additionalClass}`}>
-
-      <label>
-        <div className="tab-element-indicator-wrapper">
-          <div className="tab-element-indicator"></div>
-        </div>
-        <div className="tab-element-content">
-          <i className={iconClass}></i>
-          <input
-            type="radio"
-            value={text}
-            checked={selected}
-            onChange={onChange} />
-
-          {text}
-          {badge}
-        </div>
-      </label>
-    </li>
-
-  );
-};
-TabElement.propTypes = {
-  selected: PropTypes.bool.isRequired,
-  text: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired,
-  iconClass: PropTypes.string,
-  badgeText: PropTypes.string
-};
-
-export const TabElementWrapper = ({children}) => {
-  return (
-    <ul className="component-tab-element-wrapper">
-      {children}
-    </ul>
-  );
-};
diff --git a/app/addons/components/components/tabwindowwrapper.js b/app/addons/components/components/tabwindowwrapper.js
deleted file mode 100644
index 3a7d4a4..0000000
--- a/app/addons/components/components/tabwindowwrapper.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import FauxtonAPI from '../../../core/api';
-import PropTypes from 'prop-types';
-import React from 'react';
-import {TabElement, TabElementWrapper} from './tabelement';
-
-
-export class TabWindowWrapper extends React.Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  render () {
-    const {selectedTab, tabs} = this.props;
-
-    const elements = tabs.map((tab, i) => {
-
-      return (
-        <TabElement
-          key={i}
-          selected={tab.name === selectedTab}
-          text={tab.name}
-          badgeText={tab.badgeText}
-          onChange={() => { FauxtonAPI.navigate(tab.route, {redirect: true}); }}
-          iconClass="" />
-      );
-    });
-
-    const selectedPage = tabs.reduce((acc, el) => {
-      if (el.name === selectedTab) {
-        return el;
-      }
-      return acc;
-    }, {});
-
-    if (!selectedPage.component) {
-      return null;
-    }
-
-    return (
-      <div className="tab__wrapper">
-        <TabElementWrapper>
-          {elements}
-        </TabElementWrapper>
-
-        <div className="tab__container">
-          <selectedPage.component />
-        </div>
-      </div>
-    );
-  }
-
-}
-
-TabWindowWrapper.propTypes = {
-  tabs: PropTypes.array.isRequired,
-  selectedTab: PropTypes.string.isRequired
-};
diff --git a/app/addons/components/components/throttledreacselect.js b/app/addons/components/components/throttledreacselect.js
deleted file mode 100644
index a5df5e7..0000000
--- a/app/addons/components/components/throttledreacselect.js
+++ /dev/null
@@ -1,50 +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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-import ReactSelect from "react-select";
-
-export class ThrottledReactSelectAsync extends React.Component {
-  constructor(props) {
-    super(props);
-    this.lastCall = undefined;
-  }
-
-  wrapThrottler(loadOptions) {
-    if (!loadOptions) {
-      return () => {};
-    }
-    return (id, callback) => {
-      if (this.lastCall) {
-        clearTimeout(this.lastCall);
-      }
-      this.lastCall = setTimeout(() => {
-        loadOptions(id, callback);
-      }, 400);
-    };
-  }
-
-  render() {
-    // wrapThrottler() must be called here to ensure a new
-    // function is created when props.loadOptions is updated
-    const throttledLoadOptions = this.wrapThrottler(
-      this.props.loadOptions
-    ).bind(this);
-    const newProps = {
-      ...this.props,
-      loadOptions: throttledLoadOptions,
-      onBlurResetsInput: false
-    };
-    return <ReactSelect.Async {...newProps} />;
-  }
-}
diff --git a/app/addons/components/components/toggleheaderbutton.js b/app/addons/components/components/toggleheaderbutton.js
deleted file mode 100644
index 6f0a51e..0000000
--- a/app/addons/components/components/toggleheaderbutton.js
+++ /dev/null
@@ -1,44 +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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class ToggleHeaderButton extends React.Component {
-  static defaultProps = {
-    innerClasses: '',
-    fonticon: '',
-    containerClasses: '',
-    selected: false,
-    title: '',
-    disabled: false,
-    toggleCallback: null,
-    text: '',
-    iconDefaultClass: 'icon'
-  };
-
-  render() {
-    const { iconDefaultClass, fonticon, innerClasses, selected, containerClasses, title, disabled, text, toggleCallback, active } = this.props;
-    const selectedBtnClass = (selected || active) ? 'js-headerbar-togglebutton-selected' : '';
-
-    return (
-      <button
-        title={title}
-        disabled={disabled}
-        onClick={toggleCallback}
-        className={`button ${containerClasses} ${selectedBtnClass}`}
-      >
-        <i className={`${iconDefaultClass} ${fonticon} ${innerClasses}`}></i><span>{text}</span>
-      </button>
-    );
-  }
-}
diff --git a/app/addons/components/components/tray.js b/app/addons/components/components/tray.js
deleted file mode 100644
index e37d18e..0000000
--- a/app/addons/components/components/tray.js
+++ /dev/null
@@ -1,162 +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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import {Overlay} from 'react-bootstrap';
-import {TransitionMotion, spring} from 'react-motion';
-
-export class TrayContents extends React.Component {
-  static propTypes = {
-    contentVisible: PropTypes.bool.isRequired,
-    closeTray: PropTypes.func.isRequired,
-    onEnter: PropTypes.func,
-    container: PropTypes.object
-  };
-
-  static defaultProps = {
-    onEnter: () => {}
-  };
-
-  constructor (props) {
-    super(props);
-    if (!props.container) {
-      this.container = this;
-    }
-  }
-
-  getChildren = (items) => {
-    const {style} = items[0];
-    const className = "tray show-tray " + this.props.className;
-    return (
-      <div key={'1'} id={this.props.id} style={{opacity: style.opacity, top: style.top + 'px'}} className={className}>
-        {this.props.children}
-      </div>);
-  };
-
-  willEnter = () => {
-    return {
-      opacity: spring(1),
-      top: spring(64)
-    };
-  };
-
-  willLeave = () => {
-    return {
-      opacity: spring(0),
-      top: spring(30)
-    };
-  };
-
-  getDefaultStyles = () => {
-    return [{key: '1', style: {opacity: 0, top: 30}}];
-  };
-
-  getStyles = (prevStyle) => {
-    if (!prevStyle) {
-      return [{
-        key: '1',
-        style: this.willEnter()
-      }];
-    }
-    return prevStyle.map(item => {
-      return {
-        key: '1',
-        style: item.style
-      };
-    });
-  };
-
-  render() {
-    return (
-      <Overlay
-        show={this.props.contentVisible}
-        onHide={this.props.closeTray}
-        placement={"bottom"}
-        container={this.props.container}
-        rootClose={true}
-        onEnter={this.props.onEnter}
-      >
-        <TransitionMotion
-          defaultStyles={this.getDefaultStyles()}
-          styles={this.getStyles()}
-          willLeave={this.willLeave}
-          willEnter={this.willEnter}
-        >
-          {this.getChildren}
-        </TransitionMotion>
-      </Overlay>
-    );
-  }
-}
-
-
-export const connectToStores = (Component, stores, getStateFromStores) => {
-  class WrappingElement extends React.Component {
-    state = getStateFromStores(this.props);
-
-    componentDidMount() {
-      stores.forEach(store => {
-        store.on('change', this.onChange, this);
-      });
-    }
-
-    componentWillUnmount() {
-      stores.forEach(function (store) {
-        store.off('change', this.onChange);
-      }.bind(this));
-    }
-
-    onChange = () => {
-      this.setState(getStateFromStores(this.props));
-    };
-
-    handleStoresChanged = () => {
-      this.setState(getStateFromStores(this.props));
-    };
-
-    render() {
-      return <Component {...this.state} {...this.props} />;
-    }
-  }
-
-  return WrappingElement;
-};
-
-export class TrayWrapper extends React.Component {
-  static defaultProps = {
-    className: ''
-  };
-
-  renderChildren = () => {
-    return React.Children.map(this.props.children, (child) => {
-
-      const props = {};
-      Object.keys(this.props).filter((k) => {
-        return Object.prototype.hasOwnProperty.call(this.props, k);
-      }).map((k) => {
-        return props[k] = this.props[k];
-      });
-
-      return React.cloneElement(child, props);
-    });
-  };
-
-  render() {
-    return (
-      <div>
-        {this.renderChildren()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/zenmodeoverlay.js b/app/addons/components/components/zenmodeoverlay.js
deleted file mode 100644
index dceb24c..0000000
--- a/app/addons/components/components/zenmodeoverlay.js
+++ /dev/null
@@ -1,133 +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.
-import React from "react";
-import ReactDOM from "react-dom";
-import app from "../../../app";
-import {CodeEditor} from './codeeditor';
-import {Tooltip, OverlayTrigger} from 'react-bootstrap';
-
-require('brace/theme/dawn');
-
-const themes = {
-  dark: 'idle_fingers',
-  light: 'dawn'
-};
-// Zen mode editing has very few options:
-// - It covers the full screen, hiding everything else
-// - Two themes: light & dark (choice stored in local storage)
-// - No save option, but has a 1-1 map with a <CodeEditor /> element which gets updated when the user leaves
-// - [Escape] closes the mode, as does clicking the shrink icon at the top right
-export class ZenModeOverlay extends React.Component {
-  static defaultProps = {
-    mode: 'javascript',
-    defaultCode: '',
-    ignorableErrors: [],
-    onExit: null,
-    highlightActiveLine: false
-  };
-
-  getStoreState = () => {
-    return {
-      theme: this.getZenTheme(),
-      code: this.props.defaultCode
-    };
-  };
-
-  getZenTheme = () => {
-    var selectedTheme = app.utils.localStorageGet('zenTheme');
-    return _.isUndefined(selectedTheme) ? 'dark' : selectedTheme;
-  };
-
-  onChange = () => {
-    this.setState(this.getStoreState());
-  };
-
-  exitZenMode = () => {
-    this.props.onExit(this.getValue());
-  };
-
-  getValue = () => {
-    return this.ace.getValue();
-  };
-
-  toggleTheme = () => {
-    var newTheme = (this.state.theme === 'dark') ? 'light' : 'dark';
-    this.setState({
-      theme: newTheme,
-      code: this.getValue()
-    });
-    app.utils.localStorageSet('zenTheme', newTheme);
-  };
-
-  setValue = (code, lineNumber) => {
-    lineNumber = lineNumber ? lineNumber : -1;
-    this.editor.setValue(code, lineNumber);
-  };
-
-  state = this.getStoreState();
-
-  render() {
-    var classes = 'full-page-editor-modal-wrapper zen-theme-' + this.state.theme;
-
-    var editorCommands = [{
-      name: 'close',
-      bindKey: { win: 'ESC', mac: 'ESC' },
-      exec: this.exitZenMode
-    }];
-
-    const tooltipExit = <Tooltip id="tooltip">
-      Exit zen mode (`esc`)
-    </Tooltip>;
-
-    const tooltipTheme = <Tooltip id="tooltip">
-      Switch zen theme
-    </Tooltip>;
-
-    return (
-      <div className={classes}>
-        <div className="zen-mode-controls">
-          <ul>
-            <li>
-              <OverlayTrigger placement="left" overlay={tooltipExit}>
-                <span
-                  className="fonticon fonticon-resize-small js-exit-zen-mode"
-                  data-container=".zen-mode-controls .tooltips"
-                  onClick={this.exitZenMode}>
-                </span>
-              </OverlayTrigger>
-            </li>
-            <li>
-              <OverlayTrigger placement="left" overlay={tooltipTheme}>
-                <span
-                  className="fonticon fonticon-picture js-toggle-theme"
-                  data-container=".zen-mode-controls .tooltips"
-                  title="Switch zen theme"
-                  onClick={this.toggleTheme}>
-                </span>
-              </OverlayTrigger>
-            </li>
-          </ul>
-          <div className="tooltips"></div>
-        </div>
-        <CodeEditor
-          ref={node => this.ace = node}
-          autoFocus={true}
-          theme={themes[this.state.theme]}
-          defaultCode={this.props.defaultCode}
-          editorCommands={editorCommands}
-          ignorableErrors={this.props.ignorableErrors}
-          highlightActiveLine={this.props.highlightActiveLine}
-        />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/header-breadcrumbs.js b/app/addons/components/header-breadcrumbs.js
deleted file mode 100644
index 898b997..0000000
--- a/app/addons/components/header-breadcrumbs.js
+++ /dev/null
@@ -1,68 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-export const Breadcrumbs = ({crumbs}) => {
-
-  return (
-    <div className="faux-header__breadcrumbs">
-      {getChildren(crumbs)}
-    </div>
-  );
-
-};
-
-Breadcrumbs.propTypes = {
-  crumbs: PropTypes.array.isRequired
-};
-
-
-const CrumbElement = ({children}) => {
-  return <div className="faux-header__breadcrumbs-element">{children}</div>;
-};
-
-const Divider = () => {
-  return (
-    <div className="fonticon-right-open faux-header__breadcrumbs-divider"></div>
-  );
-};
-
-function getChildren (crumbs) {
-  const amountDividers = crumbs.length - 1;
-
-  return crumbs.map((c, i) => {
-
-    let res = [<CrumbElement key={i}>{c.name}</CrumbElement>];
-
-    if (c.link) {
-      res = [
-        <CrumbElement key={i}>
-          <a className="faux-header__breadcrumbs-link" href={'#/' + c.link}>{c.name}</a>
-        </CrumbElement>
-      ];
-    }
-
-    if (!c.name) {
-      return res;
-    }
-
-    if (i < amountDividers) {
-      res.push(<Divider key={'divider_' + i}/>);
-    }
-
-    return res;
-  });
-}
diff --git a/app/addons/components/layouts.js b/app/addons/components/layouts.js
deleted file mode 100644
index 81389e5..0000000
--- a/app/addons/components/layouts.js
+++ /dev/null
@@ -1,138 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import {JSONLink, DocLink} from './components/apibar';
-import {Breadcrumbs} from './header-breadcrumbs';
-import Helpers from '../../helpers';
-
-export const ApiBarWrapper = ({docURL, endpoint}) => {
-  return (
-    <div className='faux__jsondoc-wrapper'>
-      <JSONLink
-        endpoint={endpoint}
-      />
-      <DocLink
-        docURL={docURL}
-      />
-    </div>
-  );
-};
-
-export const OnePane = ({children}) => {
-  return (
-    <div id='dashboard' className='one-pane '>
-      {children}
-    </div>
-  );
-};
-
-export const OnePaneHeader = ({showApiUrl, docURL, endpoint, crumbs, children}) => {
-  let rightHeaderClass = "right-header-flex";
-  if (Helpers.isIE1X()) {
-    rightHeaderClass += " " + rightHeaderClass + "--ie1X";
-  }
-  return (
-    <header>
-      <div className='flex-layout flex-row'>
-        <div id='breadcrumbs' className='flex-body'>
-          <Breadcrumbs crumbs={crumbs}/>
-        </div>
-        <div id='right-header'>
-          <div className={rightHeaderClass}>
-            {children}
-          </div>
-        </div>
-        {showApiUrl ? <ApiBarWrapper docURL={docURL} endpoint={endpoint} /> : null}
-        <div id='notification-center-btn'>
-          <NotificationCenterButton />
-        </div>
-      </div>
-    </header>
-  );
-};
-
-OnePaneHeader.defaultProps = {
-  showApiUrl: true,
-  crumbs: []
-};
-
-OnePaneHeader.propTypes = {
-  docURL: PropTypes.string,
-  endpoint: PropTypes.string,
-  crumbs: PropTypes.array
-};
-
-export const OnePaneContent = ({children}) => {
-  return (
-    <div className='content-area container-fluid'>
-      <div id='tabs'></div>
-      <div id='dashboard-content' className='scrollable'>
-        {children}
-      </div>
-    </div>
-  );
-};
-
-export const OnePaneFooter = ({children}) => {
-  return (
-    <div className='faux__onepane-footer'>
-      {children}
-    </div>
-  );
-};
-
-export const OnePaneSimpleLayout = ({component, docURL, endpoint, crumbs}) => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={crumbs}
-        endpoint={endpoint}
-        docURL={docURL}
-      >
-      </OnePaneHeader>
-      <OnePaneContent>
-        {component}
-      </OnePaneContent>
-      <OnePaneFooter>
-      </OnePaneFooter>
-    </OnePane>
-  );
-};
-
-export const DocEditorContent = ({children}) => {
-  return (
-    <div id="dashboard-content">
-      {children}
-    </div>
-  );
-};
-
-export const DocEditorLayout = ({component, docURL, endpoint, crumbs}) => {
-  return (
-    <div id="dashboard" className="one-pane doc-editor-page">
-      <OnePaneHeader
-        crumbs={crumbs}
-        endpoint={endpoint}
-        docURL={docURL}
-      >
-      </OnePaneHeader>
-      <DocEditorContent>
-        {component}
-      </DocEditorContent>
-    </div>
-  );
-};
diff --git a/app/addons/components/react-components.js b/app/addons/components/react-components.js
deleted file mode 100644
index d5223aa..0000000
--- a/app/addons/components/react-components.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.
-
-import {Accordion, AccordionItem} from './components/accordion';
-import {Badge, BadgeList} from './components/badge';
-import {ToggleHeaderButton} from './components/toggleheaderbutton';
-import {BulkActionComponent} from './components/bulkaction';
-import {StyledSelect} from './components/styledselect';
-import {StringEditModal} from './components/stringeditmodal';
-import {CodeEditorPanel} from './components/codeeditorpanel';
-import {CodeEditor} from './components/codeeditor';
-import {ZenModeOverlay} from './components/zenmodeoverlay';
-import {Beautify} from './components/beautify';
-import {PaddedBorderedBox} from './components/paddedborderbox';
-import {Document} from './components/document';
-import {LoadLines} from './components/loadlines';
-import {ConfirmButton} from './components/confirmbutton';
-import {MenuDropDown} from './components/menudropdown';
-import {TrayContents, TrayWrapper, connectToStores} from './components/tray';
-import {DeleteDatabaseModal} from './components/deletedatabasemodal';
-import {TabElement, TabElementWrapper} from './components/tabelement';
-import {Polling, RefreshBtn} from './components/polling';
-import {Copy} from './components/copy';
-import {TabWindowWrapper} from './components/tabwindowwrapper';
-import {ThrottledReactSelectAsync} from './components/throttledreacselect';
-
-export default {
-  Accordion,
-  AccordionItem,
-  BadgeList,
-  Badge,
-  BulkActionComponent,
-  ConfirmButton,
-  ToggleHeaderButton,
-  StyledSelect,
-  CodeEditorPanel,
-  CodeEditor,
-  StringEditModal,
-  ZenModeOverlay,
-  Beautify,
-  PaddedBorderedBox,
-  Polling,
-  Document,
-  LoadLines,
-  MenuDropDown,
-  TrayContents,
-  TrayWrapper,
-  connectToStores,
-  DeleteDatabaseModal,
-  TabElement,
-  TabElementWrapper,
-  RefreshBtn,
-  Copy,
-  TabWindowWrapper,
-  ThrottledReactSelectAsync
-};
diff --git a/app/addons/components/stores.js b/app/addons/components/stores.js
deleted file mode 100644
index 96d6dc0..0000000
--- a/app/addons/components/stores.js
+++ /dev/null
@@ -1,56 +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.
-
-import FauxtonAPI from "../../core/api";
-import app from "../../app";
-import ActionTypes from "./actiontypes";
-var Stores = {};
-
-Stores.DeleteDbModalStore = FauxtonAPI.Store.extend({
-  initialize: function () {
-    this.reset();
-  },
-
-  reset: function () {
-    this._deleteModal = {showDeleteModal: false, dbId: '', isSystemDatabase: false};
-  },
-
-  setDeleteModal: function (options) {
-    options.isSystemDatabase = app.utils.isSystemDatabase(options.dbId);
-    this._deleteModal = options;
-  },
-
-  getShowDeleteDatabaseModal: function () {
-    return this._deleteModal;
-  },
-
-  dispatch: function (action) {
-    switch (action.type) {
-      case ActionTypes.CMPNTS_DATABASES_SHOWDELETE_MODAL:
-        this.setDeleteModal(action.options);
-        break;
-
-      default:
-        return;
-    }
-
-    this.triggerChange();
-  }
-});
-
-
-
-
-Stores.deleteDbModalStore = new Stores.DeleteDbModalStore();
-Stores.deleteDbModalStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.deleteDbModalStore.dispatch.bind(Stores.deleteDbModalStore));
-
-export default Stores;
diff --git a/app/addons/config/__tests__/actions.test.js b/app/addons/config/__tests__/actions.test.js
deleted file mode 100644
index d9e9649..0000000
--- a/app/addons/config/__tests__/actions.test.js
+++ /dev/null
@@ -1,147 +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.
-import testUtils from '../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../core/api';
-import * as Actions from '../actions';
-import ActionTypes from '../actiontypes';
-import * as ConfigAPI from '../api';
-import sinon from 'sinon';
-
-const restore = testUtils.restore;
-
-describe('Config Actions', () => {
-  const node = 'test';
-  const option = {
-    sectionName: 'test',
-    optionName: 'test',
-    value: 'test'
-  };
-  const spySaveConfigOption = sinon.stub(ConfigAPI, 'saveConfigOption');
-  const spyDeleteConfigOption = sinon.stub(ConfigAPI, 'deleteConfigOption');
-  const dispatch = sinon.stub();
-
-  describe('addOption', () => {
-
-    afterEach(() => {
-      spySaveConfigOption.reset();
-      dispatch.reset();
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('dispatches OPTION_ADD_SUCCESS and shows notification when option add succeeds', () => {
-      const promise = FauxtonAPI.Promise.resolve();
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.addOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_ADD_SUCCESS,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-
-    it('dispatches OPTION_ADD_FAILURE and shows notification when option add fails', () => {
-      const promise = FauxtonAPI.Promise.reject(new Error(''));
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.addOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_ADD_FAILURE,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-  });
-
-  describe('saveOption', () => {
-    afterEach(() => {
-      spySaveConfigOption.reset();
-      dispatch.reset();
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('dispatches OPTION_SAVE_SUCCESS and shows notification when option add succeeds', () => {
-      const promise = FauxtonAPI.Promise.resolve();
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.saveOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_SAVE_SUCCESS,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-
-    it('dispatches OPTION_SAVE_FAILURE and shows notification when option add fails', () => {
-      const promise = FauxtonAPI.Promise.reject(new Error(''));
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.saveOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_SAVE_FAILURE,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-  });
-
-  describe('deleteOption', () => {
-    afterEach(() => {
-      spyDeleteConfigOption.reset();
-      dispatch.reset();
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('dispatches OPTION_DELETE_SUCCESS and shows notification when option add succeeds', () => {
-      const promise = FauxtonAPI.Promise.resolve();
-      spyDeleteConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.deleteOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_DELETE_SUCCESS,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-
-    it('dispatches OPTION_DELETE_FAILURE and shows notification when option add fails', () => {
-      const promise = FauxtonAPI.Promise.reject(new Error(''));
-      spyDeleteConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.deleteOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_DELETE_FAILURE,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-  });
-});
-
diff --git a/app/addons/config/__tests__/components.test.js b/app/addons/config/__tests__/components.test.js
deleted file mode 100644
index 1c6110d..0000000
--- a/app/addons/config/__tests__/components.test.js
+++ /dev/null
@@ -1,268 +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.
-
-import React from 'react';
-import {mount} from 'enzyme';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../core/api';
-import AddOptionButton from '../components/AddOptionButton';
-import ConfigOption from '../components/ConfigOption';
-import ConfigOptionValue from '../components/ConfigOptionValue';
-import ConfigOptionTrash from '../components/ConfigOptionTrash';
-import ConfigTableScreen from '../components/ConfigTableScreen';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Config Components', () => {
-  describe('ConfigTableScreen', () => {
-    const options = [
-      {editing: false, header:true, sectionName: 'sec1', optionName: 'opt1', value: 'value1'},
-      {editing: false, header:false, sectionName: 'sec1', optionName: 'opt2', value: 'value2'}
-    ];
-    const node = 'test_node';
-    const defaultProps = {
-      saving: false,
-      loading: false,
-      deleteOption: () => {},
-      saveOption: () => {},
-      editOption: () => {},
-      cancelEdit: () => {},
-      fetchAndEditConfig: () => {},
-      node,
-      options
-    };
-
-    it('deletes options', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        deleteOption={spy}/>
-      );
-      wrapper.instance().deleteOption({});
-      sinon.assert.called(spy);
-    });
-
-    it('saves options', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        saveOption={spy}/>
-      );
-      wrapper.instance().saveOption({});
-      sinon.assert.called(spy);
-    });
-
-    it('edits options', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        editOption={spy}/>
-      );
-      wrapper.instance().editOption({});
-      sinon.assert.called(spy);
-    });
-
-    it('cancels editing', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        cancelEdit={spy}/>
-      );
-      wrapper.instance().cancelEdit();
-      sinon.assert.called(spy);
-    });
-  });
-
-  describe('ConfigOption', () => {
-    const defaultProps = {
-      option: {},
-      saving: false,
-      onEdit: () => {},
-      onCancelEdit: () => {},
-      onSave: () => {},
-      onDelete: () => {}
-    };
-    it('renders section name if the option is a header', () => {
-      const option = {
-        sectionName: 'test_section',
-        optionName: 'test_option',
-        value: 'test_value',
-        header: true,
-        editing: true
-      };
-
-      const el = mount(<table><tbody><ConfigOption {...defaultProps} option={option}/></tbody></table>);
-      expect(el.find('th').text()).toBe('test_section');
-    });
-  });
-
-  describe('ConfigOptionValue', () => {
-    const defaultProps = {
-      value: '',
-      editing: false,
-      onEdit: () => {},
-      onCancelEdit: () => {},
-      onSave: () => {}
-    };
-
-    it('displays the value prop', () => {
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'}/>
-        </tr></tbody></table>
-      );
-
-      expect(el.text()).toBe('test_value');
-    });
-
-    it('starts editing when clicked', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} onEdit={spy}/>
-        </tr></tbody></table>
-      );
-
-      el.find(ConfigOptionValue).simulate('click');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-
-    it('displays editing controls if editing', () => {
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing/>
-        </tr></tbody></table>
-      );
-
-      expect(el.find('input.config-value-input').length).toBe(1);
-      expect(el.find('button.btn-config-cancel').length).toBe(1);
-      expect(el.find('button.btn-config-save').length).toBe(1);
-    });
-
-    it('disables input when saving is set to true', () => {
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing={true} saving={true}/>
-        </tr></tbody></table>
-      );
-
-      expect(el.find('input.config-value-input').prop('disabled')).toBe(true);
-    });
-
-    it('saves changed value of input when save clicked', () => {
-      var change = { target: { value: 'new_value' } };
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing onSave={spy}/>
-        </tr></tbody></table>
-      );
-
-      el.find('input.config-value-input').simulate('change', change);
-      el.find('button.btn-config-save').simulate('click');
-      expect(spy.calledWith('new_value')).toBeTruthy();
-    });
-
-    it('cancels edit if save clicked with unchanged value', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing onCancelEdit={spy}/>
-        </tr></tbody></table>
-      );
-
-      el.find('button.btn-config-save').simulate('click');
-      sinon.assert.calledOnce(spy);
-    });
-  });
-
-  describe('ConfigOptionTrash', () => {
-    const defaultProps = {
-      sectionName: 'test_section',
-      optionName: 'test_option',
-      onDelete: () => {}
-    };
-
-    it('displays delete modal when clicked', () => {
-      const el = mount(
-        <table><tbody><tr><ConfigOptionTrash {...defaultProps}/></tr></tbody></table>
-      );
-
-      el.find('i.icon').simulate('click');
-      expect(el.find('div.confirmation-modal').length).toBe(1);
-    });
-
-    it('calls on delete when confirmation modal Okay button clicked', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr><ConfigOptionTrash {...defaultProps} onDelete={spy}/></tr></tbody></table>
-      );
-
-      el.find('i.icon').simulate('click');
-      el.find('div.confirmation-modal .btn').simulate('click');
-      sinon.assert.calledOnce(spy);
-    });
-  });
-
-  describe('AddOptionButton', () => {
-    it('displays add option controls when clicked', () => {
-      const el = mount(
-        <AddOptionButton onAdd={() => {}}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      expect(el.find('div#add-option-popover .input-section-name').length).toBe(1);
-      expect(el.find('div#add-option-popover .input-option-name').length).toBe(1);
-      expect(el.find('div#add-option-popover .input-value').length).toBe(1);
-      expect(el.find('div#add-option-popover .btn-create').length).toBe(1);
-    });
-
-    it('does not hide popover if create clicked with invalid input', () => {
-      const el = mount(
-        <AddOptionButton onAdd={() => {}}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      el.find('div#add-option-popover .btn-create').simulate('click');
-      expect(el.find('div#add-option-popover').length).toBe(1);
-    });
-
-    it('does not add option if create clicked with invalid input', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <AddOptionButton onAdd={spy}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      el.find('div#add-option-popover .btn-create').simulate('click');
-      sinon.assert.notCalled(spy);
-    });
-
-    it('adds option when create clicked with valid input', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <AddOptionButton onAdd={spy}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      el.find('div#add-option-popover .input-section-name').simulate('change', { target: { value: 'test_section' } });
-      el.find('div#add-option-popover .input-option-name').simulate('change', { target: { value: 'test_option' } });
-      el.find('div#add-option-popover .input-value').simulate('change', { target: { value: 'test_value' } });
-      el.find('div#add-option-popover .btn-create').simulate('click');
-      sinon.assert.calledWithMatch(spy, {
-        sectionName: 'test_section',
-        optionName: 'test_option',
-        value: 'test_value'
-      });
-    });
-  });
-});
diff --git a/app/addons/config/__tests__/reducers.test.js b/app/addons/config/__tests__/reducers.test.js
deleted file mode 100644
index e9a0275..0000000
--- a/app/addons/config/__tests__/reducers.test.js
+++ /dev/null
@@ -1,111 +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.
-
-import ActionTypes from '../actiontypes';
-import reducer, {options} from '../reducers';
-
-describe('Config Reducer', () => {
-  const editConfigAction = {
-    type: ActionTypes.EDIT_CONFIG,
-    options: {
-      sections: {
-        test: { b: 1, c: 2, a: 3 }
-      }
-    }
-  };
-  describe('fetchConfig', () => {
-    it('sorts options ascending', () => {
-      const newState = reducer(undefined, editConfigAction);
-      expect(options(newState)[0].optionName).toBe('a');
-    });
-
-    it('sets the first option as the header', () => {
-      const newState = reducer(undefined, editConfigAction);
-      expect(options(newState)[0].header).toBe(true);
-    });
-  });
-
-  describe('editOption', () => {
-    it('sets the option that is being edited', () => {
-      let newState = reducer(undefined, editConfigAction);
-      const opts = options(newState);
-      opts.forEach(el => {
-        expect(el.editing).toBe(false);
-      });
-
-      const editOptionAction = {
-        type: ActionTypes.EDIT_OPTION,
-        options: {
-          sectionName: 'test',
-          optionName: 'b'
-        }
-      };
-      newState = reducer(newState, editOptionAction);
-      const opts2 = options(newState);
-      expect(opts2[1].editing).toBe(true);
-    });
-  });
-
-  describe('saveOption', () => {
-    it('sets new option value', () => {
-      let newState = reducer(undefined, editConfigAction);
-      expect(options(newState)[1].value).toBe(1);
-
-      const saveOptionAction = {
-        type: ActionTypes.OPTION_SAVE_SUCCESS,
-        options: {
-          sectionName: 'test',
-          optionName: 'b',
-          value: 'new_value'
-        }
-      };
-      newState = reducer(newState, saveOptionAction);
-      expect(options(newState)[1].value).toBe('new_value');
-    });
-  });
-
-  describe('deleteOption', () => {
-    it('deletes option from section', () => {
-      let newState = reducer(undefined, editConfigAction);
-      expect(options(newState).length).toBe(3);
-
-      const deleteOptionAction = {
-        type: ActionTypes.OPTION_DELETE_SUCCESS,
-        options: {
-          sectionName: 'test',
-          optionName: 'b'
-        }
-      };
-      newState = reducer(newState, deleteOptionAction);
-      expect(options(newState).length).toBe(2);
-    });
-
-    it('deletes section when all options are deleted', () => {
-      let newState = reducer(undefined, editConfigAction);
-      expect(options(newState).length).toBe(3);
-
-      const deleteOptionAction = {
-        type: ActionTypes.OPTION_DELETE_SUCCESS,
-        options: {
-          sectionName: 'test',
-          optionName: 'a'
-        }
-      };
-      newState = reducer(newState, deleteOptionAction);
-      deleteOptionAction.options.optionName = 'b';
-      newState = reducer(newState, deleteOptionAction);
-      deleteOptionAction.options.optionName = 'c';
-      newState = reducer(newState, deleteOptionAction);
-      expect(options(newState).length).toBe(0);
-    });
-  });
-});
diff --git a/app/addons/config/actions.js b/app/addons/config/actions.js
deleted file mode 100644
index ae4a97d..0000000
--- a/app/addons/config/actions.js
+++ /dev/null
@@ -1,131 +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.
-
-import ActionTypes from './actiontypes';
-import FauxtonAPI from '../../core/api';
-import * as ConfigAPI from './api';
-
-export const fetchAndEditConfig = (node) => (dispatch) => {
-  dispatch({ type: ActionTypes.LOADING_CONFIG });
-
-  ConfigAPI.fetchConfig(node).then(res => {
-    dispatch({
-      type: ActionTypes.EDIT_CONFIG,
-      options: {
-        sections: res.sections,
-        node
-      }
-    });
-  }).catch(err => {
-    FauxtonAPI.addNotification({
-      msg: 'Failed to load the configuration. ' + err.message,
-      type: 'error',
-      clear: true
-    });
-    dispatch({
-      type: ActionTypes.EDIT_CONFIG,
-      options: {
-        sections: [],
-        node
-      }
-    });
-  });
-};
-
-export const editOption = (options) => (dispatch) => {
-  dispatch({ type: ActionTypes.EDIT_OPTION, options });
-};
-
-export const cancelEdit = (options) => (dispatch) => {
-  dispatch({ type: ActionTypes.CANCEL_EDIT, options });
-};
-
-export const saveOption = (node, options) => (dispatch) => {
-  dispatch({ type: ActionTypes.SAVING_OPTION, options });
-
-  const { sectionName, optionName, value } = options;
-  return ConfigAPI.saveConfigOption(node, sectionName, optionName, value).then(
-    () => optionSaveSuccess(options, dispatch)
-  ).catch(
-    (err) => optionSaveFailure(options, err.message, dispatch)
-  );
-};
-
-const optionSaveSuccess = (options, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_SAVE_SUCCESS, options });
-  FauxtonAPI.addNotification({
-    msg: `Option ${options.optionName} saved`,
-    type: 'success'
-  });
-};
-
-const optionSaveFailure = (options, error, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_SAVE_FAILURE, options });
-  FauxtonAPI.addNotification({
-    msg: `Option save failed: ${error}`,
-    type: 'error'
-  });
-};
-
-export const addOption = (node, options) => (dispatch) => {
-  dispatch({ type: ActionTypes.ADDING_OPTION });
-
-  const { sectionName, optionName, value } = options;
-  return ConfigAPI.saveConfigOption(node, sectionName, optionName, value).then(
-    () => optionAddSuccess(options, dispatch)
-  ).catch(
-    (err) => optionAddFailure(options, err.message, dispatch)
-  );
-};
-
-const optionAddSuccess = (options, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_ADD_SUCCESS, options });
-  FauxtonAPI.addNotification({
-    msg: `Option ${options.optionName} added`,
-    type: 'success'
-  });
-};
-
-const optionAddFailure = (options, error, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_ADD_FAILURE, options });
-  FauxtonAPI.addNotification({
-    msg: `Option add failed: ${error}`,
-    type: 'error'
-  });
-};
-
-export const deleteOption = (node, options) => (dispatch) => {
-  dispatch({ type: ActionTypes.DELETING_OPTION, options });
-
-  const { sectionName, optionName } = options;
-  return ConfigAPI.deleteConfigOption(node, sectionName, optionName).then(
-    () => optionDeleteSuccess(options, dispatch)
-  ).catch(
-    (err) => optionDeleteFailure(options, err.message, dispatch)
-  );
-};
-
-const optionDeleteSuccess = (options, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_DELETE_SUCCESS, options });
-  FauxtonAPI.addNotification({
-    msg: `Option ${options.optionName} deleted`,
-    type: 'success'
-  });
-};
-
-const optionDeleteFailure = (options, error, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_DELETE_FAILURE, options });
-  FauxtonAPI.addNotification({
-    msg: `Option delete failed: ${error}`,
-    type: 'error'
-  });
-};
diff --git a/app/addons/config/actiontypes.js b/app/addons/config/actiontypes.js
deleted file mode 100644
index 9391ac3..0000000
--- a/app/addons/config/actiontypes.js
+++ /dev/null
@@ -1,27 +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.
-
-export default {
-  EDIT_CONFIG: 'EDIT_CONFIG',
-  LOADING_CONFIG: 'LOADING_CONFIG',
-  EDIT_OPTION: 'EDIT_OPTION',
-  CANCEL_EDIT: 'CANCEL_EDIT',
-  SAVING_OPTION: 'SAVING_OPTION',
-  OPTION_SAVE_SUCCESS: 'OPTION_SAVE_SUCCESS',
-  OPTION_SAVE_FAILURE: 'OPTION_SAVE_FAILURE',
-  DELETING_OPTION: 'DELETING_OPTION',
-  OPTION_DELETE_SUCCESS: 'OPTION_DELETE_SUCCESS',
-  OPTION_DELETE_FAILURE: 'OPTION_DELETE_FAILURE',
-  ADDING_OPTION: 'ADDING_OPTION',
-  OPTION_ADD_SUCCESS: 'OPTION_ADD_SUCCESS',
-  OPTION_ADD_FAILURE: 'OPTION_ADD_FAILURE'
-};
diff --git a/app/addons/config/api.js b/app/addons/config/api.js
deleted file mode 100644
index 5a9f17d..0000000
--- a/app/addons/config/api.js
+++ /dev/null
@@ -1,54 +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.
-
-import { get, put, deleteRequest } from '../../core/ajax';
-import Helpers from "../../helpers";
-
-export const configUrl = (node) => {
-  return Helpers.getServerUrl('/_node/' + node + '/_config');
-};
-
-export const fetchConfig = (node) => {
-  const url = configUrl(node);
-  return get(url).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return { sections: json };
-  });
-};
-
-export const optionUrl = (node, sectionName, optionName) => {
-  const endpointUrl = '/_node/' + node + '/_config/' +
-    encodeURIComponent(sectionName) + '/' + encodeURIComponent(optionName);
-  return Helpers.getServerUrl(endpointUrl);
-};
-
-export const saveConfigOption = (node, sectionName, optionName, value) => {
-  const url = optionUrl(node, sectionName, optionName);
-  return put(url, value).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason || json.error);
-    }
-    return json;
-  });
-};
-
-export const deleteConfigOption = (node, sectionName, optionName) => {
-  const url = optionUrl(node, sectionName, optionName);
-  return deleteRequest(url).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
diff --git a/app/addons/config/assets/less/config.less b/app/addons/config/assets/less/config.less
deleted file mode 100644
index 57c6cf3..0000000
--- a/app/addons/config/assets/less/config.less
+++ /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.
-
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.config-item {
-  height: 65px;
-
-  .config-value-form {
-    button {
-      margin-left: 8px;
-    }
-  }
-
-  .config-value-input {
-    width: 80%;
-    margin: 0;
-  }
-
-  .config-show-value,
-  .config-delete-value {
-    cursor: pointer;
-  }
-
-  .text-center {
-    text-align: center;
-  }
-
-  button { width: 7%;}
-  transition: background-color 100ms;
-}
-
-.config-item-trash:hover {
-  color: @dangerRed;
-}
-
-.config-item-deleting {
-  text-decoration: line-through;
-  text-decoration-color: red;
-}
-
-#config-trash {
-  width: 5%;
-}
-
-table.config {
-  thead th {
-    border-left: none;
-    border-bottom: 2px solid #999;
-  }
-  tr {
-    th, td {
-      vertical-align: middle;
-      .btn.btn-small {
-        padding: 10px 3px;
-      }
-    }
-  }
-}
-
-#add-option-button {
-  line-height: 40px;
-  cursor: pointer;
-  border-left: 1px solid #ccc;
-  border-right: none;
-  border-top: none;
-  border-bottom: none;
-  padding: 12px 14px;
-
-  &:hover {
-    transition: none;
-    text-decoration: none;
-    color: @linkColorHover;
-  }
-}
-
-#add-section-button {
-
-}
-
-.add-section-tray {
-  padding: 20px;
-  width: 300px;
-
-  &:before {
-    right: 138px;
-  }
-
-  input {
-    width: 100%;
-  }
-
-  form {
-    margin-bottom: 0px;
-  }
-
-  a.btn {
-    color: white;
-    background-color: @linkColor;
-    line-height: 1.5em;
-    border: 0px;
-    padding: 10px 10px 9px;
-    font-size: 14px;
-    .border-radius(5px);
-
-    &:hover {
-      background-color: #cbcbcb;
-      color: white;
-    }
-  }
-
-  .typeahead {
-    width: 260px;
-    margin-top: 0px;
-
-    a {
-      color: #ffffff;
-    }
-  }
-}
-
-#add-option-popover {
-  background-color: #333;
-  color: white;
-  padding: 20px;
-  border-radius: 0;
-  width: 300px;
-  max-width: none;
-  display: block;
-
-  .popover-content {
-    padding: 0;
-  }
-
-  .popover-title {
-    font-size: 16px;
-    padding: 0;
-    margin: 10px 0;
-    border: none;
-    display: block;
-    text-align: left;
-    color: #fff;
-    text-shadow: none;
-    height: auto;
-    line-height: 1em;
-    background-color: #333;
-  }
-
-  input {
-    width: 100%;
-  }
-
-  a.btn {
-    color: white;
-    background-color: @linkColor;
-    line-height: 1.5em;
-    border: 0;
-    padding: 10px 10px 9px;
-    font-size: 14px;
-    .border-radius(5px);
-
-    &:hover {
-      background-color: #cbcbcb;
-      color: white;
-    }
-  }
-
-  .arrow, .arrow::after {
-    border-bottom-color: #333 !important;
-  }
-
-}
-
-#add-option-popover::before {
-  display: none;
-}
-
-.config-warning-cluster-wrapper {
-  .config-warning-cluster-container {
-    margin-left: -50px;
-  }
-  margin: 40px auto;
-  width: 70%;
-  .fonticon-attention-circled {
-    font-size: 40px;
-  }
-  .config-warning-icon-container {
-    width: 50px;
-    margin-top: -5px;
-  }
-  .config-warning-other-text {
-    margin-left: 50px;
-  }
-}
-
-div.faux__config-breadcrumbs {
-  flex: 0 0 331px !important;
-}
diff --git a/app/addons/config/base.js b/app/addons/config/base.js
deleted file mode 100644
index ffa6cab..0000000
--- a/app/addons/config/base.js
+++ /dev/null
@@ -1,31 +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.
-
-import FauxtonAPI from '../../core/api';
-import Config from './routes';
-import reducers from './reducers';
-import './assets/less/config.less';
-
-Config.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    title: 'Configuration',
-    href: '#/_config',
-    icon: 'fonticon-cog',
-    className: 'config'
-  });
-};
-
-FauxtonAPI.addReducers({
-  config: reducers
-});
-
-export default Config;
diff --git a/app/addons/config/components/AddOptionButton.js b/app/addons/config/components/AddOptionButton.js
deleted file mode 100644
index ddaf479..0000000
--- a/app/addons/config/components/AddOptionButton.js
+++ /dev/null
@@ -1,129 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import {Button, Overlay, Popover} from 'react-bootstrap';
-
-export default class AddOptionButton extends React.Component {
-  static propTypes = {
-    onAdd: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = this.getInitialState();
-  }
-
-  getInitialState () {
-    return {
-      sectionName: '',
-      optionName: '',
-      value: '',
-      show: false
-    };
-  }
-
-  isInputValid () {
-    if (this.state.sectionName !== ''
-      && this.state.optionName !== ''
-      && this.state.value !== '') {
-      return true;
-    }
-
-    return false;
-  }
-
-  updateSectionName (event) {
-    this.setState({ sectionName: event.target.value });
-  }
-
-  updateOptionName (event) {
-    this.setState({ optionName: event.target.value });
-  }
-
-  updateValue (event) {
-    this.setState({ value: event.target.value });
-  }
-
-  reset () {
-    this.setState(this.getInitialState());
-  }
-
-  onAdd () {
-    if (this.isInputValid()) {
-      var option = {
-        sectionName: this.state.sectionName,
-        optionName: this.state.optionName,
-        value: this.state.value
-      };
-
-      this.setState({ show: false });
-      this.props.onAdd(option);
-    }
-  }
-
-  togglePopover () {
-    this.setState({ show: !this.state.show });
-  }
-
-  hidePopover () {
-    this.setState({ show: false });
-  }
-
-  getPopover () {
-    return (
-      <Popover className="tray" id="add-option-popover" title="Add Option">
-        <input
-          className="input-section-name"
-          onChange={this.updateSectionName.bind(this)}
-          type="text" name="section" placeholder="Section" autoComplete="off" autoFocus/>
-        <input
-          className="input-option-name"
-          onChange={this.updateOptionName.bind(this)}
-          type="text" name="name" placeholder="Name"/>
-        <input
-          className="input-value"
-          onChange={this.updateValue.bind(this)}
-          type="text" name="value" placeholder="Value"/>
-        <a
-          className="btn btn-create"
-          onClick={this.onAdd.bind(this)}>
-          Create
-        </a>
-      </Popover>
-    );
-  }
-
-  render () {
-    return (
-      <div id="add-option-panel">
-        <Button
-          id="add-option-button"
-          onClick={this.togglePopover.bind(this)}
-          ref={node => this.target = node}>
-          <i className="icon icon-plus header-icon"></i>
-          Add Option
-        </Button>
-
-        <Overlay
-          show={this.state.show}
-          onHide={this.hidePopover.bind(this)}
-          placement="bottom"
-          rootClose={true}
-          target={() => this.target}>
-          {this.getPopover()}
-        </Overlay>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/config/components/AddOptionButtonContainer.js b/app/addons/config/components/AddOptionButtonContainer.js
deleted file mode 100644
index 331969a..0000000
--- a/app/addons/config/components/AddOptionButtonContainer.js
+++ /dev/null
@@ -1,35 +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.
-
-import { connect } from 'react-redux';
-import * as Actions from '../actions';
-import AddOptionButton from './AddOptionButton';
-
-
-const mapStateToProps = () => {
-  return {};
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    onAdd: (options) => {
-      dispatch(Actions.addOption(ownProps.node, options));
-    }
-  };
-};
-
-const AddOptionButtonContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(AddOptionButton);
-
-export default AddOptionButtonContainer;
diff --git a/app/addons/config/components/ConfigOption.js b/app/addons/config/components/ConfigOption.js
deleted file mode 100644
index 858eeb5..0000000
--- a/app/addons/config/components/ConfigOption.js
+++ /dev/null
@@ -1,62 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ConfigOptionValue from './ConfigOptionValue';
-import ConfigOptionTrash from './ConfigOptionTrash';
-
-export default class ConfigOption extends React.Component {
-  static propTypes = {
-    option: PropTypes.object.isRequired,
-    saving: PropTypes.bool.isRequired,
-    onSave: PropTypes.func.isRequired,
-    onDelete: PropTypes.func.isRequired,
-    onEdit: PropTypes.func.isRequired,
-    onCancelEdit: PropTypes.func.isRequired
-  };
-
-  onSave = (value) => {
-    const option = this.props.option;
-    option.value = value;
-    this.props.onSave(option);
-  };
-
-  onDelete = () => {
-    this.props.onDelete(this.props.option);
-  };
-
-  onEdit = () => {
-    this.props.onEdit(this.props.option);
-  };
-
-  render() {
-    return (
-      <tr className="config-item">
-        <th>{this.props.option.header && this.props.option.sectionName}</th>
-        <td>{this.props.option.optionName}</td>
-        <ConfigOptionValue
-          value={this.props.option.value}
-          editing={this.props.option.editing}
-          saving={this.props.saving}
-          onSave={this.onSave}
-          onEdit={this.onEdit}
-          onCancelEdit={this.props.onCancelEdit}
-        />
-        <ConfigOptionTrash
-          optionName={this.props.option.optionName}
-          sectionName={this.props.option.sectionName}
-          onDelete={this.onDelete}/>
-      </tr>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigOptionTrash.js b/app/addons/config/components/ConfigOptionTrash.js
deleted file mode 100644
index a37f031..0000000
--- a/app/addons/config/components/ConfigOptionTrash.js
+++ /dev/null
@@ -1,56 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonComponents from '../../fauxton/components';
-
-export default class ConfigOptionTrash extends React.Component {
-  constructor (props) {
-    super(props);
-    this.onDelete = this.onDelete.bind(this);
-    this.showModal = this.showModal.bind(this);
-    this.hideModal = this.hideModal.bind(this);
-    this.state = { show: false };
-  }
-
-  static propTypes = {
-    sectionName: PropTypes.string.isRequired,
-    optionName: PropTypes.string.isRequired,
-    onDelete: PropTypes.func.isRequired
-  };
-
-  onDelete = () => {
-    this.props.onDelete();
-  };
-
-  showModal = () => {
-    this.setState({ show: true });
-  };
-
-  hideModal = () => {
-    this.setState({ show: false });
-  };
-
-  render() {
-    return (
-      <td className="text-center config-item-trash config-delete-value">
-        <i className="icon icon-trash" onClick={this.showModal}></i>
-        <FauxtonComponents.ConfirmationModal
-          text={`Are you sure you want to delete ${this.props.sectionName}/${this.props.optionName}?`}
-          onClose={this.hideModal}
-          onSubmit={this.onDelete}
-          visible={this.state.show}/>
-      </td>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigOptionValue.js b/app/addons/config/components/ConfigOptionValue.js
deleted file mode 100644
index dc46aaf..0000000
--- a/app/addons/config/components/ConfigOptionValue.js
+++ /dev/null
@@ -1,83 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class ConfigOptionValue extends React.Component {
-  static propTypes = {
-    value: PropTypes.string.isRequired,
-    editing: PropTypes.bool.isRequired,
-    onEdit: PropTypes.func.isRequired,
-    onCancelEdit: PropTypes.func.isRequired,
-    onSave: PropTypes.func.isRequired
-  };
-
-  state = {
-    value: this.props.value
-  };
-
-  onChange = (event) => {
-    this.setState({ value: event.target.value });
-  };
-
-  onSave = () => {
-    if (this.state.value !== this.props.value) {
-      this.props.onSave(this.state.value);
-    } else {
-      this.props.onCancelEdit();
-    }
-  };
-
-  getButtons = () => {
-    if (this.props.saving) {
-      return null;
-    }
-    return (
-      <span>
-        <button
-          className="btn btn-primary fonticon-ok-circled btn-small btn-config-save"
-          onClick={this.onSave.bind(this)}
-        />
-        <button
-          className="btn fonticon-cancel-circled btn-small btn-config-cancel"
-          onClick={this.props.onCancelEdit}
-        />
-      </span>
-    );
-
-  };
-
-  render() {
-    if (this.props.editing) {
-      return (
-        <td>
-          <div className="config-value-form">
-            <input
-              onChange={this.onChange.bind(this)}
-              defaultValue={this.props.value}
-              disabled={this.props.saving}
-              autoFocus type="text" className="config-value-input"
-            />
-            {this.getButtons()}
-          </div>
-        </td>
-      );
-    }
-    return (
-      <td className="config-show-value" onClick={this.props.onEdit}>
-        {this.props.value}
-      </td>
-    );
-
-  }
-}
diff --git a/app/addons/config/components/ConfigTable.js b/app/addons/config/components/ConfigTable.js
deleted file mode 100644
index 5e7a57d..0000000
--- a/app/addons/config/components/ConfigTable.js
+++ /dev/null
@@ -1,66 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ConfigOption from './ConfigOption';
-
-export default class ConfigTable extends React.Component {
-  static propTypes = {
-    options: PropTypes.arrayOf(PropTypes.shape({
-      editing: PropTypes.bool.isRequired,
-      header: PropTypes.bool,
-      optionName: PropTypes.string.isRequired,
-      sectionName: PropTypes.string.isRequired,
-      value: PropTypes.string
-    })).isRequired,
-    saving: PropTypes.bool.isRequired,
-    onDeleteOption: PropTypes.func.isRequired,
-    onEditOption: PropTypes.func.isRequired,
-    onSaveOption: PropTypes.func.isRequired,
-    onCancelEdit: PropTypes.func.isRequired
-  };
-
-  createOptions = () => {
-    return _.map(this.props.options, (option) => (
-      <ConfigOption
-        option={option}
-        saving={this.props.saving}
-        onDelete={this.props.onDeleteOption}
-        onSave={this.props.onSaveOption}
-        onEdit={this.props.onEditOption}
-        onCancelEdit={this.props.onCancelEdit}
-        key={`${option.sectionName}/${option.optionName}`}
-      />
-    ));
-  };
-
-  render() {
-    const options = this.createOptions();
-
-    return (
-      <table className="config table table-striped table-bordered">
-        <thead>
-          <tr>
-            <th id="config-section" width="22%">Section</th>
-            <th id="config-option" width="22%">Option</th>
-            <th id="config-value">Value</th>
-            <th id="config-trash"></th>
-          </tr>
-        </thead>
-        <tbody>
-          {options}
-        </tbody>
-      </table>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigTableContainer.js b/app/addons/config/components/ConfigTableContainer.js
deleted file mode 100644
index 34750cf..0000000
--- a/app/addons/config/components/ConfigTableContainer.js
+++ /dev/null
@@ -1,58 +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.
-
-import { connect } from 'react-redux';
-import ConfigTableScreen from './ConfigTableScreen';
-import * as Actions from '../actions';
-import { options } from '../reducers';
-
-const mapStateToProps = ({ config }, ownProps) => {
-  return {
-    node: ownProps.node,
-    options: options(config),
-    loading: config.loading,
-    saving: config.saving,
-    editSectionName: config.editSectionName,
-    editOptionName: config.editOptionName,
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    fetchAndEditConfig: (node) => {
-      dispatch(Actions.fetchAndEditConfig(node));
-    },
-
-    saveOption: (node, options) => {
-      dispatch(Actions.saveOption(node, options));
-    },
-
-    deleteOption: (node, options) => {
-      dispatch(Actions.deleteOption(node, options));
-    },
-
-    editOption: (options) => {
-      dispatch(Actions.editOption(options));
-    },
-
-    cancelEdit: (options) => {
-      dispatch(Actions.cancelEdit(options));
-    }
-  };
-};
-
-const ConfigTableContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ConfigTableScreen);
-
-export default ConfigTableContainer;
diff --git a/app/addons/config/components/ConfigTableScreen.js b/app/addons/config/components/ConfigTableScreen.js
deleted file mode 100644
index de4971e..0000000
--- a/app/addons/config/components/ConfigTableScreen.js
+++ /dev/null
@@ -1,69 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Components from '../../components/react-components';
-import ConfigTable from './ConfigTable';
-
-export default class ConfigTableScreen extends React.Component {
-  static propTypes = {
-    options: PropTypes.array.isRequired,
-    loading: PropTypes.bool.isRequired,
-    saving: PropTypes.bool.isRequired,
-    saveOption: PropTypes.func.isRequired,
-    deleteOption: PropTypes.func.isRequired,
-    editOption: PropTypes.func.isRequired,
-    cancelEdit: PropTypes.func.isRequired,
-    fetchAndEditConfig: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.props.fetchAndEditConfig(this.props.node);
-  }
-
-  saveOption = (option) => {
-    this.props.saveOption(this.props.node, option);
-  };
-
-  deleteOption = (option) => {
-    this.props.deleteOption(this.props.node, option);
-  };
-
-  editOption = (option) => {
-    this.props.editOption(option);
-  };
-
-  cancelEdit = () => {
-    this.props.cancelEdit();
-  };
-
-  render() {
-    if (this.props.loading) {
-      return (
-        <div className="view">
-          <Components.LoadLines />
-        </div>
-      );
-    }
-    return (
-      <ConfigTable
-        saving={this.props.saving}
-        onDeleteOption={this.deleteOption}
-        onSaveOption={this.saveOption}
-        onEditOption={this.editOption}
-        onCancelEdit={this.cancelEdit}
-        options={this.props.options}/>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigTabs.js b/app/addons/config/components/ConfigTabs.js
deleted file mode 100644
index beab5ee..0000000
--- a/app/addons/config/components/ConfigTabs.js
+++ /dev/null
@@ -1,51 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-const ConfigTabs = ({sidebarItems, selectedTab}) => {
-  const tabItems = sidebarItems.map(item => {
-    return <TabItem
-      key={item.title}
-      active={selectedTab === item.title}
-      title={item.title}
-      link={item.link}
-    />;
-  });
-  return (
-    <nav className="sidenav">
-      <ul className="nav nav-list">
-        {tabItems}
-      </ul>
-    </nav>
-  );
-};
-
-const TabItem = ({active, link, title}) => {
-  return (
-    <li className={active ? 'active' : ''}>
-      <a href={`#${link}`}>
-        {title}
-      </a>
-    </li>
-  );
-};
-
-TabItem.propTypes = {
-  active: PropTypes.bool.isRequired,
-  link: PropTypes.string.isRequired,
-  icon: PropTypes.string,
-  title: PropTypes.string.isRequired
-};
-
-export default ConfigTabs;
diff --git a/app/addons/config/layout.js b/app/addons/config/layout.js
deleted file mode 100644
index 7774e06..0000000
--- a/app/addons/config/layout.js
+++ /dev/null
@@ -1,84 +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.
-
-import React from 'react';
-import AddOptionButtonContainer from './components/AddOptionButtonContainer';
-import ConfigTableContainer from './components/ConfigTableContainer';
-import ConfigTabs from './components/ConfigTabs';
-import CORSComponents from '../cors/components';
-import { Breadcrumbs } from '../components/header-breadcrumbs';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import { ApiBarWrapper } from '../components/layouts';
-
-export const ConfigHeader = ({ node, crumbs, docURL, endpoint }) => {
-  return (
-    <header className="two-panel-header">
-      <div className="flex-layout flex-row">
-        <div id='breadcrumbs' className="faux__config-breadcrumbs">
-          <Breadcrumbs crumbs={crumbs} />
-        </div>
-        <div className="right-header-wrapper flex-layout flex-row flex-body">
-          <div id="react-headerbar" className="flex-body"> </div>
-          <div id="right-header" className="flex-fill">
-            <AddOptionButtonContainer node={node} />
-          </div>
-          <ApiBarWrapper docURL={docURL} endpoint={endpoint} />
-          <div id="notification-center-btn" className="flex-fill">
-            <NotificationCenterButton />
-          </div>
-        </div>
-      </div>
-    </header>
-  );
-};
-
-export const ConfigLayout = ({ showCors, docURL, node, endpoint, crumbs }) => {
-  const sidebarItems = [
-    {
-      title: 'Main config',
-      link: '_config/' + node
-    },
-    {
-      title: 'CORS',
-      link: '_config/' + node + '/cors'
-    }
-  ];
-  const selectedTab = showCors ? 'CORS' : 'Main config';
-  const content = showCors ? <CORSComponents.CORSContainer node={node} url={endpoint} /> : <ConfigTableContainer node={node} />;
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <ConfigHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        node={node}
-        crumbs={crumbs}
-      />
-      <div className="with-sidebar tabs-with-sidebar content-area">
-        <aside id="sidebar-content" className="scrollable">
-          <ConfigTabs
-            sidebarItems={sidebarItems}
-            selectedTab={selectedTab}
-          />
-        </aside>
-        <section id="dashboard-content" className="flex-layout flex-col">
-          <div id="dashboard-upper-content"></div>
-          <div id="dashboard-lower-content" className="flex-body">
-            {content}
-          </div>
-          <div id="footer"></div>
-        </section>
-      </div>
-    </div>
-  );
-};
-
-export default ConfigLayout;
diff --git a/app/addons/config/reducers.js b/app/addons/config/reducers.js
deleted file mode 100644
index 4952fb1..0000000
--- a/app/addons/config/reducers.js
+++ /dev/null
@@ -1,172 +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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  sections: {},
-  loading: true,
-  editSectionName: null,
-  editOptionName: null,
-  saving: false
-};
-
-function saveOption(state, { sectionName, optionName, value }) {
-  const newSections = {
-    ...state.sections
-  };
-
-  if (!newSections[sectionName]) {
-    newSections[sectionName] = {};
-  }
-
-  newSections[sectionName][optionName] = value || true;
-  return newSections;
-}
-
-function deleteOption(state, { sectionName, optionName }) {
-  const newSections = {
-    ...state.sections
-  };
-
-  if (newSections[sectionName]) {
-    // copy object
-    newSections[sectionName] = {...newSections[sectionName]};
-    delete newSections[sectionName][optionName];
-
-    if (Object.keys(newSections[sectionName]).length == 0) {
-      delete newSections[sectionName];
-    }
-  }
-  return newSections;
-}
-
-export function options(state) {
-  const sections = Object.keys(state.sections).map(sectionName => {
-    return {
-      sectionName,
-      options: mapSection(state, sectionName)
-    };
-  });
-  const sortedSections = sections.sort((a, b) => {
-    if (a.sectionName < b.sectionName) return -1;
-    else if (a.sectionName > b.sectionName) return 1;
-    return 0;
-  });
-  // flatten the list of options
-  return sortedSections.map(s => s.options).reduce((acc, options) => {
-    return acc.concat(options);
-  }, []);
-}
-
-function mapSection(state, sectionName) {
-  const section = state.sections[sectionName];
-  const options = Object.keys(section).map(optionName => {
-    return {
-      editing: isEditing(state, sectionName, optionName),
-      sectionName,
-      optionName,
-      value: section[optionName]
-    };
-  });
-  const sortedOptions = options.sort((a, b) => {
-    if (a.optionName < b.optionName) return -1;
-    else if (a.optionName > b.optionName) return 1;
-    return 0;
-  });
-  if (sortedOptions.length > 0) {
-    sortedOptions[0].header = true;
-  }
-  return sortedOptions;
-}
-
-function isEditing(state, sn, on) {
-  return sn === state.editSectionName && on === state.editOptionName;
-}
-
-export default function config(state = initialState, action) {
-  const { options } = action;
-
-  switch (action.type) {
-    case ActionTypes.EDIT_CONFIG:
-      return {
-        ...state,
-        sections: options.sections,
-        loading: false,
-        editOptionName: null,
-        editSectionName: null
-      };
-
-    case ActionTypes.EDIT_OPTION:
-      return {
-        ...state,
-        editSectionName: options.sectionName,
-        editOptionName: options.optionName
-      };
-
-    case ActionTypes.LOADING_CONFIG:
-      return {
-        ...state,
-        loading: true
-      };
-
-    case ActionTypes.CANCEL_EDIT:
-      return {
-        ...state,
-        editOptionName: null,
-        editSectionName: null
-      };
-
-    case ActionTypes.SAVING_OPTION:
-      return {
-        ...state,
-        saving: true
-      };
-
-    case ActionTypes.OPTION_SAVE_SUCCESS:
-      return {
-        ...state,
-        editOptionName: null,
-        editSectionName: null,
-        sections: saveOption(state, options),
-        saving: false
-      };
-
-    case ActionTypes.OPTION_SAVE_FAILURE:
-      return {
-        ...state,
-        saving: false
-      };
-
-    case ActionTypes.OPTION_ADD_SUCCESS:
-      return {
-        ...state,
-        sections: saveOption(state, options),
-        saving: false
-      };
-
-    case ActionTypes.OPTION_ADD_FAILURE:
-      return {
-        ...state,
-        saving: false
-      };
-
-    case ActionTypes.OPTION_DELETE_SUCCESS:
-      return {
-        ...state,
-        sections: deleteOption(state, options)
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/config/routes.js b/app/addons/config/routes.js
deleted file mode 100644
index fbc6220..0000000
--- a/app/addons/config/routes.js
+++ /dev/null
@@ -1,72 +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.
-
-import React from 'react';
-import FauxtonAPI from '../../core/api';
-import ClusterActions from '../cluster/actions';
-import * as ConfigAPI from './api';
-import Layout from './layout';
-
-const ConfigDisabledRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Configuration',
-
-  routes: {
-    '_config': 'checkNodes',
-  },
-
-  crumbs: [
-    { name: 'Config disabled' }
-  ],
-
-  checkNodes: function () {
-    ClusterActions.navigateToNodeBasedOnNodeCount('/_config/');
-  }
-});
-
-
-const ConfigPerNodeRouteObject = FauxtonAPI.RouteObject.extend({
-  roles: ['_admin'],
-  selectedHeader: 'Configuration',
-
-  routes: {
-    '_config/:node': 'configForNode',
-    '_config/:node/cors': 'configCorsForNode'
-  },
-
-  initialize: function () {
-  },
-
-  configForNode: function (node) {
-    return <Layout
-      node={node}
-      docURL={FauxtonAPI.constants.DOC_URLS.CONFIG}
-      endpoint={ConfigAPI.configUrl(node)}
-      crumbs={[{ name: 'Config' }]}
-      showCors={false}
-    />;
-  },
-
-  configCorsForNode: function (node) {
-    return <Layout
-      node={node}
-      docURL={FauxtonAPI.constants.DOC_URLS.CONFIG}
-      endpoint={ConfigAPI.configUrl(node)}
-      crumbs={[{ name: 'Config' }]}
-      showCors={true}
-    />;
-  }
-});
-
-const Config = FauxtonAPI.addon();
-Config.RouteObjects = [ConfigPerNodeRouteObject, ConfigDisabledRouteObject];
-
-export default Config;
diff --git a/app/addons/cors/__tests__/actions.test.js b/app/addons/cors/__tests__/actions.test.js
deleted file mode 100644
index 1ad1034..0000000
--- a/app/addons/cors/__tests__/actions.test.js
+++ /dev/null
@@ -1,115 +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.
-import utils from "../../../../test/mocha/testUtils";
-import FauxtonAPI from "../../../core/api";
-import Actions from "../actions";
-import * as CorsAPI from "../api";
-import sinon from "sinon";
-
-const restore = utils.restore;
-
-describe('CORS actions', () => {
-
-  describe('save', () => {
-
-    const localNode = 'node2@127.0.0.1';
-    const baseURL = 'http://localhost:8000/#_config/couchdb@localhost/cors';
-    const dispatch = sinon.stub();
-    const spyUpdateEnableCorsToHttpd = sinon.stub(CorsAPI, 'updateEnableCorsToHttpd');
-    const spyUpdateCorsOrigins = sinon.stub(CorsAPI, 'updateCorsOrigins');
-    const spyUpdateCorsCredentials = sinon.stub(CorsAPI, 'updateCorsCredentials');
-    const spyUpdateCorsHeaders = sinon.stub(CorsAPI, 'updateCorsHeaders');
-    const spyUpdateCorsMethods = sinon.stub(CorsAPI, 'updateCorsMethods');
-
-    afterEach(() => {
-      restore(FauxtonAPI.Promise.all);
-      restore(FauxtonAPI.addNotification);
-
-      spyUpdateEnableCorsToHttpd.reset();
-      spyUpdateCorsOrigins.reset();
-      spyUpdateCorsCredentials.reset();
-      spyUpdateCorsHeaders.reset();
-      spyUpdateCorsMethods.reset();
-    });
-
-    it('should save enable_cors to httpd', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: false,
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateEnableCorsToHttpd.calledWith(baseURL, localNode, false)).toBeTruthy();
-    });
-
-    it('does not save CORS origins if CORS is not enabled', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: false,
-        origins: ['*'],
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateCorsOrigins.called).toBeFalsy();
-    });
-
-    it('saves CORS origins', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: true,
-        origins: ['*'],
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateCorsOrigins.calledWith(baseURL, localNode, '*')).toBeTruthy();
-    });
-
-    it('saves CORS credentials, headers and methods', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: true,
-        origins: ['https://testdomain.com'],
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateCorsCredentials.calledOnce).toBeTruthy();
-      expect(spyUpdateCorsHeaders.calledOnce).toBeTruthy();
-      expect(spyUpdateCorsMethods.calledOnce).toBeTruthy();
-    });
-
-    it('shows notification on successful save', () => {
-      const stub = sinon.stub(FauxtonAPI.Promise, 'all');
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-      const promise = FauxtonAPI.Promise.resolve();
-      stub.returns(promise);
-
-      return Actions.saveCors(baseURL, {
-        enableCors: true,
-        origins: ['https://testdomain.com'],
-        node: localNode
-      })(dispatch).then(() => {
-        expect(spyAddNotification.called).toBeTruthy();
-      });
-    });
-  });
-
-  describe('Sanitize origins', () => {
-
-    it('joins array into string', () => {
-      var origins = ['https://hello.com', 'https://hello2.com'];
-
-      expect(Actions.sanitizeOrigins(origins)).toEqual(origins.join(','));
-    });
-
-    it('returns empty string for no origins', () => {
-      var origins = [];
-
-      expect(Actions.sanitizeOrigins(origins)).toEqual('');
-    });
-  });
-});
diff --git a/app/addons/cors/__tests__/components.test.js b/app/addons/cors/__tests__/components.test.js
deleted file mode 100644
index b26368c..0000000
--- a/app/addons/cors/__tests__/components.test.js
+++ /dev/null
@@ -1,266 +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.
-import FauxtonAPI from "../../../core/api";
-import * as Helpers from "../helpers";
-import Views from "../components";
-import utils from "../../../../test/mocha/testUtils";
-import React from "react";
-import sinon from "sinon";
-import { shallow, mount } from 'enzyme';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-const { restore } = utils;
-
-describe('CORS Components', () => {
-
-  describe('CORSContainer tests', () => {
-
-    afterEach(() => {
-      restore(window.confirm);
-    });
-
-    it('confirms user change from restricted origin to disabled cors', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = shallow(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={['https://localhost']}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-
-      wrapper.find('.enable-disable.btn').simulate('click');
-      sinon.assert.calledOnce(spy);
-    });
-
-    it('does not confirm user change to disable cors when restricted origins are empty', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = shallow(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={true}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-      wrapper.find('.enable-disable.btn').simulate('click');
-      sinon.assert.notCalled(spy);
-    });
-
-    it('confirms user change when moving from selected origins to all origins', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = mount(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={['http://localhost']}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-      wrapper.find('input').at(0).simulate('change', { target: { checked: true, value: 'all' } });
-      expect(spy.calledOnce).toBeTruthy();
-    });
-
-    it('does not confirm all origins change if selected origins are emtpy', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = mount(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-      wrapper.find('input').at(0).simulate('change', { target: { checked: true, value: 'all' } });
-      expect(spy.calledOnce).toBeFalsy();
-    });
-
-    it('shows loading bars', () => {
-      const wrapper = mount(<Views.CORSScreen
-        isLoading={true}
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-
-      expect(wrapper.find('.loading-lines').exists()).toBeTruthy();
-    });
-
-    it('hides loading bars', () => {
-      const wrapper = mount(<Views.CORSScreen
-        isLoading={false}
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-
-      expect(wrapper.find('.loading-lines').exists()).toBe(false);
-    });
-  });
-
-  describe('OriginInput', () => {
-    const newOrigin = 'http://new-site.com';
-
-    it('calls validates each domain', () => {
-      const spyValidateDomain = sinon.spy(Helpers, 'validateDomain');
-      const wrapper = shallow(<Views.OriginInput isVisible={true} addOrigin={sinon.stub()} />);
-
-      wrapper.find('input').simulate('change', { target: { value: newOrigin } });
-      wrapper.find('.btn').simulate('click', { preventDefault: sinon.stub() });
-      expect(spyValidateDomain.called).toBeTruthy();
-    });
-
-    it('calls addOrigin on add click with valid domain', () => {
-      const addOriginSpy = sinon.spy();
-      const wrapper = mount(<Views.OriginInput isVisible={true} addOrigin={addOriginSpy} />);
-
-      wrapper.find('input').simulate('change', { target: { value: newOrigin } });
-      wrapper.find('.btn').simulate('click', { preventDefault: sinon.stub() });
-      expect(addOriginSpy.calledWith(newOrigin)).toBeTruthy();
-    });
-
-    it('shows notification if origin is not valid', () => {
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-      const wrapper = shallow(<Views.OriginInput isVisible={true} addOrigin={sinon.stub()} />);
-
-      wrapper.find('input').simulate('change', { target: { value: 'badOrigin' } });
-      wrapper.find('.btn').simulate('click', { preventDefault: sinon.stub() });
-      expect(spyAddNotification.calledOnce).toBeTruthy();
-    });
-  });
-
-  describe('Origins', () => {
-    const spyChangeOrigin = sinon.spy();
-
-    afterEach(() => {
-      spyChangeOrigin.resetHistory();
-    });
-
-    it('calls changeOrigin() when you switch from "Select List of Origins" to "Allow All Origins"', () => {
-      const wrapper = shallow(<Views.Origins corsEnabled={true} isAllOrigins={false} originChange={spyChangeOrigin} />);
-
-      wrapper.find('input[value="all"]').simulate('change', { target: { checked: true, value: 'all' } });
-      expect(spyChangeOrigin.calledWith(true)).toBeTruthy();
-    });
-
-    it('calls changeOrigin() when you switch from "Allow All Origins" to "Select List of Origins"', () => {
-      const wrapper = shallow(<Views.Origins corsEnabled={true} isAllOrigins={true} originChange={spyChangeOrigin} />);
-
-      wrapper.find('input[value="selected"]').simulate('change', { target: { checked: true, value: 'selected' } });
-      expect(spyChangeOrigin.calledWith(false)).toBeTruthy();
-    });
-  });
-
-  describe('OriginRow', () => {
-    const spyUpdateOrigin = sinon.spy();
-    const spyDeleteOrigin = sinon.spy();
-    let origin;
-
-    beforeEach(() => {
-      origin = 'https://hello.com';
-    });
-
-    afterEach(() => {
-      spyUpdateOrigin.resetHistory();
-      spyDeleteOrigin.resetHistory();
-    });
-
-    it('should call deleteOrigin on delete', () => {
-      const wrapper = mount(<Views.OriginTable
-        updateOrigin={spyUpdateOrigin}
-        deleteOrigin={spyDeleteOrigin}
-        isVisible={true}
-        origins={[origin]} />);
-
-      wrapper.find('.fonticon-trash').simulate('click', { preventDefault: sinon.stub() });
-      expect(spyDeleteOrigin.calledOnce).toBeTruthy();
-    });
-
-    it('does not throw error if origins is undefined', () => {
-      mount(<Views.OriginTable
-        updateOrigin={spyUpdateOrigin}
-        deleteOrigin={spyDeleteOrigin}
-        isVisible={true}
-        origins={undefined} />);
-    });
-
-    it('should change origin to input on edit click, then hide input on 2nd click', () => {
-      const wrapper = mount(<Views.OriginTable
-        updateOrigin={spyUpdateOrigin}
-        deleteOrigin={spyDeleteOrigin}
-        isVisible={true}
-        origins={[origin]} />);
-
-      // Text input appears after clicking Edit
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      expect(wrapper.find('input').exists()).toBeTruthy();
-
-      // Text input is hidden after clicking Edit for the 2nd time
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      expect(wrapper.find('input').exists()).toBe(false);
-    });
-
-    it('should update origin on update clicked', () => {
-      const updatedOrigin = 'https://updated-origin.com';
-      const wrapper = mount(
-        <Views.OriginTable
-          updateOrigin={spyUpdateOrigin}
-          deleteOrigin={spyDeleteOrigin}
-          isVisible={true}
-          origins={[origin]} />
-      );
-
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      wrapper.find('input').simulate('change', { target: { value: updatedOrigin } });
-      wrapper.find('.btn').at(0).simulate('click', { preventDefault: sinon.stub() });
-      expect(spyUpdateOrigin.calledWith(updatedOrigin)).toBeTruthy();
-    });
-
-    it('should not update origin on update clicked with bad origin', () => {
-      const updatedOrigin = 'updated-origin';
-      const wrapper = mount(
-        <Views.OriginTable
-          updateOrigin={spyUpdateOrigin}
-          deleteOrigin={spyDeleteOrigin}
-          isVisible={true}
-          origins={[origin]} />
-      );
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      wrapper.find('input').simulate('change', { target: { value: updatedOrigin } });
-      wrapper.find('.btn').at(0).simulate('click', { preventDefault: sinon.stub() });
-      expect(spyUpdateOrigin.calledWith(updatedOrigin)).toBe(false);
-    });
-
-  });
-
-});
diff --git a/app/addons/cors/__tests__/helpers.test.js b/app/addons/cors/__tests__/helpers.test.js
deleted file mode 100644
index b436879..0000000
--- a/app/addons/cors/__tests__/helpers.test.js
+++ /dev/null
@@ -1,52 +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.
-
-import * as Helpers from "../helpers";
-
-describe('CORS helper functions', () => {
-
-  it('allows valid domains', () => {
-    const urls = [
-      'http://something.com',
-      'https://a.ca',
-      'https://something.com:8000',
-      'https://www.some-valid-domain.com:80',
-      'http://localhost',
-      'https://localhost',
-      'http://192.168.1.113',
-      'http://192.168.1.113:1337'
-    ];
-
-    urls.forEach((url) => {
-      expect(Helpers.validateCORSDomain(url)).toBe(true);
-    });
-  });
-
-  it('fails on non http/https domains', () => {
-    const urls = [
-      'whoahnellythisaintright',
-      'ftp://site.com',
-      'https://',
-      'http://'
-    ];
-    _.each(urls, (url) => {
-      expect(Helpers.validateCORSDomain(url)).toBe(false);
-    });
-  });
-
-  it('normalizes common cases, like accidentally added subfolders', () => {
-    expect('https://foo.com').toBe(Helpers.normalizeUrls('https://foo.com/blerg'));
-    expect('https://192.168.1.113').toBe(Helpers.normalizeUrls('https://192.168.1.113/blerg'));
-    expect('https://foo.com:1337').toBe(Helpers.normalizeUrls('https://foo.com:1337/blerg'));
-    expect('https://foo.com').toBe(Helpers.normalizeUrls('https://foo.com'));
-  });
-});
diff --git a/app/addons/cors/actions.js b/app/addons/cors/actions.js
deleted file mode 100644
index 6fa4b00..0000000
--- a/app/addons/cors/actions.js
+++ /dev/null
@@ -1,129 +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.
-
-import FauxtonAPI from "../../core/api";
-import ActionTypes from "./actiontypes";
-import * as CorsAPI from "./api";
-
-const fetchAndLoadCORSOptions = (url, node) => (dispatch) => {
-  const fetchCors = CorsAPI.fetchCORSConfig(url);
-  const fetchHttp = CorsAPI.fetchHttpdConfig(url);
-
-  FauxtonAPI.Promise.join(fetchCors, fetchHttp, (corsConfig, httpdConfig) => {
-    const loadOptions = loadCORSOptions({
-      origins: corsConfig.origins,
-      corsEnabled: httpdConfig.enable_cors === 'true',
-      node: node
-    });
-    dispatch(loadOptions);
-  }).catch((error) => {
-    FauxtonAPI.addNotification({
-      msg: 'Could not load CORS settings.  ' + errorReason(error),
-      type: 'error'
-    });
-  });
-};
-
-const showLoadingBars = () => {
-  return {
-    type: ActionTypes.CORS_SET_IS_LOADING,
-    isLoading: true
-  };
-};
-
-const hideLoadingBars = () => {
-  return {
-    type: ActionTypes.CORS_SET_IS_LOADING,
-    isLoading: false
-  };
-};
-
-const loadCORSOptions = (options) => {
-  return {
-    type: ActionTypes.EDIT_CORS,
-    options: options,
-    isLoading: false
-  };
-};
-
-const showDomainDeleteConfirmation = (domain) => {
-  return {
-    type: ActionTypes.CORS_SHOW_DELETE_DOMAIN_MODAL,
-    domainToDelete: domain
-  };
-};
-
-const hideDomainDeleteConfirmation = () => {
-  return {
-    type: ActionTypes.CORS_HIDE_DELETE_DOMAIN_MODAL
-  };
-};
-
-const saveCors = (url, options) => (dispatch) => {
-  const promises = [];
-
-  promises.push(CorsAPI.updateEnableCorsToHttpd(url, options.node, options.corsEnabled));
-  if (options.corsEnabled) {
-    promises.push(CorsAPI.updateCorsOrigins(url, options.node, sanitizeOrigins(options.origins)));
-    promises.push(CorsAPI.updateCorsCredentials(url, options.node));
-    promises.push(CorsAPI.updateCorsHeaders(url, options.node));
-    promises.push(CorsAPI.updateCorsMethods(url, options.node));
-  }
-
-  return FauxtonAPI.Promise.all(promises).then(() => {
-    FauxtonAPI.addNotification({
-      msg: 'CORS settings updated.',
-      type: 'success',
-      clear: true
-    });
-    dispatch(loadCORSOptions(options));
-  }).catch((error) => {
-    FauxtonAPI.addNotification({
-      msg: 'Error! Could not save your CORS settings. Please try again. ' + errorReason(error),
-      type: 'error',
-      clear: true
-    });
-    dispatch(hideDomainDeleteConfirmation());
-    dispatch(hideLoadingBars());
-  });
-};
-
-const errorReason = (error) => {
-  return 'Reason: ' + ((error && error.message) || 'n/a');
-};
-
-const sanitizeOrigins = (origins) => {
-  if (_.isEmpty(origins)) {
-    return '';
-  }
-
-  return origins.join(',');
-};
-
-const Actions = {
-  fetchAndLoadCORSOptions,
-  showLoadingBars,
-  hideLoadingBars,
-  showDomainDeleteConfirmation,
-  hideDomainDeleteConfirmation,
-  loadCORSOptions,
-  sanitizeOrigins,
-  saveCors,
-  overrideFetchAndLoadCORSOptions: (newFn) => {
-    Actions.fetchAndLoadCORSOptions = newFn;
-  },
-  overrideSaveCors: (newFn) => {
-    Actions.saveCors = newFn;
-  }
-};
-
-export default Actions;
diff --git a/app/addons/cors/actiontypes.js b/app/addons/cors/actiontypes.js
deleted file mode 100644
index 63a58e4..0000000
--- a/app/addons/cors/actiontypes.js
+++ /dev/null
@@ -1,18 +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.
-
-export default {
-  EDIT_CORS: 'EDIT_CORS',
-  CORS_SET_IS_LOADING: 'CORS_SET_IS_LOADING',
-  CORS_SHOW_DELETE_DOMAIN_MODAL: 'CORS_SHOW_DELETE_DOMAIN_MODAL',
-  CORS_HIDE_DELETE_DOMAIN_MODAL: 'CORS_HIDE_DELETE_DOMAIN_MODAL'
-};
diff --git a/app/addons/cors/api.js b/app/addons/cors/api.js
deleted file mode 100644
index 3d04c60..0000000
--- a/app/addons/cors/api.js
+++ /dev/null
@@ -1,82 +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.
-
-import {get, put} from '../../core/ajax';
-
-export const fetchCORSConfig = (baseURL) => {
-  const configURL = baseURL + '/cors';
-  return get(configURL).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-
-    const origins = !json.origins ? [] : json.origins.split(',');
-    return {
-      origins: origins,
-      methods: json.methods,
-      credentials: json.credentials,
-      headers: json.headers
-    };
-  });
-};
-
-export const fetchHttpdConfig = (baseURL) => {
-  const configURL = baseURL + '/httpd';
-  return get(configURL).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
-
-export const updateEnableCorsToHttpd = (baseURL, node, enableCors) => {
-  if (!node) {
-    throw new Error('node not set');
-  }
-  const configURL = baseURL + '/httpd/enable_cors';
-  return put(configURL, enableCors.toString())    .then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
-
-export const updateCorsOrigins = (baseURL, node, origins) => {
-  return updateCorsProperty(baseURL, node, 'origins', origins);
-};
-
-export const updateCorsCredentials = (baseURL, node) => {
-  return updateCorsProperty(baseURL, node, 'credentials', 'true');
-};
-
-export const updateCorsHeaders = (baseURL, node) => {
-  return updateCorsProperty(baseURL, node, 'headers', 'accept, authorization, content-type, origin, referer');
-};
-
-export const updateCorsMethods = (baseURL, node) => {
-  return updateCorsProperty(baseURL, node, 'methods', 'GET, PUT, POST, HEAD, DELETE');
-};
-
-const updateCorsProperty = (baseURL, node, propName, propValue) => {
-  if (!node) {
-    throw new Error('node not set');
-  }
-  const configURL = baseURL + '/cors/' + propName;
-  return put(configURL, propValue).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
diff --git a/app/addons/cors/assets/less/cors.less b/app/addons/cors/assets/less/cors.less
deleted file mode 100644
index c9aaf45..0000000
--- a/app/addons/cors/assets/less/cors.less
+++ /dev/null
@@ -1,146 +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.
-
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.cors-page {
-  .loading-lines {
-    margin-top: 20px;
-  }
-  .enable-disable.btn {
-    margin-top: 10px;
-  }
-
-}
-
-
-
-#cors-header {
-  margin: 18px 30px 0 30px;
-}
-
-#corsForm {
-  margin: 0;
-
-  .checkbox {
-    font-size: 16px;
-
-    input[type='checkbox'] {
-      margin-top: 4px;
-    }
-  }
-  .radio {
-    font-size: 16px;
-
-    input[type='radio'] {
-      margin-top: 4px;
-    }
-  }
-
-  .cors-enable {
-    padding: 10px 30px 18px 30px;
-    border-bottom: 1px solid #ccc;
-  }
-  #origin-domains-container {
-    button.add-domain {
-      height: 46px;
-    }
-  }
-  #collapsing-container {
-    border-top: 1px solid #fff;
-    border-bottom: 1px solid #ccc;
-    padding: 18px 30px;
-  }
-  .origin-domains {
-    margin: 0;
-    padding: 18px 0px;
-
-    p {
-      line-height: 36px;
-    }
-    .controls {
-      margin-top: 18px;
-    }
-  }
-  .localhost-tip {
-    padding: 18px 30px;
-    border-top: 1px solid #fff;
-    border-bottom: 1px solid #ccc;
-  }
-  .form-actions {
-    padding: 18px 30px;
-    margin-top: 0;
-    border-top: 1px solid #fff;
-  }
-
-  .input-append {
-      width: 80%;
-  }
-
-  input[type='text'] {
-    width: 100%;
-  }
-
-  .input-append.edit-domain-section {
-    width : 100%;
-    margin-bottom: 0px;
-
-    input {
-      width: calc(100% ~"-" 82px);
-      /*
-        the 'update' button is 76 px wide,
-        so 82px gives it a little room
-        compatible browsers: http://caniuse.com/#feat=calc
-      */
-    }
-  }
-}
-
-#origin-domain-table {
-  td {
-    padding: 8px 2px;
-  }
-  span {
-    cursor: pointer;
-    color: @brandHighlight;
-    display: inline-block;
-    padding-top: 9px;
-  }
-
-  tr a {
-    text-decoration: none;
-    color: @subListGray;
-  }
-
-  tr a:hover {
-    color: @hoverHighlight;
-  }
-
-  .edit-domain-section {
-    .btn {
-      height: 46px;
-    }
-  }
-  .url-display {
-    padding: 10px;
-  }
-
-  .update-domain-btn {
-    position: absolute;
-    right: -2px;
-    top: 0;
-    padding: 9px;
-    border-radius: 0 6px 6px 0;
-  }
-}
diff --git a/app/addons/cors/base.js b/app/addons/cors/base.js
deleted file mode 100644
index f9c475f..0000000
--- a/app/addons/cors/base.js
+++ /dev/null
@@ -1,25 +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.
-
-import FauxtonAPI from "../../core/api";
-import "./assets/less/cors.less";
-import reducers from "./reducers";
-
-const CORS = FauxtonAPI.addon();
-
-CORS.initialize = function () {};
-
-FauxtonAPI.addReducers({
-  cors: reducers
-});
-
-export default CORS;
diff --git a/app/addons/cors/components.js b/app/addons/cors/components.js
deleted file mode 100644
index 71d0bbc..0000000
--- a/app/addons/cors/components.js
+++ /dev/null
@@ -1,37 +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.
-
-import CORSContainer from "./components/CORSContainer";
-import CORSScreen from "./components/CORSScreen";
-import OriginInput from "./components/OriginInput";
-import Origins from "./components/Origins";
-import OriginTable from "./components/OriginTable";
-import OriginRow from "./components/OriginRow";
-
-export default {
-  CORSContainer,
-  CORSScreen,
-  OriginInput,
-  Origins,
-  OriginTable,
-  OriginRow
-};
-
-
-
-
-
-
-
-
-
-
diff --git a/app/addons/cors/components/CORSContainer.js b/app/addons/cors/components/CORSContainer.js
deleted file mode 100644
index 4e5de7d..0000000
--- a/app/addons/cors/components/CORSContainer.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { connect } from 'react-redux';
-import CORSScreen from './CORSScreen';
-import Actions from '../actions';
-
-const mapStateToProps = ({ cors }) => {
-  return {
-    node: cors.node,
-    corsEnabled: cors.corsEnabled,
-    isAllOrigins: cors.isAllOrigins,
-    isLoading: cors.isLoading,
-    origins: cors.origins,
-    deleteDomainModalVisible: cors.deleteDomainModalVisible,
-    domainToDelete: cors.domainToDelete
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    saveCORS: (options) => {
-      dispatch(Actions.showLoadingBars());
-      dispatch(Actions.saveCors(ownProps.url, options));
-    },
-
-    fetchAndLoadCORSOptions: () => {
-      dispatch(Actions.fetchAndLoadCORSOptions(ownProps.url, ownProps.node));
-    },
-
-    showDeleteDomainConfirmation: (domain) => {
-      dispatch(Actions.showDomainDeleteConfirmation(domain));
-    },
-
-    hideDeleteDomainConfirmation: () => {
-      dispatch(Actions.hideDomainDeleteConfirmation());
-    }
-  };
-};
-
-const CORSContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(CORSScreen);
-
-export default CORSContainer;
diff --git a/app/addons/cors/components/CORSScreen.js b/app/addons/cors/components/CORSScreen.js
deleted file mode 100644
index e5d76b8..0000000
--- a/app/addons/cors/components/CORSScreen.js
+++ /dev/null
@@ -1,150 +0,0 @@
-import React, { Component } from "react";
-import app from "../../../app";
-import ReactComponents from "../../components/react-components";
-import FauxtonComponents from "../../fauxton/components";
-import Origins from "./Origins";
-import OriginInput from "./OriginInput";
-import OriginTable from "./OriginTable";
-
-const LoadLines = ReactComponents.LoadLines;
-const ConfirmationModal = FauxtonComponents.ConfirmationModal;
-
-export default class CORSScreen extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    this.props.fetchAndLoadCORSOptions();
-  }
-
-  enableCorsChange() {
-    const { corsEnabled, origins, node } = this.props;
-    if (corsEnabled && !_.isEmpty(origins)) {
-      const result = window.confirm(app.i18n.en_US['cors-disable-cors-prompt']);
-      if (!result) { return; }
-    }
-    this.props.saveCORS({
-      corsEnabled: !corsEnabled,
-      origins: origins,
-      node: node
-    });
-  }
-
-  save() {
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: this.props.origins,
-      node: this.props.node
-    });
-  }
-
-  originChange(isAllOrigins) {
-    if (isAllOrigins && !_.isEmpty(this.props.origins)) {
-      const result = window.confirm('Are you sure? Switching to all origin domains will overwrite your specific origin domains.');
-      if (!result) { return; }
-    }
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: isAllOrigins ? ['*'] : [],
-      node: this.props.node
-    });
-  }
-
-  addOrigin(origin) {
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: this.props.origins.concat(origin),
-      node: this.props.node
-    });
-  }
-
-  updateOrigin(updatedOrigin, originalOrigin) {
-    const newOrigins = this.props.origins.slice();
-    const index = _.indexOf(newOrigins, originalOrigin);
-    if (index === -1) { return; }
-    newOrigins[index] = updatedOrigin;
-
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: newOrigins,
-      node: this.props.node
-    });
-  }
-
-  deleteOrigin() {
-    const { corsEnabled, origins, node, domainToDelete } = this.props;
-    const index = this.props.origins.indexOf(domainToDelete);
-    if (index === -1) { return; }
-    const newOrigins = [
-      ...origins.slice(0, index),
-      ...origins.slice(index + 1)
-    ];
-
-    this.props.saveCORS({
-      corsEnabled: corsEnabled,
-      origins: newOrigins,
-      node: node
-    });
-  }
-
-  render() {
-    const isVisible = [this.props.corsEnabled, !this.props.isAllOrigins].every((elem) => elem === true);
-
-    let originSettings = (
-      <div id={this.props.corsEnabled ? 'collapsing-container' : ''}>
-        <Origins
-          corsEnabled={this.props.corsEnabled}
-          originChange={this.originChange.bind(this)}
-          isAllOrigins={this.props.isAllOrigins} />
-        <OriginTable
-          updateOrigin={this.updateOrigin.bind(this)}
-          deleteOrigin={this.props.showDeleteDomainConfirmation}
-          isVisible={isVisible}
-          origins={this.props.origins} />
-        <OriginInput
-          addOrigin={this.addOrigin.bind(this)}
-          isVisible={isVisible} />
-      </div>
-    );
-
-    if (this.props.isLoading) {
-      originSettings = (<LoadLines />);
-    }
-    const deleteMsg = <span>Are you sure you want to delete <code>{_.escape(this.props.domainToDelete)}</code>?</span>;
-
-    return (
-      <div className="cors-page flex-body">
-        <header id="cors-header">
-          <p>{app.i18n.en_US['cors-notice']}</p>
-        </header>
-
-        <form id="corsForm" onSubmit={this.save.bind(this)}>
-          <div className="cors-enable">
-            {this.props.corsEnabled ? 'CORS is currently enabled.' : 'CORS is currently disabled.'}
-            <br />
-            <button
-              type="button"
-              className="enable-disable btn btn-secondary"
-              onClick={this.enableCorsChange.bind(this)}
-              disabled={this.props.isLoading ? 'disabled' : null}
-            >
-              {this.props.corsEnabled ? 'Disable CORS' : 'Enable CORS'}
-            </button>
-          </div>
-          {originSettings}
-        </form>
-
-        <ConfirmationModal
-          title="Confirm Deletion"
-          visible={this.props.deleteDomainModalVisible}
-          text={deleteMsg}
-          buttonClass="btn-danger"
-          onClose={this.props.hideDeleteDomainConfirmation}
-          onSubmit={this.deleteOrigin.bind(this)}
-          successButtonLabel="Delete Domain" />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/cors/components/OriginInput.js b/app/addons/cors/components/OriginInput.js
deleted file mode 100644
index 6ef352c..0000000
--- a/app/addons/cors/components/OriginInput.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-import { validateDomain, normalizeUrls } from "../helpers";
-
-export default class OriginInput extends Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      origin: ''
-    };
-  }
-
-  onInputChange(e) {
-    this.setState({ origin: e.target.value });
-  }
-
-  addOrigin(event) {
-    event.preventDefault();
-    if (!validateDomain(this.state.origin)) {
-      return false;
-    }
-
-    const url = normalizeUrls(this.state.origin);
-
-    this.props.addOrigin(url);
-    this.setState({ origin: '' });
-  }
-
-  onKeyUp(e) {
-    if (e.keyCode == 13) {   //enter key
-      return this.addOrigin(e);
-    }
-  }
-
-  render() {
-    if (!this.props.isVisible) {
-      return null;
-    }
-
-    return (
-      <div id="origin-domains-container">
-        <div className="origin-domains">
-          <div className="input-append">
-            <input type="text" name="new_origin_domain" placeholder="https://example.com"
-              onChange={this.onInputChange.bind(this)} value={this.state.origin} />
-            <button onClick={this.addOrigin.bind(this)} className="btn btn-secondary add-domain">
-              <i className="icon fonticon-ok-circled"></i> Add Domain
-            </button>
-          </div>
-        </div>
-      </div>
-    );
-  }
-
-}
-
-OriginInput.propTypes = {
-  isVisible: PropTypes.bool.isRequired,
-  addOrigin: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/components/OriginRow.js b/app/addons/cors/components/OriginRow.js
deleted file mode 100644
index 0e72c5b..0000000
--- a/app/addons/cors/components/OriginRow.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-import { validateDomain } from "../helpers";
-
-
-export default class OriginRow extends Component {
-
-  constructor (props) {
-    super(props);
-    this.state = {
-      edit: false,
-      updatedOrigin: this.props.origin
-    };
-  }
-
-  editOrigin(e) {
-    e.preventDefault();
-    this.setState({ edit: !this.state.edit });
-  }
-
-  updateOrigin (e) {
-    e.preventDefault();
-    if (!validateDomain(this.state.updatedOrigin)) {
-      return;
-    }
-
-    if (this.state.updatedOrigin && this.props.origin !== this.state.updatedOrigin) {
-      this.props.updateOrigin(this.state.updatedOrigin, this.props.origin);
-    }
-    this.setState({ edit: false });
-  }
-
-  deleteOrigin (e) {
-    e.preventDefault();
-    this.props.deleteOrigin(this.props.origin);
-  }
-
-  onInputChange (event) {
-    this.setState({ updatedOrigin: event.target.value });
-  }
-
-  onKeyUp (e) {
-    if (e.keyCode === 13) {   //enter key
-      return this.updateOrigin(e);
-    }
-  }
-
-  createOriginDisplay () {
-    if (this.state.edit) {
-      return (
-        <div className="input-append edit-domain-section">
-          <input type="text" name="update_origin_domain" onChange={ this.onInputChange.bind(this) } onKeyUp={ this.onKeyUp.bind(this) } value={this.state.updatedOrigin} />
-          <button onClick={ this.updateOrigin.bind(this) } className="btn btn-primary update-origin"> Update </button>
-        </div>
-      );
-    }
-    return <div className="js-url url-display">{this.props.origin}</div>;
-  }
-
-  render () {
-    const display = this.createOriginDisplay();
-    return (
-      <tr>
-        <td>
-          {display}
-        </td>
-        <td width="30">
-          <span>
-            <a className="fonticon-pencil" onClick={ this.editOrigin.bind(this) } title="Edit domain." />
-          </span>
-        </td>
-        <td width="30">
-          <span>
-            <a href="#" data-bypass="true" className="fonticon-trash" onClick={ this.deleteOrigin.bind(this) } title="Delete domain." />
-          </span>
-        </td>
-      </tr>
-    );
-  }
-
-}
-
-OriginRow.propTypes = {
-  origin: PropTypes.string.isRequired,
-  updateOrigin: PropTypes.func.isRequired,
-  deleteOrigin: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/components/OriginTable.js b/app/addons/cors/components/OriginTable.js
deleted file mode 100644
index be9f30d..0000000
--- a/app/addons/cors/components/OriginTable.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-import OriginRow from "./OriginRow";
-
-export default class OriginTable extends Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  createRows () {
-    return this.props.origins.map((origin, i) => {
-      return <OriginRow
-        updateOrigin={this.props.updateOrigin}
-        deleteOrigin={this.props.deleteOrigin}
-        key={i} origin={origin} />;
-    });
-  }
-
-  render () {
-    const {origins, isVisible} = this.props;
-
-    if (!origins) {
-      return null;
-    }
-
-    if (!isVisible || origins.length === 0) {
-      return null;
-    }
-
-    const originRows = this.createRows();
-
-    return (
-      <table id="origin-domain-table" className="table table-striped">
-        <tbody>
-          {originRows}
-        </tbody>
-      </table>
-    );
-  }
-
-}
-
-OriginTable.propTypes = {
-  isVisible: PropTypes.bool.isRequired,
-  origins: PropTypes.arrayOf(PropTypes.string),
-  updateOrigin: PropTypes.func.isRequired,
-  deleteOrigin: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/components/Origins.js b/app/addons/cors/components/Origins.js
deleted file mode 100644
index e64bf24..0000000
--- a/app/addons/cors/components/Origins.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-
-export default class Origins extends Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  onOriginChange (event) {
-    if (event.target.value === 'all' && this.props.isAllOrigins) {
-      return;   // do nothing if all origins is already selected
-    }
-    if (event.target.value === 'selected' && !this.props.isAllOrigins) {
-      return;   // do nothing if specific origins is already selected
-    }
-
-    this.props.originChange(event.target.value === 'all');
-  }
-
-  render () {
-
-    if (!this.props.corsEnabled) {
-      return null;
-    }
-
-    return (
-      <div>
-        <p><strong> Origin Domains </strong> </p>
-        <p>Databases will accept requests from these domains: </p>
-        <label className="radio">
-          <input type="radio" checked={this.props.isAllOrigins} value="all" onChange={ this.onOriginChange.bind(this) } name="all-domains"/> All domains ( * )
-        </label>
-        <label className="radio">
-          <input type="radio" checked={!this.props.isAllOrigins} value="selected" onChange={ this.onOriginChange.bind(this) } name="selected-domains"/> Restrict to specific domains
-        </label>
-      </div>
-    );
-  }
-}
-
-Origins.propTypes = {
-  corsEnabled: PropTypes.bool,
-  isAllOrigins: PropTypes.bool,
-  originChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/helpers.js b/app/addons/cors/helpers.js
deleted file mode 100644
index 3ecf4f0..0000000
--- a/app/addons/cors/helpers.js
+++ /dev/null
@@ -1,44 +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.
-
-import FauxtonAPI from "../../core/api";
-
-export const validateDomain = (domain) => {
-  if (!validateCORSDomain(domain)) {
-    FauxtonAPI.addNotification({
-      msg: 'Please enter a valid domain, starting with http/https.',
-      type: 'error',
-      clear: true
-    });
-    return false;
-  }
-  return true;
-};
-
-export const validateCORSDomain = (domain) => {
-  return (/^https?:\/\/(.+)(:\d{2,5})?$/).test(domain);
-};
-
-export const normalizeUrls = (url) => {
-  const el = document.createElement('a');
-  el.href = url;
-
-  if (/:/.test(url)) {
-    return el.protocol + '//' + el.host;
-  }
-
-  return el.protocol + '//' + el.hostname;
-};
-
-
-
-
diff --git a/app/addons/cors/reducers.js b/app/addons/cors/reducers.js
deleted file mode 100644
index 81ede61..0000000
--- a/app/addons/cors/reducers.js
+++ /dev/null
@@ -1,67 +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.
-
-import ActionTypes from "./actiontypes";
-import _ from "lodash";
-
-const initialState = {
-  corsEnabled: false,
-  origins: [],
-  isAllOrigins: false,
-  configChanged: false,
-  shouldSaveChange: false,
-  node: '',
-  isLoading: true,
-  deleteDomainModalVisible: false,
-  domainToDelete: ''
-};
-
-export default function cors (state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.EDIT_CORS:
-      const corsOptions = action.options;
-      return {
-        ...state,
-        isLoading: false,
-        node: corsOptions.node,
-        corsEnabled: corsOptions.corsEnabled,
-        isAllOrigins: _.includes(corsOptions.origins, '*'),
-        origins: corsOptions.origins,
-        deleteDomainModalVisible: false,
-        domainToDelete: ''
-      };
-
-    case ActionTypes.CORS_SHOW_DELETE_DOMAIN_MODAL:
-      return {
-        ...state,
-        deleteDomainModalVisible: true,
-        domainToDelete: action.domainToDelete
-      };
-
-    case ActionTypes.CORS_HIDE_DELETE_DOMAIN_MODAL:
-      return {
-        ...state,
-        deleteDomainModalVisible: false,
-        domainToDelete: ''
-      };
-
-    case ActionTypes.CORS_SET_IS_LOADING:
-      return {
-        ...state,
-        isLoading: action.isLoading
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/databases/__tests__/components.test.js b/app/addons/databases/__tests__/components.test.js
deleted file mode 100644
index 6522e5d..0000000
--- a/app/addons/databases/__tests__/components.test.js
+++ /dev/null
@@ -1,266 +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.
-import FauxtonAPI from "../../../core/api";
-import Actions from "../actions";
-import Stores from "../stores";
-import utils from "../../../../test/mocha/testUtils";
-import React from "react";
-import { mount } from 'enzyme';
-import sinon from 'sinon';
-import Views from "../components";
-
-const store = Stores.databasesStore;
-
-describe('AddDatabaseWidget', () => {
-
-  beforeEach(() => {
-    sinon.stub(Actions, 'createNewDatabase');
-  });
-
-  afterEach(() => {
-    Actions.createNewDatabase.restore();
-  });
-
-  it("creates a database with given name", () => {
-    const el = mount(<Views.AddDatabaseWidget />);
-    el.setState({databaseName: 'my-db'});
-    el.instance().onAddDatabase();
-    sinon.assert.calledWith(Actions.createNewDatabase, 'my-db');
-  });
-
-  it('creates a partitioned database', () => {
-    const el = mount(<Views.AddDatabaseWidget showPartitionedOption={true}/>);
-    el.setState({databaseName: 'my-db', partitionedSelected: true});
-    el.instance().onAddDatabase();
-    sinon.assert.calledWith(Actions.createNewDatabase, 'my-db', true);
-  });
-});
-
-
-describe('DatabasePagination', () => {
-
-  beforeEach(() => {
-    store.reset();
-  });
-
-  afterEach(() => {
-    sinon.restore();
-  });
-
-  it('uses custom URL prefix on the navigation if passed through props', () => {
-    const mockNavigate = sinon.stub(FauxtonAPI, 'navigate');
-    const pagination = mount(<Views.DatabasePagination linkPath="_custom_path" />);
-    const links = pagination.find('a');
-
-    expect(links.length).toBe(3);
-    links.forEach(link => {
-      link.simulate('click', { preventDefault: () => {}});
-      sinon.assert.calledWithMatch(mockNavigate, '_custom_path');
-      mockNavigate.reset();
-    });
-  });
-
-  it('sets the correct page and perPage values', () => {
-    const mockNavigate = sinon.stub(FauxtonAPI, 'navigate');
-    store._fullDbList = ['db1', 'db2', 'db3', 'db4'];
-    store._page = 2;
-    store._limit = 2;
-    const pagination = mount(<Views.DatabasePagination />);
-    const links = pagination.find('a');
-    // "<<" link
-    links.at(0).simulate('click', { preventDefault: () => {}});
-    sinon.assert.calledWithMatch(mockNavigate, 'page=1&limit=2');
-    mockNavigate.reset();
-
-    // page "2" link
-    links.at(2).simulate('click', { preventDefault: () => {}});
-    sinon.assert.calledWithMatch(mockNavigate, 'page=2&limit=2');
-    mockNavigate.reset();
-
-    // ">>" link
-    links.at(3).simulate('click', { preventDefault: () => {}});
-    sinon.assert.calledWithMatch(mockNavigate, 'page=2&limit=2');
-  });
-
-  it('renders the database count and range', () => {
-    const controller = mount(<Views.DatabasePagination linkPath="_custom_path" />);
-    const dbList = [];
-
-    for (let i = 0; i < 30; i++) {
-      dbList.push(`db-${i}`);
-    }
-
-    Actions.updateDatabases({
-      dbList: dbList.slice(0, 10),
-      databaseDetails: [],
-      failedDbs: [],
-      fullDbList: dbList
-    });
-
-    expect(controller.find('.all-db-footer__range').text()).toBe('1–20');
-    expect(controller.find('.all-db-footer__total-db-count').text()).toBe('30');
-  });
-
-});
-
-describe('DatabaseTable', () => {
-  beforeEach(() => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: ['db1'],
-      fullDbList: ['db1']
-    });
-    // To avoid console.error() in app/core/api.js
-    sinon.stub(FauxtonAPI, 'urls').returns('/fake/url');
-  });
-
-  afterEach(() => {
-    utils.restore(FauxtonAPI.urls);
-  });
-
-  it('adds multiple extra columns if extended', () => {
-    class ColHeader1 extends React.Component {
-      render() { return <th>EXTRA COL 1</th>; }
-    }
-
-    class ColHeader2 extends React.Component {
-      render() { return <th>EXTRA COL 2</th>; }
-    }
-
-    class ColHeader3 extends React.Component {
-      render() { return <th>EXTRA COL 3</th>; }
-    }
-
-    FauxtonAPI.registerExtension('DatabaseTable:head', ColHeader1);
-    FauxtonAPI.registerExtension('DatabaseTable:head', ColHeader2);
-    FauxtonAPI.registerExtension('DatabaseTable:head', ColHeader3);
-
-    var table = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} loading={false} dbList={[]} showPartitionedColumn={false}/>
-    );
-    var cols = table.find('th');
-
-    // (default # of rows is 4)
-    expect(cols.length).toBe(7);
-
-    FauxtonAPI.unRegisterExtension('DatabaseTable:head');
-  });
-
-  it('adds multiple extra column in DatabaseRow if extended', () => {
-    class Cell extends React.Component {
-      render() { return <td>EXTRA CELL</td>; }
-    }
-
-    FauxtonAPI.registerExtension('DatabaseTable:databaseRow', Cell);
-
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    var databaseRow = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-    var links = databaseRow.find('td');
-
-    // (default # of rows is 4)
-    expect(links.length).toBe(5);
-
-    FauxtonAPI.unRegisterExtension('DatabaseTable:databaseRow');
-
-    Stores.databasesStore.reset();
-  });
-
-  it('shows error message if row marked as failed to load', () => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: ['db1'],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    var databaseRow = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-    expect(databaseRow.find('.database-load-fail').length).toBe(1);
-  });
-
-  it('shows no error if row marked as loaded', () => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    var databaseRow = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-
-    expect(databaseRow.find('.database-load-fail').length).toBe(0);
-  });
-
-  it('shows Partitioned column only when prop is set to true', () => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes:{}, props: {partitioned: true}}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    const withPartColumn = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={true}/>
-    );
-    const colHeaders = withPartColumn.find('th');
-    expect(colHeaders.length).toBe(5);
-    expect(colHeaders.get(3).props.children).toBe('Partitioned');
-
-    const withoutPartColumn = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-    expect(withoutPartColumn.find('th').length).toBe(4);
-  });
-
-  it('shows correct values in the Partitioned column', () => {
-    Actions.updateDatabases({
-      dbList: ['db1', 'db2'],
-      databaseDetails: [
-        {db_name: 'db1', doc_count: 1, doc_del_count: 0, sizes: {}, props: {partitioned: true}},
-        {db_name: 'db2', doc_count: 2, doc_del_count: 0, sizes: {}, props: {partitioned: false}}
-      ],
-      failedDbs: [],
-      fullDbList: ['db1', 'db2']
-    });
-
-    const list = store.getDbList();
-
-    const dbTable = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={true}/>
-    );
-    const colCells = dbTable.find('td');
-    // 2 rows with 5 cells each
-    expect(colCells.length).toBe(10);
-    expect(colCells.get(3).props.children).toBe('Yes');
-    expect(colCells.get(8).props.children).toBe('No');
-  });
-});
diff --git a/app/addons/databases/__tests__/databasepagination.test.js b/app/addons/databases/__tests__/databasepagination.test.js
deleted file mode 100644
index f29c84d..0000000
--- a/app/addons/databases/__tests__/databasepagination.test.js
+++ /dev/null
@@ -1,49 +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.
-
-import Stores from "../stores";
-import React from 'react';
-import ReactDOM from 'react-dom';
-import "../../documents/base";
-import DatabaseActions from "../actions";
-import {mount} from 'enzyme';
-import DatabaseComponents from "../components";
-
-const store = Stores.databasesStore;
-
-describe('Database Pagination', function () {
-
-  it('renders correct pagination upon store change', () => {
-    DatabaseActions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const tempStore = {
-      getTotalAmountOfDatabases: () => { return 10; },
-      getPage: () => { return 1; },
-      getLimit: () => { return 20; },
-      on: () => {},
-      off: () => {}
-    };
-
-    const pagination = mount(<DatabaseComponents.DatabasePagination store={tempStore} />);
-    expect(pagination.find('.all-db-footer__total-db-count').text()).toMatch('10');
-
-    // switch stores
-    pagination.setProps({store: store});
-    expect(pagination.find('.all-db-footer__total-db-count').text()).toMatch('1');
-  });
-
-});
diff --git a/app/addons/databases/__tests__/reducers.test.js b/app/addons/databases/__tests__/reducers.test.js
deleted file mode 100644
index 4f57bab..0000000
--- a/app/addons/databases/__tests__/reducers.test.js
+++ /dev/null
@@ -1,61 +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.
-
-import databases from '../reducers';
-import ActionTypes from '../actiontypes';
-
-describe('Databases Reducer', () => {
-
-  it('sets if partioned database feature is available', () => {
-    const action = {
-      type: ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE,
-      options: { available: true }
-    };
-    let newState = databases(undefined, { type: 'DO_NOTHIN'});
-    expect(newState.partitionedDatabasesAvailable).toBe(false);
-
-    newState = databases(newState, action);
-    expect(newState.partitionedDatabasesAvailable).toBe(true);
-  });
-
-  it('sets isPartitioned to false when props is not present', () => {
-    const action = {
-      type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS,
-      options: {
-        metadata: { name: 'dummy_db' }
-      }
-    };
-    const newState = databases(undefined, action);
-    expect(newState.isDbPartitioned).toBe(false);
-    expect(newState.dbInfo).toBeDefined();
-    expect(newState.dbInfo.name).toBe('dummy_db');
-  });
-
-  it('sets isPartitioned based on db metadata', () => {
-    const action = {
-      type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS,
-      options: {
-        metadata: {
-          name: 'dummy_db',
-          props: { partitioned: true }
-        }
-      }
-    };
-    const newState = databases(undefined, action);
-    expect(newState.isDbPartitioned).toBe(true);
-
-    action.options.metadata.props.partitioned = false;
-    const newState2 = databases(undefined, action);
-    expect(newState2.isDbPartitioned).toBe(false);
-  });
-
-});
diff --git a/app/addons/databases/__tests__/stores.test.js b/app/addons/databases/__tests__/stores.test.js
deleted file mode 100644
index 0e94b11..0000000
--- a/app/addons/databases/__tests__/stores.test.js
+++ /dev/null
@@ -1,86 +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.
-
-import Stores from "../stores";
-import "../../documents/base";
-
-import DatabaseActions from "../actions";
-
-const store = Stores.databasesStore;
-describe('Databases Store', function () {
-
-  describe('database list storage', function () {
-
-    beforeEach(() => {
-      store.reset();
-    });
-
-    it('marks failed detail fetches as failed dbs', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1', 'db2'],
-        databaseDetails: [{db_name: 'db1', sizes: {}}, {db_name: 'db2', sizes: {}}],
-        failedDbs: ['db1']
-      });
-
-      const list = store.getDbList();
-
-      expect(list[0].failed).toBeTruthy();
-    });
-
-    it('unions details', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1'],
-        databaseDetails: [{db_name: 'db1', doc_count: 5, doc_del_count: 3, sizes: {}}],
-        failedDbs: []
-      });
-
-      const list = store.getDbList();
-
-      expect(list[0].docCount).toBe(5);
-      expect(list[0].docDelCount).toBe(3);
-    });
-
-    it('determines database availability', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1', 'db2'],
-        databaseDetails: [],
-        failedDbs: []
-      });
-
-      expect(store.doesDatabaseExist('db1')).toBeTruthy();
-      expect(!store.doesDatabaseExist('db3')).toBeTruthy();
-    });
-
-    it('uses the sizes.active prop', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1'],
-        databaseDetails: [{
-          db_name: 'db1',
-          doc_count: 5,
-          doc_del_count: 3,
-          sizes: {
-            active: 1337,
-            external: 0,
-            file: 0,
-          }
-        }],
-        failedDbs: []
-      });
-
-      const dbList = store.getDbList();
-
-      expect(dbList[0].dataSize).toBe('1.3 KB');
-    });
-
-  });
-
-});
diff --git a/app/addons/databases/actions.js b/app/addons/databases/actions.js
deleted file mode 100644
index d576c7e..0000000
--- a/app/addons/databases/actions.js
+++ /dev/null
@@ -1,256 +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.
-import app from '../../app';
-import Helpers from '../../helpers';
-import FauxtonAPI from '../../core/api';
-import { get } from '../../core/ajax';
-import DatabasesBase from '../databases/base';
-import Stores from './stores';
-import ActionTypes from './actiontypes';
-import * as API from './api';
-
-function getDatabaseDetails (dbList, fullDbList) {
-  const databaseDetails = [];
-  const failedDbs = [];
-  let seen = 0;
-
-  dbList.forEach((db) => {
-    const url = FauxtonAPI.urls('databaseBaseURL', 'server', db);
-
-    fetch(url)
-      .then((res) => {
-        databaseDetails.push(res);
-      }).catch(() => {
-        failedDbs.push(db);
-      }).then(() => {
-        seen++;
-        if (seen !== dbList.length) {
-          return;
-        }
-        updateDatabases({
-          dbList: dbList,
-          databaseDetails: databaseDetails,
-          failedDbs: failedDbs,
-          fullDbList: fullDbList
-        });
-      });
-  });
-}
-
-function fetch (url) {
-  return get(url).then(res => {
-    if (res.error) {
-      throw new Error(res.reason || res.error);
-    }
-    return res;
-  });
-}
-
-function getDatabaseList () {
-  const url = FauxtonAPI.urls('allDBs', 'server');
-
-  return fetch(url);
-}
-
-function paginate (list, page, perPage) {
-  const start = (page - 1) * perPage;
-  const end = page * perPage;
-  return list.slice(start, end);
-}
-
-function updateDatabases (options) {
-  FauxtonAPI.dispatch({
-    type: ActionTypes.DATABASES_UPDATE,
-    options: options
-  });
-}
-
-export default {
-  getDatabaseList,
-  paginate,
-  getDatabaseDetails,
-  fetch,
-  updateDatabases,
-
-  init({page, limit}) {
-    this.setStartLoading();
-    this.setPage(page);
-    if (limit) {
-      this.setLimit(limit);
-    }
-
-    getDatabaseList(limit, page)
-      .then((fullDbList) => {
-        const paginatedDbList = paginate(fullDbList, page, limit);
-
-        this.updateDatabases({
-          dbList: paginatedDbList,
-          databaseDetails: [],
-          failedDbs: [],
-          fullDbList: fullDbList
-        });
-
-        getDatabaseDetails(paginatedDbList, fullDbList);
-      });
-  },
-
-  setPage(page) {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_SETPAGE,
-      options: {
-        page
-      }
-    });
-  },
-
-  setLimit(limit) {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_SETLIMIT,
-      options: {
-        limit
-      }
-    });
-  },
-
-  setStartLoading() {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_STARTLOADING
-    });
-  },
-
-  setLoadComplete() {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_LOADCOMPLETE
-    });
-  },
-
-  createNewDatabase(databaseName, partitioned) {
-    if (_.isNull(databaseName) || databaseName.trim().length === 0) {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter a valid database name',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-    databaseName = databaseName.trim();
-    // name accepted, make sure prompt can be removed
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_SET_PROMPT_VISIBLE,
-      options: {
-        visible: false
-      }
-    });
-
-    const db = Stores.databasesStore.obtainNewDatabaseModel(databaseName, partitioned);
-    FauxtonAPI.addNotification({ msg: 'Creating database.' });
-    db.save().done(() => {
-      FauxtonAPI.addNotification({
-        msg: 'Database created successfully',
-        type: 'success',
-        clear: true
-      });
-      const route = FauxtonAPI.urls('allDocs', 'app', app.utils.safeURLName(databaseName));
-      app.router.navigate(route, { trigger: true });
-    }
-    ).fail((xhr) => {
-      const responseText = JSON.parse(xhr.responseText).reason;
-      FauxtonAPI.addNotification({
-        msg: 'Create database failed: ' + responseText,
-        type: 'error',
-        clear: true
-      });
-    }
-    );
-  },
-
-  jumpToDatabase(databaseName) {
-    if (_.isNull(databaseName) || databaseName.trim().length === 0) {
-      return;
-    }
-
-    databaseName = databaseName.trim();
-
-    const url = FauxtonAPI.urls('allDocs', 'app', app.utils.safeURLName(databaseName), '');
-    // use the next cpu tick to allow react-select to unmount prorperly
-    return setTimeout(() => { FauxtonAPI.navigate(url); });
-  },
-
-  fetchAllDbsWithKey(id, callback) {
-    const query = '?' + app.utils.queryParams({
-      startkey: JSON.stringify(id),
-      endkey: JSON.stringify(id + '\u9999'),
-      limit: 30
-    });
-
-    const url = Helpers.getServerUrl(`/_all_dbs${query}`);
-    get(url).then((dbs) => {
-      const options = dbs.map(db => {
-        return {
-          value: db,
-          label: db
-        };
-      });
-      callback(null, { options: options });
-    });
-  },
-
-  setPartitionedDatabasesAvailable(available) {
-    const action = {
-      type: ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE,
-      options: {
-        available
-      }
-    };
-    FauxtonAPI.dispatch(action);
-    FauxtonAPI.reduxDispatch(action);
-  },
-
-  checkPartitionedQueriesIsAvailable() {
-    const exts = FauxtonAPI.getExtensions(DatabasesBase.PARTITONED_DB_CHECK_EXTENSION);
-    let promises = exts.map(checkFunction => {
-      return checkFunction();
-    });
-    FauxtonAPI.Promise.all(promises).then(results => {
-      const isAvailable = results.every(check => check === true);
-      this.setPartitionedDatabasesAvailable(isAvailable);
-    }).catch(() => {
-      // ignore as the default is false
-    });
-  },
-
-  // Fetches and sets metadata info for the selected database, which is defined by the current URL
-  // This function is intended to be called by the routers if needed by the components in the page.
-  fetchSelectedDatabaseInfo(databaseName) {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA
-    });
-    API.fetchDatabaseInfo(databaseName).then(res => {
-      if (!res.db_name) {
-        const details = res.reason ? res.reason : '';
-        throw new Error('Failed to fetch database info. ' + details);
-      }
-      FauxtonAPI.reduxDispatch({
-        type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS,
-        options: {
-          metadata: res
-        }
-      });
-    }).catch(err => {
-      FauxtonAPI.addNotification({
-        msg: err.message,
-        type: 'error',
-        clear: true
-      });
-    });
-  }
-};
diff --git a/app/addons/databases/actiontypes.js b/app/addons/databases/actiontypes.js
deleted file mode 100644
index 20f83a5..0000000
--- a/app/addons/databases/actiontypes.js
+++ /dev/null
@@ -1,22 +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.
-export default {
-  DATABASES_SETPAGE: 'DATABASES_SETPAGE',
-  DATABASES_SETLIMIT: 'DATABASES_SETLIMIT',
-  DATABASES_SET_PROMPT_VISIBLE: 'DATABASES_SET_PROMPT_VISIBLE',
-  DATABASES_STARTLOADING: 'DATABASES_STARTLOADING',
-  DATABASES_LOADCOMPLETE: 'DATABASES_LOADCOMPLETE',
-  DATABASES_UPDATE: 'DATABASES_UPDATE',
-  DATABASES_PARTITIONED_DB_AVAILABLE: 'DATABASES_PARTITIONED_DB_AVAILABLE',
-  DATABASES_FETCH_SELECTED_DB_METADATA: 'DATABASES_FETCH_SELECTED_DB_METADATA',
-  DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS: 'DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS'
-};
diff --git a/app/addons/databases/api.js b/app/addons/databases/api.js
deleted file mode 100644
index a5f4d43..0000000
--- a/app/addons/databases/api.js
+++ /dev/null
@@ -1,19 +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.
-
-import FauxtonAPI from '../../core/api';
-import { get } from '../../core/ajax';
-
-export const fetchDatabaseInfo = (databaseName) => {
-  const url = FauxtonAPI.urls('databaseBaseURL', 'server', databaseName);
-  return get(url);
-};
diff --git a/app/addons/databases/assets/less/databases.less b/app/addons/databases/assets/less/databases.less
deleted file mode 100644
index 70b23b5..0000000
--- a/app/addons/databases/assets/less/databases.less
+++ /dev/null
@@ -1,137 +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.
-
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.tools .nav {
-  margin-bottom: 10px;
-}
-
-.new-database-tray {
-
-  &:before {
-    right: 250px;
-  }
-
-  input.input-xxlarge {
-    margin-bottom: 0px;
-    width: 100%;
-  }
-
-  a.btn {
-    margin-left: 0;
-    line-height: 1.5em;
-    border: 0px;
-    padding: 10px 10px 9px;
-    font-size: 14px;
-
-    &.btn-cancel {
-      background-color: transparent;
-      border-color: @background;
-      border-width: 1px;
-      border-style: solid;
-      color: @buttonText;
-      &:hover {
-        background-color: @background;
-        color: @hoverHighlight;
-      }
-    }
-  }
-
-  .tray-contents {
-    display: flex;
-    flex-direction: column;
-    height: 100%;
-    width: 352px;
-    overflow-y: scroll;
-  }
-
-  .tray-header {
-    padding-right: 20px;
-    padding-left: 20px;
-    padding-top: 10px;
-  }
-  .tray-body {
-    flex: 1;
-    padding-right: 20px;
-    padding-left: 20px;
-  }
-  .tray-footer {
-    display: flex;
-    justify-content: space-between;
-    padding: 20px;
-    a.btn {
-      min-width: 140px;
-    }
-  }
-
-  .db-name-label {
-    font-weight: bold;
-  }
-
-  .partitioned-db-section {
-    flex: 1;
-  }
-  .partitioned-db-label {
-    font-weight: bold;
-    padding-top: 1rem;
-  }
-  .partitioned-db-options {
-    display: flex;
-    align-items: baseline;
-    input {
-      margin: 0px 10px 0px 0px;
-    }
-  }
-  .partitioned-db-help {
-    padding-top: 1rem;
-    font-size: 0.875rem;
-    border-bottom: 2px solid rgba(255, 255, 255, 0.1);
-  }
-}
-
-.new-database-tray--expanded {
-  height: calc(100% - 64px);
-}
-
-#database-pagination {
-  float: right;
-}
-
-.database-load-fail {
-  color: #999999;
-  height: 49px;
-}
-
-.database-actions > * {
-  margin-right: 10px;
-}
-
-@media screen and (max-width: 768px) {
-  .add-new-database-btn span{
-    display: none;
-  }
-  .new-database-tray:before {
-    right: 185px;
-  }
-}
-
-@media screen and (max-width: 1120px) {
-  // Left nav menuy is closed
-  .new-database-tray {
-    .tray-contents {
-      width: 332px;
-    }
-  }
-}
diff --git a/app/addons/databases/base.js b/app/addons/databases/base.js
deleted file mode 100644
index 8cfd0d3..0000000
--- a/app/addons/databases/base.js
+++ /dev/null
@@ -1,125 +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.
-
-import app from "../../app";
-import Helpers from "../../helpers";
-import { get } from "../../core/ajax";
-import FauxtonAPI from "../../core/api";
-import Databases from "./routes";
-import Actions from "./actions";
-import reducers from './reducers';
-import "./assets/less/databases.less";
-
-Databases.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    href:"#/_all_dbs",
-    title:"Databases",
-    icon: "fonticon-database",
-    className: 'databases'
-  });
-  Actions.checkPartitionedQueriesIsAvailable();
-};
-
-function partitionUrlComponent(partitionKey) {
-  return partitionKey ? `/_partition/${partitionKey}` : '';
-}
-
-function checkPartitionedDatabaseFeature () {
-  // Checks if the CouchDB server supports Partitioned Databases
-  return get(Helpers.getServerUrl("/")).then((couchdb) => {
-    if (couchdb.features && couchdb.features.includes('partitioned')) {
-      return true;
-    }
-    // Check if it's enabled as an experimental feature
-    if (couchdb.features_flags && couchdb.features_flags.includes('partitioned')) {
-      return true;
-    }
-    return false;
-  }).catch(() => {
-    return false;
-  });
-}
-
-// This extension can be used by addons to add extra checks when
-// deciding if the partitioned database feature should be enabled.
-// The registered element should be a function that returns a
-// Promise resolving to either true or false.
-Databases.PARTITONED_DB_CHECK_EXTENSION = 'Databases:PartitionedDbCheck';
-FauxtonAPI.registerExtension(Databases.PARTITONED_DB_CHECK_EXTENSION, checkPartitionedDatabaseFeature);
-
-FauxtonAPI.addReducers({
-  databases: reducers
-});
-
-// Utility functions
-Databases.databaseUrl = function (database) {
-  var name = _.isObject(database) ? database.id : database,
-      dbname = app.utils.safeURLName(name);
-
-  return ['/database/', dbname, '/_all_docs?limit=' + Databases.DocLimit].join('');
-};
-
-FauxtonAPI.registerUrls('changes', {
-  server: function (id, query) {
-    return Helpers.getServerUrl('/' + id + '/_changes' + query);
-  },
-
-  app: function (id, partitionKey, query) {
-    return '/database/' + id + partitionUrlComponent(partitionKey) + '/_changes' + query;
-  },
-
-  apiurl: function (id, query) {
-    return Helpers.getApiUrl('/' + id + '/_changes' + query);
-  }
-});
-
-FauxtonAPI.registerUrls('allDBs', {
-  server: function (query = '') {
-    return Helpers.getServerUrl(`/_all_dbs${query}`);
-  },
-
-  app: function () {
-    return '_all_dbs';
-  },
-
-  apiurl: function () {
-    return Helpers.getApiUrl('/_all_dbs');
-  }
-});
-
-FauxtonAPI.registerUrls('databaseBaseURL', {
-  server: function (database) {
-    return Helpers.getServerUrl('/' + app.utils.safeURLName(database));
-  },
-  apiurl: function(database) {
-    return Helpers.getApiUrl('/' + app.utils.safeURLName(database));
-  },
-  app: function (database) {
-    return '/database/' + database;
-  }
-});
-
-FauxtonAPI.registerUrls('permissions', {
-  server: function (db) {
-    return Helpers.getServerUrl('/' + db + '/_security');
-  },
-
-  app: function (db, partitionKey) {
-    return '/database/' + db + partitionUrlComponent(partitionKey) + '/permissions';
-  },
-
-  apiurl: function (db) {
-    return Helpers.getApiUrl('/' + db + '/_security');
-  }
-});
-
-export default Databases;
diff --git a/app/addons/databases/components.js b/app/addons/databases/components.js
deleted file mode 100644
index 3e260f0..0000000
--- a/app/addons/databases/components.js
+++ /dev/null
@@ -1,581 +0,0 @@
-import FauxtonAPI from "../../core/api";
-
-// 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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from "react";
-import Components from "../components/react-components";
-import ComponentsStore from "../components/stores";
-import ComponentsActions from "../components/actions";
-import PerPageSelector from '../documents/index-results/components/pagination/PerPageSelector';
-import FauxtonComponentsReact from "..//fauxton/components";
-import Stores from "./stores";
-import Actions from "./actions";
-
-import { Tooltip, OverlayTrigger } from 'react-bootstrap';
-
-const databasesStore = Stores.databasesStore;
-const deleteDbModalStore = ComponentsStore.deleteDbModalStore;
-
-const { Accordion, AccordionItem, DeleteDatabaseModal, ToggleHeaderButton, TrayContents } = Components;
-
-
-class DatabasesController extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.reloadAfterDatabaseDeleted = this.reloadAfterDatabaseDeleted.bind(this);
-  }
-
-  getStoreState = () => {
-    return {
-      dbList: databasesStore.getDbList(),
-      loading: databasesStore.isLoading(),
-      showDeleteDatabaseModal: deleteDbModalStore.getShowDeleteDatabaseModal(),
-      showPartitionedColumn: databasesStore.isPartitionedDatabasesAvailable(),
-      page: databasesStore.getPage(),
-      limit: databasesStore.getLimit()
-    };
-  };
-
-  componentDidMount() {
-    databasesStore.on('change', this.onChange, this);
-    deleteDbModalStore.on('change', this.onChange, this);
-    this.loadData();
-  }
-
-  componentDidUpdate(_, prevState) {
-    if (prevState.page !== this.state.page || prevState.limit !== this.state.limit) {
-      this.loadData();
-    }
-  }
-
-  loadData() {
-    Actions.init({
-      page: this.state.page,
-      limit: this.state.limit
-    });
-  }
-
-  componentWillUnmount() {
-    databasesStore.off('change', this.onChange, this);
-    deleteDbModalStore.off('change', this.onChange, this);
-  }
-
-  onChange = () => {
-    this.setState(this.getStoreState());
-  };
-
-  reloadAfterDatabaseDeleted() {
-    let page = this.state.page;
-    if (page > 1 && this.state.dbList.length === 1) {
-      //show previous page if the db deleted was the only one in the page
-      page = page - 1;
-    }
-    Actions.init({
-      page,
-      limit: this.state.limit
-    });
-  }
-
-  state = this.getStoreState();
-
-  render() {
-    const { loading, dbList } = this.state;
-
-    return (
-      <DatabaseTable
-        showDeleteDatabaseModal={this.state.showDeleteDatabaseModal}
-        dbList={dbList}
-        loading={loading}
-        showPartitionedColumn={this.state.showPartitionedColumn}
-        onDatabaseDeleted={this.reloadAfterDatabaseDeleted} />
-    );
-  }
-}
-
-class DatabaseTable extends React.Component {
-  static propTypes = {
-    dbList: PropTypes.array.isRequired,
-    showDeleteDatabaseModal: PropTypes.object.isRequired,
-    loading: PropTypes.bool.isRequired,
-    showPartitionedColumn: PropTypes.bool.isRequired,
-    onDatabaseDeleted: PropTypes.func
-  };
-
-  createRows = (dbList) => {
-    return dbList.map((item, k) => {
-      return (
-        <DatabaseRow item={item} key={k} showPartitionedColumn={this.props.showPartitionedColumn} />
-      );
-    });
-  };
-
-  getExtensionColumns = () => {
-    var cols = FauxtonAPI.getExtensions('DatabaseTable:head');
-    return _.map(cols, (Item, index) => {
-      return <Item key={index} />;
-    });
-  };
-
-  showDeleteDatabaseModal = () => {
-    ComponentsActions.showDeleteDatabaseModal({
-      showDeleteModal: !this.props.showDeleteDatabaseModal.showDeleteModal
-    });
-  };
-
-  render() {
-    if (this.props.loading) {
-      return (
-        <div className="view">
-          <Components.LoadLines />
-        </div>
-      );
-    }
-
-    const rows = this.createRows(this.props.dbList);
-    return (
-      <div className="view">
-        <DeleteDatabaseModal
-          showHide={this.showDeleteDatabaseModal}
-          modalProps={this.props.showDeleteDatabaseModal}
-          onSuccess={this.props.onDatabaseDeleted} />
-        <table className="table table-striped fauxton-table-list databases">
-          <thead>
-            <tr>
-              <th>Name</th>
-              <th>Size</th>
-              <th># of Docs</th>
-              {this.props.showPartitionedColumn ? (<th>Partitioned</th>) : null}
-              {this.getExtensionColumns()}
-              <th>Actions</th>
-            </tr>
-          </thead>
-          <tbody>
-            {rows}
-          </tbody>
-        </table>
-      </div>
-    );
-  }
-}
-
-class DatabaseRow extends React.Component {
-  static propTypes = {
-    item: PropTypes.shape({
-      id: PropTypes.string.isRequired,
-      encodedId: PropTypes.string.isRequired,
-      url: PropTypes.string.isRequired,
-      failed: PropTypes.bool.isRequired,
-      dataSize: PropTypes.string,
-      docCount: PropTypes.number,
-      docDelCount: PropTypes.number,
-      isPartitioned: PropTypes.bool,
-      showTombstoneWarning: PropTypes.bool
-    }).isRequired,
-    showPartitionedColumn: PropTypes.bool.isRequired
-  };
-
-  getExtensionColumns = (row) => {
-    var cols = FauxtonAPI.getExtensions('DatabaseTable:databaseRow');
-    return _.map(cols, (Item, index) => {
-      return <Item row={row} key={index} />;
-    });
-  };
-
-  showDeleteDatabaseModal = (name) => {
-    ComponentsActions.showDeleteDatabaseModal({ showDeleteModal: true, dbId: name });
-  };
-
-  render() {
-    const {
-      item
-    } = this.props;
-
-    const { encodedId, id, url, dataSize, docCount, docDelCount, showTombstoneWarning, failed, isPartitioned } = item;
-    const tombStoneWarning = showTombstoneWarning ?
-      (<GraveyardInfo docCount={docCount} docDelCount={docDelCount} />) : null;
-
-    // if the row status failed to load, inform the user
-    if (failed) {
-      return (
-        <tr>
-          <td data-name="database-load-fail-name">{id}</td>
-          <td colSpan="4" className="database-load-fail">This database failed to load.</td>
-        </tr>
-      );
-    }
-    const partitionedCol = this.props.showPartitionedColumn ?
-      (<td>{isPartitioned ? 'Yes' : 'No'}</td>) :
-      null;
-    return (
-      <tr>
-        <td>
-          <a href={url}>{id}</a>
-        </td>
-        <td>{dataSize}</td>
-        <td>{docCount} {tombStoneWarning}</td>
-        {partitionedCol}
-        {this.getExtensionColumns(item)}
-
-        <td className="database-actions">
-          <a className="db-actions btn fonticon-replicate set-replication-start"
-            aria-label={`Replicate ${id}`}
-            title={"Replicate " + name}
-            href={"#/replication/_create/" + encodedId} />
-          <a
-            aria-label={`Set permissions for ${id}`}
-            className="db-actions btn icon-lock set-permissions"
-            title={"Set permissions for " + name} href={"#/database/" + encodedId + "/permissions"} />
-          <a
-            aria-label={`Delete ${id}`}
-            className="db-actions btn icon-trash"
-            onClick={this.showDeleteDatabaseModal.bind(this, id, encodedId)}
-            title={'Delete ' + id} data-bypass="true" />
-        </td>
-      </tr>
-    );
-  }
-}
-
-const GraveyardInfo = ({ docCount, docDelCount }) => {
-  const graveyardTitle = `This database has just ${docCount} docs and ${docDelCount} deleted docs`;
-  const tooltip = <Tooltip id="graveyard-tooltip">{graveyardTitle}</Tooltip>;
-
-  return (
-    <OverlayTrigger placement="top" overlay={tooltip}>
-      <i className="js-db-graveyard icon icon-exclamation-sign" title={graveyardTitle}></i>
-    </OverlayTrigger>
-  );
-};
-
-class RightDatabasesHeader extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.state = this.getStoreState();
-  }
-
-  getStoreState() {
-    return {
-      showPartitionedOption: databasesStore.isPartitionedDatabasesAvailable()
-    };
-  }
-
-  componentDidMount() {
-    databasesStore.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount() {
-    databasesStore.off('change', this.onChange, this);
-  }
-
-  onChange() {
-    this.setState(this.getStoreState());
-  }
-
-  render() {
-    return (
-      <div className="header-right right-db-header flex-layout flex-row">
-        <JumpToDatabaseWidget loadOptions={Actions.fetchAllDbsWithKey} />
-        <AddDatabaseWidget
-          showPartitionedOption={this.state.showPartitionedOption}
-          partitionedDbHelpText={this.props.partitionedDbHelpText} />
-      </div>
-    );
-  }
-}
-
-class AddDatabaseWidget extends React.Component {
-  static defaultProps = {
-    showPartitionedOption: false
-  };
-
-  static propTypes = {
-    showPartitionedOption: PropTypes.bool.isRequired,
-    partitionedDbHelpText: PropTypes.string
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      isPromptVisible: false,
-      databaseName: '',
-      partitionedSelected: undefined
-    };
-
-    this.onTrayToggle = this.onTrayToggle.bind(this);
-    this.closeTray = this.closeTray.bind(this);
-    this.focusInput = this.focusInput.bind(this);
-    this.onKeyUpInInput = this.onKeyUpInInput.bind(this);
-    this.onChange = this.onChange.bind(this);
-    this.onAddDatabase = this.onAddDatabase.bind(this);
-    this.onSetPartitioned = this.onSetPartitioned.bind(this);
-    this.onSetNotPartitioned = this.onSetNotPartitioned.bind(this);
-  }
-
-  getI18nText(key) {
-    if (this.props.i18n) {
-      return this.props.i18n[key];
-    }
-    return '';
-  }
-
-  onTrayToggle() {
-    this.setState({ isPromptVisible: !this.state.isPromptVisible });
-  }
-
-  closeTray() {
-    this.setState({ isPromptVisible: false });
-  }
-
-  focusInput() {
-    this.newDbName.focus();
-  }
-
-  onKeyUpInInput(e) {
-    if (e.which === 13) {
-      this.onAddDatabase();
-    }
-  }
-
-  onChange(e) {
-    this.setState({ databaseName: e.target.value });
-  }
-
-  onAddDatabase() {
-    if (this.props.showPartitionedOption && this.state.partitionedSelected === undefined) {
-      FauxtonAPI.addNotification({
-        type: 'error',
-        msg: 'Please select either Partitioned or Non-partitioned',
-        clear: true
-      });
-      return;
-    }
-    const partitioned = this.props.showPartitionedOption ?
-      this.state.partitionedSelected :
-      undefined;
-
-    Actions.createNewDatabase(
-      this.state.databaseName,
-      partitioned
-    );
-  }
-
-  onSetNotPartitioned() {
-    this.setState({ partitionedSelected: false });
-  }
-
-  onSetPartitioned() {
-    this.setState({ partitionedSelected: true });
-  }
-
-  partitionedOption() {
-    if (!this.props.showPartitionedOption) {
-      return null;
-    }
-    const partitionedDbHelp = this.props.partitionedDbHelpText ? (
-      <Accordion className='partitioned-db-help'>
-        <AccordionItem title='What is a Partitioned Database?'>
-          <p dangerouslySetInnerHTML={{__html: this.props.partitionedDbHelpText}} />
-        </AccordionItem>
-      </Accordion>
-    ) : null;
-    return (
-      <div className='partitioned-db-section' >
-        <label htmlFor="partitioned-db" className='partitioned-db-label'>
-          Partitioning
-        </label>
-        <div className='partitioned-db-options'>
-          <input
-            id="partitioned-db"
-            type="radio"
-            checked={this.state.partitionedSelected === true}
-            onChange={this.onSetPartitioned} />
-          <label htmlFor="partitioned-db">Partitioned</label>
-          <input
-            id="non-partitioned-db"
-            type="radio"
-            checked={this.state.partitionedSelected === false}
-            onChange={this.onSetNotPartitioned} />
-          <label htmlFor="non-partitioned-db">Non-partitioned</label>
-        </div>
-        {partitionedDbHelp}
-      </div>
-    );
-  }
-
-  render() {
-    const classNames = classnames('new-database-tray', {
-      'new-database-tray--expanded': this.props.showPartitionedOption
-    });
-
-    return (
-      <div>
-        <ToggleHeaderButton
-          selected={this.state.isPromptVisible}
-          toggleCallback={this.onTrayToggle}
-          containerClasses='header-control-box add-new-database-btn'
-          title="Create Database"
-          fonticon="fonticon-new-database"
-          text="Create Database" />
-        <TrayContents
-          className={classNames}
-          contentVisible={this.state.isPromptVisible}
-          closeTray={this.closeTray}
-          onEnter={this.focusInput} >
-          <div className='tray-contents'>
-            <div className='tray-header'>
-              <h3>Create Database</h3>
-            </div>
-            <div className='tray-body'>
-              <label htmlFor="js-new-database-name" className='db-name-label'>
-                Database name
-              </label>
-              <input
-                id="js-new-database-name"
-                ref={node => this.newDbName = node}
-                type="text"
-                value={this.state.databaseName}
-                onChange={this.onChange} onKeyUp={this.onKeyUpInInput}
-                className="input-xxlarge"
-                placeholder="database-name"
-              />
-              {this.partitionedOption()}
-            </div>
-            <div className='tray-footer'>
-              <a className="btn btn-cancel" id="js-cancel-create-database" onClick={this.closeTray}>
-                Cancel
-              </a>
-              <a className="btn btn-primary" id="js-create-database" onClick={this.onAddDatabase}>
-                Create
-              </a>
-            </div>
-          </div>
-        </TrayContents>
-      </div>
-    );
-  }
-}
-
-
-const JumpToDatabaseWidget = ({ loadOptions }) => {
-  return (
-    <div data-name="jump-to-db" className="faux-header__searchboxwrapper">
-      <div className="faux-header__searchboxcontainer">
-
-        <Components.ThrottledReactSelectAsync
-          placeholder="Database name"
-          loadOptions={loadOptions}
-          clearable={false}
-          onChange={({ value: databaseName }) => {
-            Actions.jumpToDatabase(databaseName);
-          }} />
-
-      </div>
-    </div>
-  );
-};
-JumpToDatabaseWidget.propTypes = {
-  loadOptions: PropTypes.func.isRequired
-};
-
-class DatabasePagination extends React.Component {
-  static defaultProps = {
-    linkPath: '_all_dbs',
-    store: databasesStore
-  };
-
-  getStoreState = (props) => {
-    const { store } = props;
-
-    return {
-      totalAmountOfDatabases: store.getTotalAmountOfDatabases(),
-      page: store.getPage(),
-      limit: store.getLimit()
-    };
-  };
-
-  componentDidMount() {
-    const { store } = this.props;
-
-    store.on('change', this.onChange, this);
-  }
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    this.setState(this.getStoreState(nextProps));
-    if (this.props.store) {
-      this.props.store.off('change', this.onChange, this);
-    }
-    const { store } = nextProps;
-    store.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount() {
-    const { store } = this.props;
-    store.off('change', this.onChange, this);
-  }
-
-  onChange = () => {
-    this.setState(this.getStoreState(this.props));
-  };
-
-  state = this.getStoreState(this.props);
-
-  onPageLinkClick(pageNumber) {
-    const url = `#/${this.props.linkPath}?page=${pageNumber}&limit=${this.state.limit}`;
-    FauxtonAPI.navigate(url);
-  }
-
-  onPerPageSelected(perPage) {
-    const url = `#/${this.props.linkPath}?page=${this.state.page}&limit=${perPage}`;
-    FauxtonAPI.navigate(url);
-  }
-
-  render() {
-    const { limit, page, totalAmountOfDatabases } = this.state;
-    const start = 1 + (page - 1) * limit;
-    const end = Math.min(totalAmountOfDatabases, page * limit);
-
-    return (
-      <footer className="all-db-footer pagination-footer">
-        <div id="database-pagination">
-          <FauxtonComponentsReact.Pagination
-            page={page}
-            total={totalAmountOfDatabases}
-            perPage={limit}
-            onClick={this.onPageLinkClick.bind(this)}
-          />
-        </div>
-        <PerPageSelector label="Databases per page" perPage={limit} perPageChange={this.onPerPageSelected.bind(this)} />
-        <div className="current-databases">
-          Showing <span className="all-db-footer__range">{start}&ndash;{end}</span>
-          &nbsp;of&nbsp;<span className="all-db-footer__total-db-count">{totalAmountOfDatabases}</span>
-          &nbsp;databases.
-        </div>
-      </footer>
-    );
-  }
-}
-
-export default {
-  DatabasesController: DatabasesController,
-  DatabaseTable: DatabaseTable,
-  DatabaseRow: DatabaseRow,
-  RightDatabasesHeader: RightDatabasesHeader,
-  GraveyardInfo: GraveyardInfo,
-  AddDatabaseWidget: AddDatabaseWidget,
-  JumpToDatabaseWidget: JumpToDatabaseWidget,
-  DatabasePagination: DatabasePagination
-};
diff --git a/app/addons/databases/layout.js b/app/addons/databases/layout.js
deleted file mode 100644
index 8fe25e0..0000000
--- a/app/addons/databases/layout.js
+++ /dev/null
@@ -1,39 +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.
-
-import app from '../../app';
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import {OnePane, OnePaneHeader, OnePaneContent, OnePaneFooter} from '../components/layouts';
-import Components from "./components";
-const {RightDatabasesHeader, DatabasesController, DatabasePagination} = Components;
-
-export const Layout = () => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={[{"name": "Databases"}]}
-        endpoint={FauxtonAPI.urls('allDBs', 'apiurl')}
-        docURL={FauxtonAPI.constants.DOC_URLS.ALL_DBS}
-      >
-        <RightDatabasesHeader partitionedDbHelpText={app.i18n.en_US['create-db-partitioned-help']}/>
-      </OnePaneHeader>
-      <OnePaneContent>
-        <DatabasesController />
-      </OnePaneContent>
-      <OnePaneFooter>
-        <DatabasePagination />
-      </OnePaneFooter>
-    </OnePane>
-  );
-};
-export default Layout;
diff --git a/app/addons/databases/reducers.js b/app/addons/databases/reducers.js
deleted file mode 100644
index 2c0c260..0000000
--- a/app/addons/databases/reducers.js
+++ /dev/null
@@ -1,52 +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.
-
-import ActionTypes from './actiontypes';
-const initialState = {
-  partitionedDatabasesAvailable: false,
-  isLoadingDbInfo: true,
-  dbInfo: undefined,
-  isDbPartitioned: false
-};
-
-export function isPartitioned(metadata) {
-  if (metadata && metadata.props && metadata.props.partitioned === true) {
-    return true;
-  }
-  return false;
-}
-
-export default function databases(state = initialState, action) {
-  switch (action.type) {
-    case ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE:
-      return {
-        ...state,
-        partitionedDatabasesAvailable: action.options.available
-      };
-    case ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA:
-      return {
-        ...state,
-        isLoadingDbInfo: true,
-        dbInfo: undefined,
-        isDbPartitioned: false
-      };
-    case ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS:
-      return {
-        ...state,
-        isLoadingDbInfo: false,
-        dbInfo: action.options.metadata,
-        isDbPartitioned: isPartitioned(action.options.metadata)
-      };
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/databases/resources.js b/app/addons/databases/resources.js
deleted file mode 100644
index cd3af48..0000000
--- a/app/addons/databases/resources.js
+++ /dev/null
@@ -1,115 +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.
-
-import app from "../../app";
-import Helpers from "../../helpers";
-import FauxtonAPI from "../../core/api";
-import Documents from "../documents/resources";
-var Databases = FauxtonAPI.addon();
-
-Databases.DocLimit = 100;
-
-Databases.Model = FauxtonAPI.Model.extend({
-
-  partitioned: false,
-
-  setPartitioned: function (partitioned) {
-    this.partitioned = partitioned;
-  },
-
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.ALL_DBS;
-  },
-
-  buildAllDocs: function (params) {
-    this.allDocs = new Documents.AllDocs(null, {
-      database: this,
-      params: params
-    });
-
-    return this.allDocs;
-  },
-
-  isNew: function () {
-    // Databases are never new, to make Backbone do a PUT
-    return false;
-  },
-
-  isSystemDatabase: function () {
-    return app.utils.isSystemDatabase(this.id);
-  },
-
-  url: function (context) {
-    if (context === "index") {
-      return "/database/" + this.safeID() + "/_all_docs";
-    } else if (context === "web-index") {
-      return "#/database/" + this.safeID() + "/_all_docs?limit=" + Databases.DocLimit;
-    } else if (context === "apiurl") {
-      return Helpers.getApiUrl("/database/" + this.safeID() + "/_all_docs");
-    } else if (context === "changes") {
-      return FauxtonAPI.urls('changes', 'app', this.safeID(), '', '?descending=true&limit=100&include_docs=true');
-    } else if (context === "changes-apiurl") {
-      return FauxtonAPI.urls('changes', 'apiurl', this.safeID(), '?descending=true&limit=100&include_docs=true');
-    } else if (context === "app") {
-      return "/database/" + this.safeID();
-    }
-    if (this.partitioned) {
-      return Helpers.getServerUrl("/" + this.safeID()) + '?partitioned=true';
-    }
-    return Helpers.getServerUrl("/" + this.safeID());
-
-  },
-
-  safeID: function () {
-    return app.utils.safeURLName(this.id);
-  },
-  buildChanges: function (params) {
-    if (!params.limit) {
-      params.limit = 100;
-    }
-
-    this.changes = new Databases.Changes({
-      database: this,
-      params: params
-    });
-
-    return this.changes;
-  }
-});
-
-Databases.Changes = FauxtonAPI.Collection.extend({
-
-  initialize: function (options) {
-    this.database = options.database;
-    this.params = options.params;
-  },
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.CHANGES;
-  },
-  url: function (context) {
-    var query = "";
-    if (this.params) {
-      query = "?" + app.utils.queryParams(this.params);
-    }
-
-    if (!context) { context = 'server';}
-
-    return FauxtonAPI.urls('changes', context, this.database.safeID(), query);
-  },
-
-  parse: function (resp) {
-    this.last_seq = resp.last_seq;
-    return resp.results;
-  }
-});
-
-export default Databases;
diff --git a/app/addons/databases/routes.js b/app/addons/databases/routes.js
deleted file mode 100644
index 584993d..0000000
--- a/app/addons/databases/routes.js
+++ /dev/null
@@ -1,63 +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.
-
-import app from '../../app';
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import Actions from "./actions";
-import Databases from "./resources";
-import Layout from './layout';
-
-const AllDbsRouteObject = FauxtonAPI.RouteObject.extend({
-  hideApiBar: true,
-  hideNotificationCenter: true,
-
-  routes: {
-    "": "allDatabases",
-    "index.html": "allDatabases",
-    "_all_dbs(:extra)": "allDatabases"
-  },
-
-  roles: ['fx_loggedIn'],
-
-  selectedHeader: "Databases",
-
-  allDatabases: function (_, params) {
-    const {page, limit} = this.createParams(params);
-    Actions.setPage(page);
-    if (limit) {
-      Actions.setLimit(limit);
-    }
-    return <Layout />;
-  },
-
-  createParams: function (options) {
-    let page = 1;
-    let limit = undefined;
-    if (options) {
-      const urlParams = app.getParams(options);
-      if (isFinite(parseInt(urlParams.page))) {
-        page = parseInt(urlParams.page);
-      }
-      if (isFinite(parseInt(urlParams.limit))) {
-        limit = parseInt(urlParams.limit);
-      }
-    }
-    return {
-      page,
-      limit
-    };
-  }
-});
-Databases.RouteObjects = [AllDbsRouteObject];
-
-export default Databases;
diff --git a/app/addons/databases/stores.js b/app/addons/databases/stores.js
deleted file mode 100644
index 06c1757..0000000
--- a/app/addons/databases/stores.js
+++ /dev/null
@@ -1,179 +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.
-
-import app from '../../app';
-import FauxtonAPI from "../../core/api";
-import ActionTypes from "./actiontypes";
-import Resources from "./resources";
-import Helpers from "../../helpers";
-
-function loadDatabasesPerPage() {
-  let dbsPerPage = app.utils.localStorageGet('fauxton:dbs_per_page');
-  if (!dbsPerPage) {
-    dbsPerPage = FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE;
-  }
-  return dbsPerPage;
-}
-
-const Database = Resources.Model;
-
-const DatabasesStoreConstructor = FauxtonAPI.Store.extend({
-
-  initialize: function () {
-    this.reset();
-  },
-
-  reset: function () {
-    this._loading = false;
-    this._promptVisible = false;
-    this._page = 1;
-    this._limit = loadDatabasesPerPage();
-
-    this._dbList = [];
-    this._databaseDetails = [];
-    this._failedDbs = [];
-    this._fullDbList = [];
-
-    this._partitionedDatabasesAvailable = false;
-  },
-
-  getPage: function () {
-    return this._page;
-  },
-
-  getLimit: function () {
-    return this._limit;
-  },
-
-  setLimit: function (limit) {
-    this._limit = limit;
-    app.utils.localStorageSet('fauxton:dbs_per_page', limit);
-  },
-
-  isLoading: function () {
-    return this._loading;
-  },
-
-  setLoading: function (loading) {
-    this._loading = loading;
-  },
-
-  isPromptVisible: function () {
-    return this._promptVisible;
-  },
-
-  setPromptVisible: function (promptVisible) {
-    this._promptVisible = promptVisible;
-  },
-
-  obtainNewDatabaseModel: function (databaseName, partitioned) {
-    const dbModel = new Database({
-      id: databaseName,
-      name: databaseName
-    });
-    dbModel.setPartitioned(partitioned);
-    return dbModel;
-  },
-
-  doesDatabaseExist: function (databaseName) {
-    return this._dbList.indexOf(databaseName) !== -1;
-  },
-
-  getTotalAmountOfDatabases: function () {
-    return this._fullDbList.length;
-  },
-
-  getDbList: function () {
-    return this._dbList.map((db) => {
-
-      const allDetails = this._databaseDetails.filter((el) => { return el.db_name === db; });
-      const data = {
-        id: db,
-        encodedId: encodeURIComponent(db),
-        url: FauxtonAPI.urls('allDocsSanitized', 'app', db),
-        failed: this._failedDbs.indexOf(db) !== -1
-      };
-
-      const res = Object.assign({}, data, this._getDetails(allDetails[0]));
-      return res;
-    });
-  },
-
-  _getDetails: function (details) {
-    if (!details) {
-      return {};
-    }
-    const {sizes} = details;
-    const dataSize = (sizes && sizes.active) || (sizes && sizes.external) || details.data_size || 0;
-
-    return {
-      dataSize: Helpers.formatSize(dataSize),
-      docCount: details.doc_count,
-      docDelCount: details.doc_del_count,
-      showTombstoneWarning: details.doc_del_count > details.doc_count,
-      isPartitioned: details.props && details.props.partitioned === true
-    };
-  },
-
-  isPartitionedDatabasesAvailable: function () {
-    return this._partitionedDatabasesAvailable;
-  },
-
-  dispatch: function (action) {
-    switch (action.type) {
-      case ActionTypes.DATABASES_SETPAGE:
-        this._page = action.options.page;
-        break;
-
-      case ActionTypes.DATABASES_SETLIMIT:
-        this.setLimit(action.options.limit);
-        break;
-
-      case ActionTypes.DATABASES_SET_PROMPT_VISIBLE:
-        this.setPromptVisible(action.options.visible);
-        break;
-
-      case ActionTypes.DATABASES_STARTLOADING:
-        this.setLoading(true);
-        break;
-
-      case ActionTypes.DATABASES_LOADCOMPLETE:
-        this.setLoading(false);
-        break;
-
-      case ActionTypes.DATABASES_UPDATE:
-        this._fullDbList = action.options.fullDbList;
-        this._dbList = action.options.dbList;
-        this._databaseDetails = action.options.databaseDetails;
-        this._failedDbs = action.options.failedDbs;
-        this.setLoading(false);
-        break;
-
-      case ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE:
-        this._partitionedDatabasesAvailable = action.options.available;
-        break;
-
-      default:
-        return;
-    }
-
-    this.triggerChange();
-  }
-});
-
-const databasesStore = new DatabasesStoreConstructor();
-databasesStore.dispatchToken = FauxtonAPI.dispatcher.register(databasesStore.dispatch.bind(databasesStore));
-
-export default {
-  databasesStore: databasesStore,
-  DatabasesStoreConstructor: DatabasesStoreConstructor
-};
diff --git a/app/addons/databases/tests/nightwatch/checkDatabaseTooltip.js b/app/addons/databases/tests/nightwatch/checkDatabaseTooltip.js
deleted file mode 100644
index 5da4cb2..0000000
--- a/app/addons/databases/tests/nightwatch/checkDatabaseTooltip.js
+++ /dev/null
@@ -1,50 +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.
-
-
-
-module.exports = {
-  'Check the tooltip icon for DB with deleted items appears': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'TemporaryDoc';
-
-    client
-      // use nano to quickly set up a DB with a single doc
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .createDocument(newDocumentName, newDatabaseName)
-
-      .loginToGUI()
-
-      // delete the document manually. This'll ensure the database page has at least one "!" icon
-      .waitForElementPresent('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .click('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]')
-
-      //this opens the alternative header
-      .clickWhenVisible('.tableview-checkbox-cell input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-
-      .checkForStringPresent(newDatabaseName, '"doc_del_count":1')
-
-      .clickWhenVisible('#primary-navbar a[href="#/_all_dbs"]')
-      // now let's look at the actual UI to confirm the tooltip appears
-      .waitForElementPresent('.js-db-graveyard', waitTime, false)
-      .moveToElement('.js-db-graveyard', 1, 1)
-
-      // confirm the tooltip element has been inserted
-      .waitForElementPresent('.tooltip.fade.top.in', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/createsDatabase.js b/app/addons/databases/tests/nightwatch/createsDatabase.js
deleted file mode 100644
index 1a6da87..0000000
--- a/app/addons/databases/tests/nightwatch/createsDatabase.js
+++ /dev/null
@@ -1,96 +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 newDatabaseName = 'fauxton-selenium-tests-db-create';
-var invalidDatabaseName = 'fauxton-selenium-tests-#####';
-var helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-module.exports = {
-  '@tags': ['nonpartitioned'],
-
-  before: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      console.warn(`Could not delete ${newDatabaseName} db`);
-      done();
-    });
-  },
-
-  'Creates a Database' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .url(baseUrl)
-
-      // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [newDatabaseName])
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementNotPresent('.new-database-tray', waitTime, false)
-      .checkForDatabaseCreated(newDatabaseName, waitTime)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(newDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent > 0,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  },
-
-  'Creates a Database with invalid name' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(invalidDatabaseName, waitTime)
-      .url(baseUrl)
-
-    // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [invalidDatabaseName])
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(invalidDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent === -1,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/createsDatabasePartitioned.js b/app/addons/databases/tests/nightwatch/createsDatabasePartitioned.js
deleted file mode 100644
index 60d9896..0000000
--- a/app/addons/databases/tests/nightwatch/createsDatabasePartitioned.js
+++ /dev/null
@@ -1,98 +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 newDatabaseName = 'fauxton-selenium-tests-db-create';
-var invalidDatabaseName = 'fauxton-selenium-tests-#####';
-var helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-module.exports = {
-  '@tags': ['partitioned'],
-
-  before: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      console.warn(`Could not delete ${newDatabaseName} db`);
-      done();
-    });
-  },
-
-  'Creates a Database' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .url(baseUrl)
-
-      // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [newDatabaseName])
-      .clickWhenVisible('#non-partitioned-db', waitTime, false)
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementNotPresent('.new-database-tray', waitTime, false)
-      .checkForDatabaseCreated(newDatabaseName, waitTime)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(newDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent > 0,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  },
-
-  'Creates a Database with invalid name' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(invalidDatabaseName, waitTime)
-      .url(baseUrl)
-
-    // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [invalidDatabaseName])
-      .clickWhenVisible('#non-partitioned-db', waitTime, false)
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(invalidDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent === -1,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/deletesDatabase.js b/app/addons/databases/tests/nightwatch/deletesDatabase.js
deleted file mode 100644
index 9c6926d..0000000
--- a/app/addons/databases/tests/nightwatch/deletesDatabase.js
+++ /dev/null
@@ -1,57 +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.
-
-
-
-module.exports = {
-  'Deletes a database': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .end();
-  },
-
-  'Deletes a database from the list': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/_all_dbs/')
-
-      .waitForElementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .assert.elementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]')
-      .clickWhenVisible('[title="Delete ' + newDatabaseName + '"]', waitTime, false)
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-      .closeNotifications()
-      .waitForElementPresent('.fauxton-table-list', waitTime, false)
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .assert.not.elementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]')
-
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/deletesDatabaseSpecialChars.js b/app/addons/databases/tests/nightwatch/deletesDatabaseSpecialChars.js
deleted file mode 100644
index 363dadd..0000000
--- a/app/addons/databases/tests/nightwatch/deletesDatabaseSpecialChars.js
+++ /dev/null
@@ -1,57 +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.
-
-const newDatabaseName = 'one/two-three/_four';
-
-module.exports = {
-  'Deletes a database with special chars': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-
-      .end();
-  },
-
-  'Deletes a database from the list with special chars': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/_all_dbs/')
-
-      .waitForElementPresent('a[href="database/' + encodeURIComponent(newDatabaseName) + '/_all_docs"]', waitTime, false)
-      .assert.elementPresent('a[href="database/' + encodeURIComponent(newDatabaseName) + '/_all_docs"]')
-      .clickWhenVisible('[title="Delete ' + newDatabaseName + '"]', waitTime, false)
-      .waitForElementPresent('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-      .closeNotifications()
-      .waitForElementPresent('.fauxton-table-list', waitTime, false)
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .assert.not.elementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]')
-
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/permissionsDbTable.js b/app/addons/databases/tests/nightwatch/permissionsDbTable.js
deleted file mode 100644
index 1c3b8d7..0000000
--- a/app/addons/databases/tests/nightwatch/permissionsDbTable.js
+++ /dev/null
@@ -1,38 +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.
-
-module.exports = {
-
-  '@tags': ['couchdb-v2-only'],
-
-  'lists databases with a 401' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-
-    const userDoc = {
-      "_id": "org.couchdb.user:furbie",
-      "name": "furbie",
-      "type": "user",
-      "roles": [],
-      "password": "furbie"
-    };
-
-    client
-      .createDocument('org.couchdb.user:furbie', '_users', userDoc)
-      .loginToGUI('furbie', 'furbie')
-
-      .waitForElementVisible('.database-load-fail', waitTime, false)
-      .waitForElementVisible('[data-name="database-load-fail-name"]', waitTime, false)
-      .assert.containsText('[data-name="database-load-fail-name"]', '_global_changes')
-
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/specialCharListLinks.js b/app/addons/databases/tests/nightwatch/specialCharListLinks.js
deleted file mode 100644
index 2cb3c57..0000000
--- a/app/addons/databases/tests/nightwatch/specialCharListLinks.js
+++ /dev/null
@@ -1,48 +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.
-
-
-const testDatabases = [
-  't/t',
-  't/t-/t_f',
-  't/t/_f',
-  't/t-//t_f'
-];
-
-const tests = testDatabases.reduce((tests, db) => {
-  tests[`Db List works with special chars ${db}`] = createTest(db);
-  return tests;
-}, {});
-
-module.exports = tests;
-
-function createTest (db) {
-  return (client) => {
-
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(db)
-      .loginToGUI()
-
-      .url(baseUrl + '#/_all_dbs')
-      .clickWhenVisible(`.fauxton-table-list a[href="database/${encodeURIComponent(db)}/_all_docs"]`)
-
-      .waitForElementVisible('.faux-header__doc-header-title', waitTime, false)
-      .waitForElementVisible('.no-results-screen', waitTime, false)
-
-      .assert.containsText('.no-results-screen', 'No Documents Found')
-      .assert.containsText('.faux-header__doc-header-title', db)
-      .end();
-  };
-}
diff --git a/app/addons/databases/tests/nightwatch/switchDatabase.js b/app/addons/databases/tests/nightwatch/switchDatabase.js
deleted file mode 100644
index 488d84c..0000000
--- a/app/addons/databases/tests/nightwatch/switchDatabase.js
+++ /dev/null
@@ -1,44 +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.
-
-
-
-module.exports = {
-  'Confirm selecting database via typeahead redirects properly': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the footer bar to appear (not strictly necessary, but ensures it shows up)
-      .waitForElementPresent('.faux__onepane-footer .pagination-footer', waitTime, false)
-      .getCssProperty('.faux__onepane-footer', 'bottom', function (result) {
-        this.assert.equal(result.value, '0px');
-      })
-      // wait for the DB name typeahead field to appear in the header
-      .waitForElementPresent('[data-name="jump-to-db"]', waitTime, false)
-      .waitForElementPresent('#dashboard-content table.databases', waitTime, false)
-      .clickWhenVisible('[data-name="jump-to-db"] .Select-placeholder')
-      .setValue('[data-name="jump-to-db"] input', [newDatabaseName])
-      .waitForElementPresent('.Select-option', waitTime, false)
-      .keys([client.Keys.ENTER])
-      .waitForElementPresent('.index-pagination', waitTime, false)
-      // now check we've redirected and the URL ends with /_all_docs
-      .url((result) => {
-        const urlEndsWithAllDocs = /all_docs$/.test(result.value);
-        client.assert.ok(urlEndsWithAllDocs, 'Redirected properly');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/documentation/assets/less/documentation.less b/app/addons/documentation/assets/less/documentation.less
deleted file mode 100644
index cd56858..0000000
--- a/app/addons/documentation/assets/less/documentation.less
+++ /dev/null
@@ -1,72 +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.*/
-
-#documentation-page {
-
-  table{
-    margin: 50px;
-
-    .icons-container {
-      width: 80px;
-      height: 80px;
-      max-width: 200px;
-      max-height: 100px;
-      padding-right: 20px;
-    }
-
-    .couchdb-icon {
-      background: transparent url('../../../../../assets/img/couchdb-logo.png') no-repeat 50% 50%;
-      height: 60px;
-      width: 60px;
-      background-size: 60px auto;
-    }
-
-    .github-icon {
-      background: transparent url('../../../../../assets/img/github.png') no-repeat 50% 50%;
-      height: 40px;
-      width: 40px;
-      background-size: 40px auto;
-    }
-
-    .asf-feather-icon {
-      background: transparent url('../../../../../assets/img/asf-feather-logo.png') no-repeat 50% 50%;
-      height: 70px;
-      width: 100px;
-      background-size: 70px;
-    }
-
-    .linkedin-icon {
-      background: transparent url('../../../../../assets/img/linkedin.png') no-repeat 50% 50%;
-      height: 40px;
-      width: 40px;
-      background-size: 40px auto;
-    }
-
-    .google-plus-icon {
-      background: transparent url('../../../../../assets/img/googleplus.png') no-repeat 50% 50%;
-      height: 40px;
-      width: 40px;
-      background-size: 40px auto;
-    }
-
-    .twitter-icon {
-      background: transparent url('../../../../../assets/img/twitter.png') no-repeat 50% 50%;
-      height: 50px;
-      width: 50px;
-      background-size: 60px;
-    }
-
-    .icon {
-      margin: auto;
-    }
-  }
-}
diff --git a/app/addons/documentation/base.js b/app/addons/documentation/base.js
deleted file mode 100644
index 28e68d6..0000000
--- a/app/addons/documentation/base.js
+++ /dev/null
@@ -1,28 +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.
-
-import FauxtonAPI from "../../core/api";
-import Documentation from "./routes";
-import "./assets/less/documentation.less";
-
-Documentation.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    id: 'Documentation',
-    title: 'Documentation',
-    icon: 'fonticon-bookmark',
-    href: '#/documentation',
-    bottomNav: true,
-    top: true
-  });
-};
-
-export default Documentation;
diff --git a/app/addons/documentation/components.js b/app/addons/documentation/components.js
deleted file mode 100644
index f6cbdd8..0000000
--- a/app/addons/documentation/components.js
+++ /dev/null
@@ -1,105 +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.
-
-import React from "react";
-
-const docLinks = [
-  {
-    title: 'CouchDB Official Documentation — Online',
-    link: 'http://docs.couchdb.org/en/latest/',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB Official Documentation — Offline',
-    link: './docs/index.html',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB Weekly News',
-    link: 'http://blog.couchdb.org/',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB Homepage',
-    link: 'https://couchdb.apache.org/',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB on GitHub',
-    link: 'https://github.com/apache/couchdb',
-    iconClassName: 'github-icon'
-  },
-  {
-    title: 'Fauxton on GitHub',
-    link: 'https://github.com/apache/couchdb-fauxton',
-    iconClassName: 'github-icon'
-  },
-  {
-    title: 'Fauxton Visual Guide',
-    link: 'https://couchdb.apache.org/fauxton-visual-guide/index.html',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'The Apache Software Foundation',
-    link: 'http://www.apache.org/',
-    iconClassName: 'asf-feather-icon'
-  },
-  {
-    title: 'Follow CouchDB on Twitter',
-    link: 'https://twitter.com/couchdb',
-    iconClassName: 'twitter-icon'
-  },
-  {
-    title: 'Follow CouchDB on Google Plus',
-    link: 'https://plus.google.com/+CouchDB',
-    iconClassName: 'google-plus-icon'
-  },
-  {
-    title: 'Follow CouchDB on LinkedIn',
-    link: 'https://www.linkedin.com/company/apache-couchdb',
-    iconClassName: 'linkedin-icon'
-  }
-];
-
-const DocumentationPage = ({links = docLinks}) => {
-
-  function createLinkRows (linkList) {
-    return linkList.map(function (linkObject) {
-      return (
-        <tr key={linkObject.title}>
-          <td className="icons-container">
-            <div className={"icon " + linkObject.iconClassName}> </div>
-          </td>
-          <td>
-            <a href={linkObject.link} target="_blank" rel="noopener noreferrer" data-bypass="true">{linkObject.title}</a>
-          </td>
-        </tr>
-      );
-    });
-  }
-
-  return (
-    <div id="documentation-page" className="scrollable">
-      <div className="links">
-        <table>
-          <tbody>
-            {createLinkRows(links)}
-          </tbody>
-        </table>
-      </div>
-    </div>
-  );
-};
-
-export default {
-  DocumentationPage: DocumentationPage
-};
diff --git a/app/addons/documentation/routes.js b/app/addons/documentation/routes.js
deleted file mode 100644
index 1d828ca..0000000
--- a/app/addons/documentation/routes.js
+++ /dev/null
@@ -1,37 +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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import DocumentationComponents from "./components";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-var DocumentationRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Documentation',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-  routes: {
-    'documentation': 'documentation'
-  },
-  roles: ['fx_loggedIn'],
-  documentation: function () {
-    return <OnePaneSimpleLayout
-      component={<DocumentationComponents.DocumentationPage/>}
-      crumbs={[
-        {'name': 'Documentation'}
-      ]}
-    />;
-  }
-});
-DocumentationRouteObject.RouteObjects = [DocumentationRouteObject];
-
-export default DocumentationRouteObject;
diff --git a/app/addons/documentation/tests/nightwatch/checksDocsPage.js b/app/addons/documentation/tests/nightwatch/checksDocsPage.js
deleted file mode 100644
index 0fc5baa..0000000
--- a/app/addons/documentation/tests/nightwatch/checksDocsPage.js
+++ /dev/null
@@ -1,35 +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.
-
-
-
-module.exports = {
-  'Check the documentation page exists': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-
-    client
-      .loginToGUI()
-      .clickWhenVisible('a[href="#/documentation"]')
-      .waitForElementVisible('a[href="http://docs.couchdb.org/en/latest/"]', waitTime, false)
-      .waitForElementVisible('a[href="./docs/index.html"]', waitTime, false)
-      .waitForElementVisible('a[href="http://blog.couchdb.org/"]', waitTime, false)
-      .waitForElementVisible('a[href="https://couchdb.apache.org/"]', waitTime, false)
-      .waitForElementVisible('a[href="https://github.com/apache/couchdb"]', waitTime, false)
-      .waitForElementVisible('a[href="https://github.com/apache/couchdb-fauxton"]', waitTime, false)
-      .waitForElementVisible('a[href="https://couchdb.apache.org/fauxton-visual-guide/index.html"]', waitTime, false)
-      .waitForElementVisible('a[href="http://www.apache.org/"]', waitTime, false)
-      .waitForElementVisible('a[href="https://twitter.com/couchdb"]', waitTime, false)
-      .waitForElementVisible('a[href="https://plus.google.com/+CouchDB"]', waitTime, false)
-      .waitForElementVisible('a[href="https://www.linkedin.com/company/apache-couchdb"]', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/__tests__/additional-params.test.js b/app/addons/documents/__tests__/additional-params.test.js
deleted file mode 100644
index 1231e3a..0000000
--- a/app/addons/documents/__tests__/additional-params.test.js
+++ /dev/null
@@ -1,58 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import AdditionalParams from '../index-results/components/queryoptions/AdditionalParams';
-import sinon from 'sinon';
-
-describe('AdditionalParams', () => {
-  it('updateSkip is called after change', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<AdditionalParams
-      limit={10}
-      descending={false}
-      skip={0}
-      updateSkip={spy}
-    />);
-
-    wrapper.find('#qoSkip').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('updateLimit is called after change', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<AdditionalParams
-      limit={10}
-      descending={false}
-      skip={0}
-      updateLimit={spy}
-    />);
-
-    wrapper.find('#qoLimit').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('toggleDescending is called after change', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<AdditionalParams
-      limit={10}
-      descending={false}
-      skip={0}
-      toggleDescending={spy}
-    />);
-
-    wrapper.find('#qoDescending').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/base-actions.test.js b/app/addons/documents/__tests__/base-actions.test.js
deleted file mode 100644
index 608e738..0000000
--- a/app/addons/documents/__tests__/base-actions.test.js
+++ /dev/null
@@ -1,177 +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.
-
-import {
-  nowLoading,
-  resetState,
-  newResultsAvailable,
-  newSelectedDocs,
-  selectDoc,
-  bulkCheckOrUncheck,
-  changeLayout,
-  changeTableHeaderAttribute
-} from '../index-results/actions/base';
-import ActionTypes from '../index-results/actiontypes';
-import Constants from '../constants';
-
-describe('Docs Base API', () => {
-  let docs;
-  beforeEach(() => {
-    docs = [
-      {
-        _id: 'test1',
-        _rev: 'foo'
-      },
-      {
-        _id: 'test2',
-        _rev: 'bar'
-      }
-    ];
-  });
-
-  it('nowLoading returns the proper event to dispatch', () => {
-    expect(nowLoading()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING
-    });
-  });
-
-  it('resetState returns the proper event to dispatch', () => {
-    expect(resetState()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE
-    });
-  });
-
-  it('newResultsAvailable returns the proper event to dispatch', () => {
-    const params = {
-      skip: 0,
-      limit: 21
-    };
-    const canShowNext = true;
-    const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-
-    expect(newResultsAvailable(docs, params, canShowNext, docType)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-      docs: docs,
-      params: params,
-      canShowNext: canShowNext,
-      docType: docType
-    });
-  });
-
-  it('newSelectedDocs returns the proper event to dispatch', () => {
-    const selectedDocs = [
-      {
-        _id: 'test1',
-        _rev: 'foo',
-        _deleted: true
-      }
-    ];
-
-    expect(newSelectedDocs(selectedDocs)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: selectedDocs
-    });
-  });
-
-  it('selectDoc returns the proper event to dispatch', () => {
-    const doc = {
-      _id: 'apple',
-      _rev: 'pie',
-      _deleted: true
-    };
-
-    const selectedDocs = [
-      {
-        _id: 'test1',
-        _rev: 'foo',
-        _deleted: true
-      }
-    ];
-
-    expect(selectDoc(doc, selectedDocs)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: [
-        {
-          _id: 'test1',
-          _rev: 'foo',
-          _deleted: true
-        },
-        {
-          _id: 'apple',
-          _rev: 'pie',
-          _deleted: true
-        }
-      ]
-    });
-  });
-
-  describe('bulkCheckOrUncheck', () => {
-    it('returns the proper event to dispatch when allDocumentsSelected false', () => {
-      const selectedDocs = [];
-      const allDocumentsSelected = false;
-      expect(bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected, Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY)).toEqual({
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [
-          {
-            _id: 'test1',
-            _rev: 'foo',
-            _deleted: true
-          },
-          {
-            _id: 'test2',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ]
-      });
-    });
-
-    it('returns the proper event to dispatch when allDocumentsSelected true', () => {
-      const selectedDocs = [
-        {
-          _id: 'test1',
-          _rev: 'foo',
-          _deleted: true
-        },
-        {
-          _id: 'test2',
-          _rev: 'bar',
-          _deleted: true
-        }
-      ];
-      const allDocumentsSelected = true;
-      expect(bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected)).toEqual({
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: []
-      });
-    });
-  });
-
-  it('changeLayout returns the proper event to dispatch', () => {
-    expect(changeLayout(Constants.LAYOUT_ORIENTATION.JSON)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT,
-      layout: Constants.LAYOUT_ORIENTATION.JSON
-    });
-  });
-
-  it('changeTableHeaderAttribute returns the proper event to dispatch', () => {
-    const selectedFields = ['_id', '_rev', 'foo'];
-    const newField = {
-      index: 1,
-      newSelectedRow: 'bar'
-    };
-    expect(changeTableHeaderAttribute(newField, selectedFields)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE,
-      selectedFieldsTableView: ['_id', 'bar', 'foo']
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/changes-reducers.test.js b/app/addons/documents/__tests__/changes-reducers.test.js
deleted file mode 100644
index 5931a72..0000000
--- a/app/addons/documents/__tests__/changes-reducers.test.js
+++ /dev/null
@@ -1,142 +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.
-
-import FauxtonAPI from '../../../core/api';
-import ActionTypes from '../changes/actiontypes';
-import reducer from '../changes/reducers';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Changes Reducer', () => {
-
-  const changesList = [
-    { id: 'doc_1', seq: 4, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_2', seq: 1, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_3', seq: 6, deleted: true, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_4', seq: 7, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_5', seq: 1, deleted: true, changes: { code: 'here' }, isNew: false }
-  ];
-
-  it('adds new filter to state', () => {
-    const filter = 'My filter';
-    const action = {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter
-    };
-    const newState = reducer(undefined, action);
-
-    expect(newState.filters.length).toBe(1);
-    expect(newState.filters[0]).toBe(filter);
-  });
-
-  it('removes filter from state', () => {
-    const filter1 = 'My filter 1';
-    const filter2 = 'My filter 2';
-    let newState = reducer(undefined, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: filter1
-    });
-    newState = reducer(newState, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: filter2
-    });
-    newState = reducer(newState, {
-      type: ActionTypes.REMOVE_CHANGES_FILTER_ITEM,
-      filter: filter1
-    });
-
-    expect(newState.filters.length).toBe(1);
-    expect(newState.filters[0]).toBe(filter2);
-  });
-
-  it('number of items is capped by maxChangesListed', () => {
-
-    // to keep the test speedy, we override the default max value
-    const maxChanges = 10;
-    const changes = [];
-    for (let i = 0; i < maxChanges + 10; i++) {
-      changes.push({ id: 'doc_' + i, seq: 1, changes: {}});
-    }
-    let state = reducer(undefined, {type: 'DO_NOTHING'});
-    state.maxChangesListed = maxChanges;
-
-    const seqNum = 123;
-    state = reducer(state, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum,
-      changes
-    });
-    expect(state.changes.length).toBe(changes.length);
-    expect(state.filteredChanges.length).toBe(maxChanges);
-  });
-
-  it('tracks last sequence number', () => {
-    let state = reducer(undefined, {type: 'DO_NOTHING'});
-    expect(state.lastSequenceNum).toBeNull();
-
-    const seqNum = 123;
-    state = reducer(state, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum,
-      changes: []
-    });
-
-    // confirm it's been stored
-    expect(state.lastSequenceNum).toBe(seqNum);
-  });
-
-  it('"true" filter should apply to change deleted status', () => {
-    let state = reducer(undefined, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum: 123,
-      changes: changesList
-    });
-
-    // add a filter
-    state = reducer(state, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: 'true'
-    });
-
-    // confirm only the two deleted items are part of filtered results
-    expect(state.filteredChanges.length).toBe(2);
-    state.filteredChanges.forEach(el => {
-      expect(el.deleted).toBe(true);
-    });
-  });
-
-  // confirms that if there are multiple filters, ALL are applied to return the subset of results that match
-  // all filters
-  it('multiple filters should all be applied to results', () => {
-    let state = reducer(undefined, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum: 123,
-      changes: changesList
-    });
-
-    // add the filters
-    state = reducer(state, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: 'true'
-    });
-    state = reducer(state, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: '1'
-    });
-
-    // confirm only doc_5 matches both filters
-    expect(state.filteredChanges.length).toBe(1);
-    expect(state.filteredChanges[0].id).toBe('doc_5');
-  });
-
-});
diff --git a/app/addons/documents/__tests__/changes.test.js b/app/addons/documents/__tests__/changes.test.js
deleted file mode 100644
index 6723f3c..0000000
--- a/app/addons/documents/__tests__/changes.test.js
+++ /dev/null
@@ -1,186 +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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-import ChangeRow from '../changes/components/ChangeRow';
-import ChangesScreen from '../changes/components/ChangesScreen';
-import ChangesTabContent from "../changes/components/ChangesTabContent";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-import '../base';
-
-
-describe('ChangesTabContent', () => {
-  const defaultProps = {
-    filters: [],
-    addFilter: () => {},
-    removeFilter: () => {}
-  };
-
-  it('should add filter badges', () => {
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      filters={['I wandered lonely as a filter', 'A second filter']}
-    />);
-
-    expect(el.find('.remove-filter').length).toBe(2);
-  });
-
-  it('should call addFilter action on click', () => {
-    const addFilterStub = sinon.stub();
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      addFilter={addFilterStub}
-    />);
-    const submitBtn = el.find('[type="submit"]'),
-          addItemField = el.find('.js-changes-filter-field');
-
-    addItemField.simulate('change', {target: {value: 'I wandered lonely as a filter'}});
-    submitBtn.simulate('submit');
-
-    expect(addFilterStub.calledOnce).toBeTruthy();
-  });
-
-  it('should call removeFilter action on click', () => {
-    const removeFilterStub = sinon.stub();
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      filters={['I wandered lonely as a filter']}
-      removeFilter={removeFilterStub}
-    />);
-    el.find('.remove-filter').simulate('click');
-
-    expect(removeFilterStub.calledOnce).toBeTruthy();
-  });
-
-  it('should not add empty filters', () => {
-    const addFilterStub = sinon.stub();
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      addFilter={addFilterStub}
-    />);
-    const submitBtn = el.find('[type="submit"]'),
-          addItemField = el.find('.js-changes-filter-field');
-
-    addItemField.simulate('change', {target: {value: ''}});
-    submitBtn.simulate('submit');
-
-    expect(addFilterStub.notCalled).toBeTruthy();
-  });
-
-  it('should not add badges by default', () => {
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-    />);
-    expect(el.find('.remove-filter').length).toBe(0);
-  });
-
-  it('should not add the same filter twice', () => {
-    const filters = [];
-    let callCount = 0;
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      addFilter={(f) => {filters.push(f); callCount++;}}
-      filters={filters}
-    />);
-    const submitBtn = el.find('[type="submit"]'),
-          addItemField = el.find('.js-changes-filter-field');
-
-    const filter = 'I am unique in the whole wide world';
-    addItemField.simulate('change', {target: {value: filter}});
-    submitBtn.simulate('submit');
-
-    addItemField.simulate('change', {target: {value: filter}});
-    submitBtn.simulate('submit');
-
-    expect(callCount).toBe(1);
-  });
-});
-
-
-describe('ChangesScreen', () => {
-  const changesList = [
-    { id: 'doc_1', seq: 4, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_2', seq: 1, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_3', seq: 6, deleted: true, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_4', seq: 7, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_5', seq: 1, deleted: true, changes: { code: 'here' }, isNew: false }
-  ];
-
-  const defaultProps = {
-    changes: [],
-    loaded: true,
-    databaseName: 'my_db',
-    isShowingSubset: false,
-    loadChanges: () => {}
-  };
-
-  it('should list the right number of changes', () => {
-    const changesEl = mount(<ChangesScreen
-      {...defaultProps}
-      changes={changesList}
-    />);
-
-    expect(changesEl.find('.change-box').length).toBe(changesList.length);
-  });
-
-  it('shows a No Docs Found message if no docs', () => {
-    const changesEl = mount(<ChangesScreen
-      {...defaultProps}
-    />);
-    expect(changesEl.html()).toMatch(/There\sare\sno\sdocument\schanges/);
-  });
-
-  it('should show a message if the results are truncated', () => {
-    const changesEl = mount(<ChangesScreen
-      {...defaultProps}
-      changes={changesList}
-      isShowingSubset={true}
-    />);
-    expect(changesEl.find('.changes-result-limit').length).toBe(1);
-  });
-});
-
-
-describe('ChangeRow', () => {
-  const change = {
-    id: '123',
-    seq: 5,
-    deleted: false,
-    changes: { code: 'here' }
-  };
-
-  it('clicking the toggle-json button shows the code section', function () {
-    const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
-
-    // confirm it's hidden by default
-    expect(changeRow.find('.prettyprint').length).toBe(0);
-
-    // confirm clicking it shows the element
-    changeRow.find('button.btn').simulate('click');
-    expect(changeRow.find('.prettyprint').length).toBe(1);
-  });
-
-  it('deleted docs should not be clickable', () => {
-    change.deleted = true;
-    const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
-    expect(changeRow.find('a.js-doc-link').length).toBe(0);
-  });
-
-  it('non-deleted docs should be clickable', () => {
-    change.deleted = false;
-    const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
-    expect(changeRow.find('a.js-doc-link').length).toBe(1);
-  });
-});
diff --git a/app/addons/documents/__tests__/designdocinfo-action.test.js b/app/addons/documents/__tests__/designdocinfo-action.test.js
deleted file mode 100644
index 2b0c523..0000000
--- a/app/addons/documents/__tests__/designdocinfo-action.test.js
+++ /dev/null
@@ -1,69 +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.
-
-import sinon from 'sinon';
-import FauxtonAPI from '../../../core/api';
-import testUtils from '../../../../test/mocha/testUtils';
-import Actions from '../designdocinfo/actions';
-
-const {restore} = testUtils;
-
-describe('DesignDocInfo Actions', () => {
-
-  describe('fetchDesignDocInfo', () => {
-
-    afterEach(() => {
-      restore(window.setInterval);
-      testUtils.restore(FauxtonAPI.addNotification);
-    });
-
-    it('schedules regular updates on successful fetch', () => {
-      const promise = FauxtonAPI.Deferred();
-      promise.resolve();
-      const fakeDesignDocInfo = {
-        fetch: () => {
-          return promise;
-        }
-      };
-
-      const spy = sinon.spy(window, 'setInterval');
-      const dispatch = sinon.stub();
-
-      return Actions.fetchDesignDocInfo({
-        ddocName: 'test-designdoc-info',
-        designDocInfo: fakeDesignDocInfo
-      })(dispatch).then(() => {
-        expect(spy.calledOnce).toBeTruthy();
-      });
-    });
-
-    it('shows error message in case of failure', () => {
-      const promise = FauxtonAPI.Deferred();
-      promise.reject();
-      const fakeDesignDocInfo = {
-        fetch: () => {
-          return promise;
-        }
-      };
-
-      const notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-      const dispatch = sinon.stub();
-
-      return Actions.fetchDesignDocInfo({
-        ddocName: 'test-designdoc-info',
-        designDocInfo: fakeDesignDocInfo
-      })(dispatch).then(() => {
-        sinon.assert.calledOnce(notificationSpy);
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/fetch-actions.test.js b/app/addons/documents/__tests__/fetch-actions.test.js
deleted file mode 100644
index 7940487..0000000
--- a/app/addons/documents/__tests__/fetch-actions.test.js
+++ /dev/null
@@ -1,386 +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.
-
-import {
-  mergeParams,
-  removeOverflowDocsAndCalculateHasNext,
-  validateBulkDelete,
-  processBulkDeleteResponse
-} from '../index-results/actions/fetch';
-import {queryAllDocs, postToBulkDocs} from '../index-results/api';
-import fetchMock from 'fetch-mock';
-import app from '../../../app';
-import sinon from 'sinon';
-import SidebarActions from '../sidebar/actions';
-import FauxtonAPI from '../../../core/api';
-import '../base';
-import Constants from '../constants';
-
-describe('Docs Fetch API', () => {
-  describe('mergeParams', () => {
-    let fetchParams, queryOptionsParams;
-    beforeEach(() => {
-      fetchParams = {
-        skip: 0,
-        limit: 21
-      };
-      queryOptionsParams = {};
-    });
-
-    it('supports default fetch and queryOptions params', () => {
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 0,
-          limit: 21
-        },
-        totalDocsRemaining: NaN
-      });
-    });
-
-    it('supports a manual skip in queryOptionsParams', () => {
-      queryOptionsParams.skip = 5;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 5,
-          limit: 21
-        },
-        totalDocsRemaining: NaN
-      });
-    });
-
-    it('manual limit in queryOptionsParams does not affect merge limit', () => {
-      queryOptionsParams.limit = 50;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 0,
-          limit: 21
-        },
-        totalDocsRemaining: 50
-      });
-    });
-
-    it('totalDocsRemaining is determined by queryOptions limit and skip on first page', () => {
-      queryOptionsParams.skip = 10;
-      queryOptionsParams.limit = 200;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 10,
-          limit: 21
-        },
-        totalDocsRemaining: 200
-      });
-    });
-
-    it('totalDocsRemaining is determined by queryOptions limit and fetch skip on later pages', () => {
-      queryOptionsParams.skip = 10;
-      queryOptionsParams.limit = 200;
-      fetchParams.skip = 30;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 30,
-          limit: 21
-        },
-        totalDocsRemaining: 180
-      });
-    });
-
-    it('include conflicts if requested in fetchParams', () => {
-      fetchParams.conflicts = true;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 0,
-          limit: 21,
-          conflicts: true
-        },
-        totalDocsRemaining: NaN
-      });
-    });
-  });
-
-  describe('removeOverflowDocsAndCalculateHasNext', () => {
-    let docs;
-    beforeEach(() => {
-      docs = [
-        {
-          _id: 'foo',
-          _rev: 'bar'
-        },
-        {
-          _id: 'xyz',
-          _rev: 'abc'
-        },
-        {
-          _id: 'test',
-          _rev: 'value'
-        }
-      ];
-    });
-
-    it('truncates last doc and has next if length equal to fetch limit', () => {
-      const totalDocsRemaining = NaN;
-      const fetchLimit = 3;
-      expect(removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, fetchLimit)).toEqual({
-        finalDocList: [
-          {
-            _id: 'foo',
-            _rev: 'bar'
-          },
-          {
-            _id: 'xyz',
-            _rev: 'abc'
-          }
-        ],
-        canShowNext: true
-      });
-    });
-
-    it('does not truncate and does not have next if length less than fetch limit', () => {
-      const totalDocsRemaining = NaN;
-      const fetchLimit = 4;
-      expect(removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, fetchLimit)).toEqual({
-        finalDocList: [
-          {
-            _id: 'foo',
-            _rev: 'bar'
-          },
-          {
-            _id: 'xyz',
-            _rev: 'abc'
-          },
-          {
-            _id: 'test',
-            _rev: 'value'
-          }
-        ],
-        canShowNext: false
-      });
-    });
-
-    it('truncates all extra docs if length is greater than totalDocsRemaining', () => {
-      const totalDocsRemaining = 1;
-      const fetchLimit = 3;
-      expect(removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, fetchLimit)).toEqual({
-        finalDocList: [
-          {
-            _id: 'foo',
-            _rev: 'bar'
-          }
-        ],
-        canShowNext: false
-      });
-    });
-  });
-
-  describe('queryAllDocs', () => {
-    const docs = {
-      "total_rows": 2,
-      "offset": 0,
-      "rows": [
-        {
-          "id": "foo",
-          "key": "foo",
-          "value": {
-            "rev": "1-1390740c4877979dbe8998382876556c"
-          }
-        },
-        {
-          "id": "foo2",
-          "key": "foo2",
-          "value": {
-            "rev": "2-1390740c4877979dbe8998382876556c"
-          }
-        }
-      ]
-    };
-
-    it('queries _all_docs with default params', () => {
-      const params = {
-        limit: 21,
-        skip: 0
-      };
-      const fetchUrl = '/testdb/_all_docs';
-      const query = app.utils.queryString(params);
-      const url = `${fetchUrl}?${query}`;
-      fetchMock.getOnce(url, docs);
-
-      return queryAllDocs(fetchUrl, '', params).then((res) => {
-        expect(res).toEqual({
-          docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-          docs: [
-            {
-              id: "foo",
-              key: "foo",
-              value: {
-                rev: "1-1390740c4877979dbe8998382876556c"
-              }
-            },
-            {
-              id: "foo2",
-              key: "foo2",
-              value: {
-                rev: "2-1390740c4877979dbe8998382876556c"
-              }
-            }]
-        });
-      });
-    });
-
-    it('queries _all_docs with a partition key', () => {
-      const partitionKey = 'key1';
-      const params = {
-        limit: 21,
-        skip: 0,
-        inclusive_end: false,
-        start_key: `"${partitionKey}:"`,
-        end_key: `"${partitionKey}:\ufff0"`
-      };
-      const fetchUrl = '/testdb/_all_docs';
-      const query = app.utils.queryString(params);
-      const url = `${fetchUrl}?${query}`;
-      fetchMock.getOnce(url, docs);
-
-      return queryAllDocs(fetchUrl, partitionKey, params).then((res) => {
-        expect(res).toEqual({
-          docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-          docs: [
-            {
-              id: "foo",
-              key: "foo",
-              value: {
-                rev: "1-1390740c4877979dbe8998382876556c"
-              }
-            },
-            {
-              id: "foo2",
-              key: "foo2",
-              value: {
-                rev: "2-1390740c4877979dbe8998382876556c"
-              }
-            }]
-        });
-      });
-    });
-  });
-
-  describe('Bulk Delete', () => {
-    describe('validation', () => {
-      let selectedDocs;
-      beforeEach(() => {
-        selectedDocs = [
-          {
-            _id: 'foo',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ];
-      });
-
-      it('validation fails if no docs selected', () => {
-        selectedDocs = [];
-        expect(validateBulkDelete(selectedDocs)).toBe(false);
-      });
-
-      it('validation fails if user does not wish to continue', () => {
-        global.confirm = () => false;
-        expect(validateBulkDelete(selectedDocs)).toBe(false);
-      });
-
-      it('validation succeeds otherwise', () => {
-        global.confirm = () => true;
-        expect(validateBulkDelete(selectedDocs)).toBe(true);
-      });
-    });
-
-    describe('postToBulkDocs', () => {
-      it('deletes list of docs', () => {
-        const payload = {
-          docs: [
-            {
-              _id: 'foo',
-              _rev: 'bar',
-              _deleted: true
-            }
-          ]
-        };
-        const res = [
-          {
-            "ok": true,
-            "id":"foo",
-            "rev":"2-fe3a51be430401d97872d14a40f590dd"
-          }
-        ];
-        const databaseName = 'testdb';
-
-        fetchMock.postOnce(FauxtonAPI.urls('bulk_docs', 'server', databaseName), res);
-        return postToBulkDocs(databaseName, payload).then((json) => {
-          expect(json).toEqual(res);
-        });
-      });
-    });
-
-    describe('processBulkDeleteResponse', () => {
-      let notificationSpy, sidebarSpy;
-
-      beforeEach(() => {
-        notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-        sidebarSpy = sinon.stub(SidebarActions, 'dispatchUpdateDesignDocs');
-      });
-
-      afterEach(() => {
-        notificationSpy.restore();
-        sidebarSpy.restore();
-      });
-
-      it('creates two notifications when number of failed docs is positive', () => {
-        const res = [
-          {
-            id: 'foo',
-            error: 'conflict',
-            reason: 'Document update conflict'
-          }
-        ];
-        const originalDocs = [
-          {
-            _id: 'foo',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ];
-        const designDocs = [];
-        processBulkDeleteResponse(res, originalDocs, designDocs);
-        expect(notificationSpy.calledTwice).toBe(true);
-        expect(sidebarSpy.calledOnce).toBe(false);
-      });
-
-      it('calls dispatchUpdateDesignDocs when one of the deleted docs is a ddoc', () => {
-        const res = [
-          {
-            id: '_design/foo',
-            rev: 'bar',
-            ok: true
-          }
-        ];
-        const originalDocs = [
-          {
-            _id: '_design/foo',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ];
-        const designDocs = ['_design/foo'];
-        processBulkDeleteResponse(res, originalDocs, designDocs);
-        expect(notificationSpy.calledOnce).toBe(true);
-        expect(sidebarSpy.calledOnce).toBe(true);
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/helpers.test.js b/app/addons/documents/__tests__/helpers.test.js
deleted file mode 100644
index d586f34..0000000
--- a/app/addons/documents/__tests__/helpers.test.js
+++ /dev/null
@@ -1,123 +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.
-import Helpers from "../helpers";
-
-describe('Helpers', () => {
-
-  describe('parseJSON', () => {
-    it('replaces "\\n" with actual newlines', () => {
-      var string = 'I am a string\\nwith\\nfour\\nlinebreaks\\nin';
-      var result = Helpers.parseJSON(string);
-      expect(result.match(/\n/g).length).toBe(4);
-    });
-  });
-
-  describe('truncateDoc', () => {
-    var sevenLineDoc = '{\n"line2": 2,\n"line3": 3,\n"line4": 4,\n"line5": 5,\n"line6": 6\n}';
-
-    it('does no truncation if maxRows set higher than doc', () => {
-      var result = Helpers.truncateDoc(sevenLineDoc, 10);
-      expect(result.isTruncated).toBe(false);
-      expect(result.content).toBe(result.content);
-    });
-
-    it('truncates by specified line count', () => {
-      var result = Helpers.truncateDoc(sevenLineDoc, 5);
-      expect(result.isTruncated).toBe(true);
-      expect(result.content).toBe('{\n"line2": 2,\n"line3": 3,\n"line4": 4,\n"line5": 5,');
-
-      var result2 = Helpers.truncateDoc(sevenLineDoc, 2);
-      expect(result2.isTruncated).toBe(true);
-      expect(result2.content).toBe('{\n"line2": 2,');
-    });
-
-  });
-
-  describe('selectedItemIsPartitionedView', () => {
-    const ddocs = {
-      find: () => { return {_id: '_design/ddoc1' }; }
-    };
-    const selectedView = {
-      navItem: 'designDoc',
-      designDocSection: 'Views',
-      indexName: 'view1'
-    };
-    const selectedAllDocs = {
-      navItem: 'all-docs'
-    };
-
-    it('returns false if no item is selected', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, null, true);
-      expect(isPartitionedView).toBe(false);
-    });
-
-    it('returns false if selected item is not a view', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, selectedAllDocs, true);
-      expect(isPartitionedView).toBe(false);
-    });
-
-    it('returns false if selected item is a global view', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, selectedView, false);
-      expect(isPartitionedView).toBe(false);
-    });
-
-    it('returns true if selected item is a partitioned view', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, selectedView, true);
-      expect(isPartitionedView).toBe(true);
-    });
-
-  });
-
-  describe('isDDocPartitioned', () => {
-    const ddocNoOptions = {
-      _id: '_design/ddoc1'
-    };
-    const ddocPartitionedTrue = {
-      _id: '_design/ddoc1',
-      options: {
-        partitioned: true
-      }
-    };
-    const ddocPartitionedFalse = {
-      _id: '_design/ddoc1',
-      options: {
-        partitioned: false
-      }
-    };
-
-    it('returns false if database is not partitioned', () => {
-      let isPartitionedDdoc = Helpers.isDDocPartitioned(ddocNoOptions, false);
-      expect(isPartitionedDdoc).toBe(false);
-
-      isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedFalse, false);
-      expect(isPartitionedDdoc).toBe(false);
-
-      isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedTrue, false);
-      expect(isPartitionedDdoc).toBe(false);
-    });
-
-    it('returns true if database is partitioned and ddoc partitioned option is not set to false', () => {
-      let isPartitionedDdoc = Helpers.isDDocPartitioned(ddocNoOptions, true);
-      expect(isPartitionedDdoc).toBe(true);
-
-      isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedTrue, true);
-      expect(isPartitionedDdoc).toBe(true);
-    });
-
-    it('returns false if database is partitioned but ddoc is set as non-partitioned', () => {
-      const isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedFalse, true);
-      expect(isPartitionedDdoc).toBe(false);
-    });
-
-  });
-
-});
diff --git a/app/addons/documents/__tests__/index-results.test.js b/app/addons/documents/__tests__/index-results.test.js
deleted file mode 100644
index 72ac69d..0000000
--- a/app/addons/documents/__tests__/index-results.test.js
+++ /dev/null
@@ -1,170 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { shallow } from 'enzyme';
-import IndexResults from '../index-results/components/results/IndexResults';
-import sinon from 'sinon';
-
-describe('IndexResults', () => {
-  it('calls fetchDocs on mount only when fetchAtStartup is set to true', () => {
-    const spy = sinon.spy();
-    shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={spy}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    expect(spy.calledOnce).toBe(true);
-
-    spy.resetHistory();
-    const wrapperDontFetch = shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={spy}
-      results={[]}
-      fetchAtStartup={false}
-    />);
-
-    wrapperDontFetch.instance().componentDidMount();
-    expect(spy.notCalled).toBe(true);
-  });
-
-  it('calls fetchDocs on update if ddocsOnly switches', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={() => { }}
-      resetState={() => { }}
-      results={[]}
-      ddocsOnly={false}
-      fetchAtStartup={true}
-      fetchUrl={''}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillUpdate({
-      ddocsOnly: true,
-      fetchParams: {},
-      queryOptionsParams: {},
-      fetchDocs: spy,
-      resetState: () => { },
-    });
-
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls fetchDocs on update if fetchUrl switches', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={() => { }}
-      resetState={() => { }}
-      results={[]}
-      ddocsOnly={false}
-      fetchAtStartup={true}
-      fetchUrl={'view1'}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillUpdate({
-      fetchParams: {},
-      queryOptionsParams: {},
-      fetchDocs: spy,
-      resetState: () => { },
-      fetchUrl: 'view2'
-    });
-
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('deleteSelectedDocs calls bulkDeleteDocs', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      bulkDeleteDocs={spy}
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={() => { }}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    wrapper.instance().deleteSelectedDocs();
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('isSelected returns true when id is in selectedDocs', () => {
-    const selectedDocs = [{
-      _id: 'foo'
-    }];
-    const wrapper = shallow(<IndexResults
-      selectedDocs={selectedDocs}
-      fetchDocs={() => { }}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    expect(wrapper.instance().isSelected('foo')).toBe(true);
-  });
-
-  it('isSelected returns false when id is not in selectedDocs', () => {
-    const selectedDocs = [{
-      _id: 'bar'
-    }];
-    const wrapper = shallow(<IndexResults
-      selectedDocs={selectedDocs}
-      fetchDocs={() => { }}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    expect(wrapper.instance().isSelected('foo')).toBe(false);
-  });
-
-  it('docChecked calls selectDoc', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      selectedDocs={[]}
-      fetchDocs={() => { }}
-      results={[]}
-      selectDoc={spy}
-      fetchAtStartup={true}
-    />);
-
-    wrapper.instance().docChecked('foo', '1-123324345');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('toggleSelectAll calls bulkCheckOrUncheck', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      selectedDocs={[]}
-      fetchDocs={() => { }}
-      results={[]}
-      docs={[]}
-      allDocumentsSelected={false}
-      bulkCheckOrUncheck={spy}
-      fetchAtStartup={true}
-    />);
-
-    wrapper.instance().toggleSelectAll();
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/json-view.test.js b/app/addons/documents/__tests__/json-view.test.js
deleted file mode 100644
index 6384bb5..0000000
--- a/app/addons/documents/__tests__/json-view.test.js
+++ /dev/null
@@ -1,141 +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.
-
-import { getJsonViewData } from '../index-results/helpers/json-view';
-import { getDocUrl } from '../index-results/helpers/shared-helpers';
-import '../base';
-import Constants from '../constants';
-
-describe('Docs JSON View', () => {
-  const databaseName = 'testdb';
-  let docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-  const docs = [
-    {
-      id: "aardvark",
-      key: "aardvark",
-      value: {
-        rev: "5-717f5e88689af3ad191b47321de10c95"
-      },
-      doc: {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95",
-        min_weight: 40,
-        max_weight: 65,
-        min_length: 1,
-        max_length: 2.2,
-        latin_name: "Orycteropus afer",
-        wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-        class: "mammal",
-        diet: "omnivore"
-      }
-    },
-    {
-      id: "badger",
-      key: "badger",
-      value: {
-        rev: "8-db03387de9cbd5c2814523b043566dfe"
-      },
-      doc: {
-        _id: "badger",
-        _rev: "8-db03387de9cbd5c2814523b043566dfe",
-        wiki_page: "http://en.wikipedia.org/wiki/Badger",
-        min_weight: 7,
-        max_weight: 30,
-        min_length: 0.6,
-        max_length: 0.9,
-        latin_name: "Meles meles",
-        class: "mammal",
-        diet: "omnivore"
-      }
-    }
-  ];
-  const mangoIndexes = [
-    {ddoc: null, name: "_all_docs", type: "special", def: {fields: [{_id: "asc"}]}},
-    {ddoc: "_design/34223ecd7b6bcdc4dcdbc1a09bd63db365dd5f69", name: "idx1", type: "json", def: {fields: [{host3: "asc"}]}}
-  ];
-  let testDocs;
-
-  beforeEach(() => {
-    testDocs = docs;
-    docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-  });
-
-  it('getJsonViewData returns proper meta object with vanilla inputs', () => {
-    expect(getJsonViewData(testDocs, {databaseName, docType})).toEqual({
-      displayedFields: null,
-      hasBulkDeletableDoc: true,
-      results: [
-        {
-          content: JSON.stringify(testDocs[0], null, ' '),
-          id: testDocs[0].id,
-          _rev: testDocs[0].value.rev,
-          header: testDocs[0].id,
-          keylabel: 'id',
-          url: getDocUrl('app', testDocs[0].id, databaseName),
-          isDeletable: true,
-          isEditable: true
-        },
-        {
-          content: JSON.stringify(testDocs[1], null, ' '),
-          id: testDocs[1].id,
-          _rev: testDocs[1].value.rev,
-          header: testDocs[1].id,
-          keylabel: 'id',
-          url: getDocUrl('app', testDocs[1].id, databaseName),
-          isDeletable: true,
-          isEditable: true
-        }
-      ]
-    });
-  });
-
-  it('getJsonViewData false hasBulkDeletableDoc when all special mango docs', () => {
-    docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-    testDocs = mangoIndexes;
-    testDocs[0].type = 'special';
-    testDocs[1].type = 'special';
-
-    const idx0 = { ...testDocs[0] };
-    delete idx0.ddoc;
-    delete idx0.name;
-    const idx1 = { ...testDocs[1] };
-    delete idx1.ddoc;
-    delete idx1.name;
-
-    expect(getJsonViewData(testDocs, {databaseName, docType})).toEqual({
-      displayedFields: null,
-      hasBulkDeletableDoc: false,
-      results: [
-        {
-          content: JSON.stringify(idx0, null, ' '),
-          id: mangoIndexes[0].name,
-          _rev: undefined,
-          header: 'special: _id',
-          keylabel: '',
-          url: null,
-          isDeletable: false,
-          isEditable: false
-        },
-        {
-          content: JSON.stringify(idx1, null, ' '),
-          id: '_all_docs',
-          _rev: undefined,
-          header: 'special: host3',
-          keylabel: '',
-          url: null,
-          isDeletable: false,
-          isEditable: false
-        }
-      ]
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/key-search-fields.test.js b/app/addons/documents/__tests__/key-search-fields.test.js
deleted file mode 100644
index d337ab1..0000000
--- a/app/addons/documents/__tests__/key-search-fields.test.js
+++ /dev/null
@@ -1,123 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import KeySearchFields from '../index-results/components/queryoptions/KeySearchFields';
-import sinon from 'sinon';
-
-describe('KeySearchFields', () => {
-  const betweenKeys = {
-    startkey: 'foo',
-    endKey: 'bar',
-    include: true
-  };
-
-  it('keysGroupClass contains \'hide\' when showByKeys and showBetweenKeys are false', () => {
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={false}
-      betweenKeys={betweenKeys}
-    />);
-
-    expect(wrapper.find('.js-query-keys-wrapper').hasClass('hide')).toBe(true);
-  });
-
-  it('byKeysClass contains \'hide\' and byKeysButtonClass contains \'active\' when showByKeys is false', () => {
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-    />);
-
-    expect(wrapper.find('#js-showKeys').hasClass('hide')).toBe(true);
-    expect(wrapper.find('#betweenKeys').hasClass('active')).toBe(true);
-  });
-
-  it('betweenKeysClass contains \'hide\' and betweenKeysButtonClass contains \'active\' when showBetweenKeys is false', () => {
-    const wrapper = mount(<KeySearchFields
-      showByKeys={true}
-      showBetweenKeys={false}
-      betweenKeys={betweenKeys}
-    />);
-
-    expect(wrapper.find('#js-showStartEnd').hasClass('hide')).toBe(true);
-    expect(wrapper.find('#byKeys').hasClass('active')).toBe(true);
-  });
-
-  it('calls toggleByKeys onClick', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={true}
-      showBetweenKeys={false}
-      betweenKeys={betweenKeys}
-      toggleByKeys={spy}
-    />);
-
-    wrapper.find('#byKeys').simulate('click');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls toggleBetweenKeys onClick', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      toggleBetweenKeys={spy}
-    />);
-
-    wrapper.find('#betweenKeys').simulate('click');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls updateBetweenKeys onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      updateBetweenKeys={spy}
-    />);
-
-    wrapper.find('#startkey').simulate('change');
-    wrapper.find('#endkey').simulate('change');
-    expect(spy.calledTwice).toBe(true);
-  });
-
-  it('calls updateInclusiveEnd onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      updateBetweenKeys={spy}
-    />);
-
-    wrapper.find('#qoIncludeEndKeyInResults').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls updateByKeys onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      updateByKeys={spy}
-    />);
-
-    wrapper.find('#keys-input').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/main-fields-view.test.js b/app/addons/documents/__tests__/main-fields-view.test.js
deleted file mode 100644
index 3a5b960..0000000
--- a/app/addons/documents/__tests__/main-fields-view.test.js
+++ /dev/null
@@ -1,136 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import MainFieldsView from '../index-results/components/queryoptions/MainFieldsView';
-import sinon from 'sinon';
-
-describe('MainFieldsView', () => {
-  const defaultProps = {
-    stable: false,
-    toggleStable: () => {},
-    update: 'true',
-    changeUpdateField: () => {},
-    enableStable: false
-  };
-  const docURL = 'http://foo.com';
-  it('does not render reduce when showReduce is false', () => {
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={false}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      docURL={docURL}
-    />);
-
-    expect(wrapper.find('#qoReduce').length).toBe(0);
-  });
-
-  it('render reduce when showReduce is true but does not render grouplevel when reduce is false', () => {
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      docURL={docURL}
-    />);
-
-    expect(wrapper.find('#qoReduce').length).toBe(1);
-    expect(wrapper.find('#qoGroupLevelGroup').length).toBe(0);
-  });
-
-  it('calls toggleIncludeDocs onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={false}
-      toggleIncludeDocs={spy}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoIncludeDocs').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls groupLevelChange onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={true}
-      toggleIncludeDocs={() => {}}
-      updateGroupLevel={spy}
-      toggleReduce={() => {}}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoGroupLevel').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls toggleReduce onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={true}
-      toggleIncludeDocs={() => {}}
-      updateGroupLevel={() => {}}
-      toggleReduce={spy}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoReduce').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls toggleStable', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={false}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      toggleStable={spy}
-      docURL={docURL}
-      enableStable={true}
-    />);
-
-    wrapper.find('#qoStable').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls changeUpdateField', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={false}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      changeUpdateField={spy}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoUpdate').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/pagination-actions.test.js b/app/addons/documents/__tests__/pagination-actions.test.js
deleted file mode 100644
index 2cb11c1..0000000
--- a/app/addons/documents/__tests__/pagination-actions.test.js
+++ /dev/null
@@ -1,110 +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.
-
-import {
-  toggleShowAllColumns,
-  setPerPage,
-  resetFetchParamsBeforePerPageChange,
-  incrementSkipForPageNext,
-  decrementSkipForPagePrevious,
-  resetPagination
-} from '../index-results/actions/pagination';
-import ActionTypes from '../index-results/actiontypes';
-import FauxtonAPI from '../../../core/api';
-
-describe('Docs Pagination API', () => {
-  it('toggleShowAllColumns returns the proper event to dispatch', () => {
-    expect(toggleShowAllColumns()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS
-    });
-  });
-
-  it('setPerPage returns the proper event to dispatch', () => {
-    const pageSize = 10;
-    expect(setPerPage(pageSize)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE,
-      perPage: pageSize
-    });
-  });
-
-  describe('resetFetchParamsBeforePerPageChange', () => {
-    let fetchParams, queryOptionsParams;
-    let amount = 10;
-    beforeEach(() => {
-      fetchParams = {
-        skip: 20,
-        limit: 21
-      };
-      queryOptionsParams = {};
-    });
-
-    it('fetchs with proper params when queryOptions doesnt have skip', () => {
-      expect(resetFetchParamsBeforePerPageChange(fetchParams, queryOptionsParams, amount)).toEqual({
-        limit: 11,
-        skip: 0
-      });
-    });
-
-    it('fetches with the proper params when queryOptions does have skip', () => {
-      queryOptionsParams.skip = 5;
-      expect(resetFetchParamsBeforePerPageChange(fetchParams, queryOptionsParams, amount)).toEqual({
-        limit: 11,
-        skip: 5
-      });
-    });
-  });
-
-  it('incrementSkipForPageNext returns the proper fetch params', () => {
-    const fetchParams = {
-      skip: 0,
-      limit: 21
-    };
-    const perPage = 20;
-    expect(incrementSkipForPageNext(fetchParams, perPage)).toEqual({
-      skip: 20,
-      limit: 21
-    });
-  });
-
-  describe('decrementSkipForPagePrevious', () => {
-    it('returns the proper fetch params when greater than zero', () => {
-      const fetchParams = {
-        skip: 40,
-        limit: 21
-      };
-      const perPage = 20;
-      expect(decrementSkipForPagePrevious(fetchParams, perPage)).toEqual({
-        skip: 20,
-        limit: 21
-      });
-    });
-
-    it('returns the proper fetch params when skip less than zero', () => {
-      const fetchParams = {
-        skip: 5,
-        limit: 21
-      };
-      const perPage = 20;
-      expect(decrementSkipForPagePrevious(fetchParams, perPage)).toEqual({
-        skip: 0,
-        limit: 21
-      });
-    });
-  });
-
-  it('resetPagination defaults to FauxtonAPI page size if arg empty', () => {
-    expect(resetPagination()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE,
-      perPage: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/pagination-footer.test.js b/app/addons/documents/__tests__/pagination-footer.test.js
deleted file mode 100644
index 952382a..0000000
--- a/app/addons/documents/__tests__/pagination-footer.test.js
+++ /dev/null
@@ -1,199 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import PaginationFooter from '../index-results/components/pagination/PaginationFooter';
-import sinon from 'sinon';
-
-describe('PaginationFooter', () => {
-  const displayedFields = {};
-  beforeEach(() => {
-    displayedFields.shown = 5;
-    displayedFields.allFieldCount = 10;
-  });
-
-  it('does not show table controls if showPrioritizedEnabled is false', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={false}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('#footer-doc-control-prioritized').length).toBe(0);
-  });
-
-  it('does not show table controls if hasResults is false', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={false}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('#footer-doc-control-prioritized').length).toBe(0);
-  });
-
-  it('does show table controls if showPrioritizedEnabled and hasResults are true', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('#footer-doc-control-prioritized').length).toBe(1);
-  });
-
-  it('calls paginateNext when clicked and available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={true}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginateNext={spy}
-    />);
-
-    wrapper.instance().nextClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('does not call paginateNext when clicked and not available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginateNext={spy}
-    />);
-
-    wrapper.instance().nextClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(false);
-  });
-
-  it('calls paginatePrevious when clicked and available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={true}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginatePrevious={spy}
-    />);
-
-    wrapper.instance().previousClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('does not call paginatePrevious when clicked and not available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginatePrevious={spy}
-    />);
-
-    wrapper.instance().previousClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(false);
-  });
-
-  it('renders custom text when no docs', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('.current-docs span').text()).toMatch('Showing 0 documents.');
-  });
-
-  it('renders text indicating range when docs', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[{_id: 'foo'}]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('.current-docs span').text()).toMatch('Showing document 1 - 20.');
-  });
-});
diff --git a/app/addons/documents/__tests__/paging-controls.test.js b/app/addons/documents/__tests__/paging-controls.test.js
deleted file mode 100644
index 4fb93c2..0000000
--- a/app/addons/documents/__tests__/paging-controls.test.js
+++ /dev/null
@@ -1,62 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import PagingControls from '../index-results/components/pagination/PagingControls';
-
-describe('PagingControls', () => {
-  it('pagination controls disabled when canShowPrevious and canShowNext are false', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={false}
-      canShowPrevious={false}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled').length).toBe(2);
-  });
-
-  it('pagination control disabled when canShowPrevious is false', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={true}
-      canShowPrevious={false}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled #previous').length).toBe(1);
-  });
-
-  it('pagination control disabled when canShowNext is false', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={false}
-      canShowPrevious={true}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled #next').length).toBe(1);
-  });
-
-  it('pagination controls enabled when canShowPrevious and canShowNext are true', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={true}
-      canShowPrevious={true}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled').length).toBe(0);
-  });
-});
diff --git a/app/addons/documents/__tests__/partition-key.test.js b/app/addons/documents/__tests__/partition-key.test.js
deleted file mode 100644
index de28f1a..0000000
--- a/app/addons/documents/__tests__/partition-key.test.js
+++ /dev/null
@@ -1,128 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { shallow } from 'enzyme';
-import PartitionKeySelector from '../partition-key/PartitionKeySelector';
-import sinon from 'sinon';
-
-describe('PartitionKeySelector', () => {
-  const defaultProps = {
-    selectorVisible: true,
-    partitionKey: '',
-    checkDbPartitioned: () => {},
-    onPartitionKeySelected: () => {}
-  };
-
-  it('is only rendered when selectorVisible is set to true', () => {
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      selectorVisible={false}
-    />);
-    expect(wrapper.find('div.partition-selector').exists()).toBe(false);
-
-    const wrapper2 = shallow(<PartitionKeySelector
-      {...defaultProps}
-      selectorVisible={true}
-    />);
-    expect(wrapper2.find('div.partition-selector').exists()).toBe(true);
-  });
-
-  it('uses global mode by default', () => {
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey='part1'
-    />);
-
-    const btLabel = wrapper.find('div').text();
-    expect(btLabel).toMatch('No partition selected');
-  });
-
-  it('switches from global mode to partition mode when a key is already set', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey='part1'
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    wrapper.find('button').simulate('click');
-    expect(spyOnKeySelected.calledOnce).toBe(true);
-  });
-
-  it('if a key is not set switching from global mode shows the text input', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey=''
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    expect(wrapper.state().editMode).toBe(false);
-    wrapper.find('button').simulate('click');
-    expect(wrapper.state().editMode).toBe(true);
-    expect(spyOnKeySelected.calledOnce).toBe(false);
-  });
-
-  it('switches from partition mode to global mode', () => {
-    const spyOnGlobalSelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey='part1'
-      globalMode={false}
-      onGlobalModeSelected={spyOnGlobalSelected}
-    />);
-
-    wrapper.find('button').simulate('click');
-    expect(spyOnGlobalSelected.calledOnce).toBe(true);
-  });
-
-  it('calls onPartitionKeySelected when a new value is set by pressing Enter', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey=''
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    // Start edit mode
-    wrapper.find('button').simulate('click');
-    expect(wrapper.state().editMode).toBe(true);
-    // Set new value
-    wrapper.find('input').simulate('change', { target: { value: 'new_part_key' } });
-    wrapper.find('input').simulate('keypress', {key: 'Enter'});
-    expect(spyOnKeySelected.calledOnce).toBe(true);
-  });
-
-  it('calls onPartitionKeySelected when a new value is set and the component loses focus', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey=''
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    // Start edit mode
-    wrapper.find('button').simulate('click');
-    expect(wrapper.state().editMode).toBe(true);
-    // Set new value
-    wrapper.find('input').simulate('change', { target: { value: 'new_part_key' } });
-    wrapper.find('input').simulate('blur');
-    expect(spyOnKeySelected.calledOnce).toBe(true);
-  });
-
-});
diff --git a/app/addons/documents/__tests__/perpage-selector.test.js b/app/addons/documents/__tests__/perpage-selector.test.js
deleted file mode 100644
index dc9fd0e..0000000
--- a/app/addons/documents/__tests__/perpage-selector.test.js
+++ /dev/null
@@ -1,27 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import PerPageSelector from '../index-results/components/pagination/PerPageSelector';
-import sinon from 'sinon';
-
-describe('PerPageSelector', () => {
-  it('calls perPageChange when value changes', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PerPageSelector perPage={10} perPageChange={spy} />);
-
-    wrapper.find('#select-per-page').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/query-buttons.test.js b/app/addons/documents/__tests__/query-buttons.test.js
deleted file mode 100644
index 225ccc3..0000000
--- a/app/addons/documents/__tests__/query-buttons.test.js
+++ /dev/null
@@ -1,27 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import QueryButtons from '../index-results/components/queryoptions/QueryButtons';
-import sinon from 'sinon';
-
-describe('QueryButtons', () => {
-  it('calls onCancel after click', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<QueryButtons onCancel={spy} />);
-
-    wrapper.find('a').simulate('click');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/query-options.test.js b/app/addons/documents/__tests__/query-options.test.js
deleted file mode 100644
index 4459ba0..0000000
--- a/app/addons/documents/__tests__/query-options.test.js
+++ /dev/null
@@ -1,351 +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.
-
-import { shallow, mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import QueryOptions from '../index-results/components/queryoptions/QueryOptions';
-import Constants from '../constants';
-
-describe('QueryOptions', () => {
-  const props = {
-    includeDocs: false,
-    queryOptionsToggleIncludeDocs: () => {},
-    reduce: false,
-    contentVisible: true,
-    perPage: 10,
-    queryOptionsToggleStable: () => {},
-    queryOptionsChangeUpdate: () => {},
-    stable: false,
-    update: 'true',
-    betweenKeys: {},
-    showReduce: true,
-    enableStable: true
-  };
-
-  it('calls resetPagination and queryOptionsExecute on submit', () => {
-    const spy1 = sinon.spy();
-    const spy2 = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    const wrapper = shallow(<QueryOptions
-      queryOptionsExecute={spy1}
-      resetPagination={spy2}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      {...props}
-    />);
-
-    wrapper.instance().executeQuery();
-    expect(spy1.calledOnce).toBe(true);
-    expect(spy2.calledOnce).toBe(true);
-  });
-
-  it('calls queryOptionsApplyFilterOnlyDdocs if ddocsOnly is true', () => {
-    const spy = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsApplyFilterOnlyDdocs={spy}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls queryOptionsApplyFilterOnlyDdocs if ddocsOnly switches to true on new props', () => {
-    const spy = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={false}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={spy}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillReceiveProps({
-      ddocsOnly: true
-    });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls queryOptionsRemoveFilterOnlyDdocs if ddocsOnly switches to false on new props', () => {
-    const spy = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={spy}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillReceiveProps({
-      ddocsOnly: false
-    });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('button is not highlighted when query options are not set', () => {
-
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(false);
-  });
-
-  it('button is highlighted when reduce option is enabled', () => {
-    const newProps = {
-      ...props,
-      reduce: true
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when limit option is set', () => {
-    const newProps = {
-      ...props,
-      limit: 3
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when skip option is set', () => {
-    const newProps = {
-      ...props,
-      skip: 3
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when betweenKeys option is set', () => {
-    const newProps = {
-      ...props,
-      betweenKeys: {startkey:"a"}
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when byKeys option is set', () => {
-    const newProps = {
-      ...props,
-      byKeys: {}
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when descending option is enabled', () => {
-    const newProps = {
-      ...props,
-      descending: true
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is not highlighted when includeDocs option is enabled', () => {
-    const newProps = {
-      ...props,
-      includeDocs: true
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(false);
-  });
-
-  it('stable option is only enabled when enableStable is true', () => {
-    const wrapper = mount(<QueryOptions
-      {...props}
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      showReduce={true}
-      enableStable={true}
-    />);
-
-    expect(wrapper.find('input#qoStable').prop("disabled")).toBe(false);
-    wrapper.setProps({enableStable: false});
-    expect(wrapper.find('input#qoStable').prop("disabled")).toBe(true);
-  });
-
-  it('reduce option is only displayed when showReduce is true', () => {
-    const wrapper = mount(<QueryOptions
-      {...props}
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      showReduce={true}
-      enableStable={true}
-    />);
-
-    expect(wrapper.find('input#qoReduce').exists()).toBe(true);
-
-    wrapper.setProps({showReduce: false});
-    expect(wrapper.find('input#qoReduce').exists()).toBe(false);
-  });
-
-});
diff --git a/app/addons/documents/__tests__/queryoptions-actions.test.js b/app/addons/documents/__tests__/queryoptions-actions.test.js
deleted file mode 100644
index 7ed4a62..0000000
--- a/app/addons/documents/__tests__/queryoptions-actions.test.js
+++ /dev/null
@@ -1,177 +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.
-
-import * as Actions from '../index-results/actions/queryoptions';
-import ActionTypes from '../index-results/actiontypes';
-
-describe('Docs Query Options API', () => {
-  it('resetFetchParamsBeforeExecute returns proper fetch params', () => {
-    const perPage = 20;
-    expect(Actions.resetFetchParamsBeforeExecute(perPage)).toEqual({
-      limit: 21,
-      skip: 0
-    });
-  });
-
-  it('queryOptionsToggleVisibility returns the proper event to dispatch', () => {
-    const newVisibility = true;
-    expect(Actions.queryOptionsToggleVisibility(newVisibility)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        isVisible: true
-      }
-    });
-  });
-
-  it('queryOptionsToggleReduce returns the proper event to dispatch', () => {
-    const previousReduce = true;
-    expect(Actions.queryOptionsToggleReduce(previousReduce)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        reduce: false
-      }
-    });
-  });
-
-  it('queryOptionsUpdateGroupLevel returns the proper event to dispatch', () => {
-    const newGroupLevel = 'exact';
-    expect(Actions.queryOptionsUpdateGroupLevel(newGroupLevel)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        groupLevel: 'exact'
-      }
-    });
-  });
-
-  it('queryOptionsToggleByKeys returns the proper event to dispatch', () => {
-    const previousShowByKeys = true;
-    expect(Actions.queryOptionsToggleByKeys(previousShowByKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        showByKeys: false,
-        showBetweenKeys: true
-      }
-    });
-  });
-
-  it('queryOptionsToggleBetweenKeys returns the proper event to dispatch', () => {
-    const previousShowBetweenKeys = true;
-    expect(Actions.queryOptionsToggleBetweenKeys(previousShowBetweenKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        showBetweenKeys: false,
-        showByKeys: true,
-      }
-    });
-  });
-
-  it('queryOptionsUpdateBetweenKeys returns the proper event to dispatch', () => {
-    const newBetweenKeys = {
-      include: true,
-      startkey: '"_design"',
-      endkey: '"_design"'
-    };
-    expect(Actions.queryOptionsUpdateBetweenKeys(newBetweenKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        betweenKeys: {
-          include: true,
-          startkey: '"_design"',
-          endkey: '"_design"'
-        }
-      }
-    });
-  });
-
-  it('queryOptionsUpdateByKeys returns the proper event to dispatch', () => {
-    const newByKeys = ['foo', 'bar'];
-    expect(Actions.queryOptionsUpdateByKeys(newByKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        byKeys: ['foo', 'bar']
-      }
-    });
-  });
-
-  it('queryOptionsToggleDescending returns the proper event to dispatch', () => {
-    const previousDescending = true;
-    expect(Actions.queryOptionsToggleDescending(previousDescending)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        descending: false
-      }
-    });
-  });
-
-  it('queryOptionsUpdateSkip returns the proper event to dispatch', () => {
-    const newSkip = 5;
-    expect(Actions.queryOptionsUpdateSkip(newSkip)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        skip: 5
-      }
-    });
-  });
-
-  it('queryOptionsUpdateLimit returns the proper event to dispatch', () => {
-    const newLimit = 50;
-    expect(Actions.queryOptionsUpdateLimit(newLimit)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        limit: 50
-      }
-    });
-  });
-
-  it('queryOptionsToggleIncludeDocs returns the proper event to dispatch', () => {
-    const previousIncludeDocs = true;
-    expect(Actions.queryOptionsToggleIncludeDocs(previousIncludeDocs)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        includeDocs: false
-      }
-    });
-  });
-
-  it('queryOptionsFilterOnlyDdocs returns the proper event to dispatch', () => {
-    expect(Actions.queryOptionsFilterOnlyDdocs()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        betweenKeys: {
-          include: false,
-          startkey: '"_design"',
-          endkey: '"_design0"'
-        },
-        showBetweenKeys: true,
-        showByKeys: false
-      }
-    });
-  });
-
-  it('queryOptionsToggleStable returns the proper event to dispatch', () => {
-    expect(Actions.queryOptionsToggleStable(true)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        stable: false
-      }
-    });
-  });
-
-  it('queryOptionsChangeUpdate returns the proper event to dispatch', () => {
-    expect(Actions.queryOptionsChangeUpdate('lazy')).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        update: 'lazy'
-      }
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/reducers.test.js b/app/addons/documents/__tests__/reducers.test.js
deleted file mode 100644
index fb36b28..0000000
--- a/app/addons/documents/__tests__/reducers.test.js
+++ /dev/null
@@ -1,532 +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.
-
-import * as Reducers from '../index-results/reducers';
-import FauxtonAPI from '../../../core/api';
-import Constants from '../constants';
-import ActionTypes from '../index-results/actiontypes';
-
-describe('Docs Reducers', () => {
-  const initialState = {
-    docs: [],  // raw documents returned from couch
-    selectedDocs: [],  // documents selected for manipulation
-    isLoading: false,
-    tableView: {
-      selectedFieldsTableView: [],  // current columns to display
-      showAllFieldsTableView: false, // do we show all possible columns?
-    },
-    isEditable: true,  // can the user manipulate the results returned?
-    selectedLayout: Constants.LAYOUT_ORIENTATION.METADATA,
-    textEmptyIndex: 'No Documents Found',
-    docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-    fetchParams: {
-      limit: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE + 1,
-      skip: 0
-    },
-    pagination: {
-      pageStart: 1,  // index of first doc in this page of results
-      currentPage: 1,  // what page of results are we showing?
-      perPage: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE,
-      canShowNext: false  // flag indicating if we can show a next page
-    },
-    queryOptionsPanel: {
-      isVisible: false,
-      showByKeys: false,
-      showBetweenKeys: false,
-      includeDocs: false,
-      betweenKeys: {
-        include: true,
-        startkey: '',
-        endkey: ''
-      },
-      byKeys: '',
-      descending: false,
-      skip: '',
-      limit: 'none',
-      reduce: false,
-      groupLevel: 'exact',
-      showReduce: false
-    }
-  };
-  const testDoc = {
-    id: 'foo',
-    key: 'foo',
-    value: {
-      rev: '1-967a00dff5e02add41819138abb3284d'
-    }
-  };
-
-  it('resets selectedDocs on state reset', () => {
-    const action = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: [{_id: '1'}]
-    };
-
-    const newState = Reducers.default(initialState, action);
-
-    const resetAction = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE
-    };
-
-    const newState2 = Reducers.default(newState, resetAction);
-    expect(newState2.selectedDocs).toEqual([]);
-
-  });
-
-  it('getDocs returns the docs attribute from the state', () => {
-    const action = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-      docs: [testDoc],
-      fetchPArams: {
-        limit: 21,
-        skip: 0
-      },
-      canShowNext: true
-    };
-
-    const newState = Reducers.default(initialState, action);
-    expect(Reducers.getDocs(newState)).toEqual([testDoc]);
-  });
-
-  it('getSelected returns the selectedDocs attribute from the state', () => {
-    const selectedDoc = {
-      _id: 'foo',
-      _rev: '1-967a00dff5e02add41819138abb3284d',
-      _deleted: true
-    };
-    const action = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: [selectedDoc]
-    };
-
-    const newState = Reducers.default(initialState, action);
-    expect(Reducers.getSelectedDocs(newState)).toEqual([selectedDoc]);
-  });
-
-  it('getIsLoading returns the isLoading attribute from the state', () => {
-    expect(Reducers.getIsLoading(initialState)).toBe(false);
-  });
-
-  it('getIsEditable returns the isEditable attribute from the state', () => {
-    expect(Reducers.getIsEditable(initialState)).toBe(true);
-  });
-
-  it('getSelectedLayout returns the selectedLayout attribute from the state', () => {
-    expect(Reducers.getSelectedLayout(initialState)).toMatch(Constants.LAYOUT_ORIENTATION.METADATA);
-  });
-
-  it('getTextEmptyIndex returns the textEmptyIndex attribute from the state', () => {
-    expect(Reducers.getTextEmptyIndex(initialState)).toMatch('No Documents Found');
-  });
-
-  it('getDocType returns the docType attribute from the state', () => {
-    expect(Reducers.getDocType(initialState)).toMatch(Constants.INDEX_RESULTS_DOC_TYPE.VIEW);
-  });
-
-  it('getFetchParams returns the fetchParams attribute from the state', () => {
-    expect(Reducers.getFetchParams(initialState)).toEqual({
-      limit: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE + 1,
-      skip: 0
-    });
-  });
-
-  it('getPageStart returns the pageStart attribute from the state', () => {
-    expect(Reducers.getPageStart(initialState)).toBe(1);
-  });
-
-  it('getPrioritizedEnabled returns the showAllFieldsTableView attribute from the state', () => {
-    expect(Reducers.getPrioritizedEnabled(initialState)).toBe(false);
-  });
-
-  it('getPerPage returns the perPage attribute from the state', () => {
-    expect(Reducers.getPerPage(initialState)).toBe(FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE);
-  });
-
-  it('getCanShowNext returns the canShowNext attribute from the state', () => {
-    expect(Reducers.getCanShowNext(initialState)).toBe(false);
-  });
-
-  it('getQueryOptionsPanel returns the queryOptionsPanel attribute from the state', () => {
-    expect(Reducers.getQueryOptionsPanel(initialState)).toEqual({
-      isVisible: false,
-      showByKeys: false,
-      showBetweenKeys: false,
-      includeDocs: false,
-      betweenKeys: {
-        include: true,
-        startkey: '',
-        endkey: ''
-      },
-      byKeys: '',
-      descending: false,
-      skip: '',
-      limit: 'none',
-      reduce: false,
-      groupLevel: 'exact',
-      showReduce: false
-    });
-  });
-
-  describe('removeGeneratedMangoDocs', () => {
-    it('returns false when language is query', () => {
-      expect(Reducers.removeGeneratedMangoDocs({ language: 'query' })).toBe(false);
-    });
-
-    it('returns true when language is not query', () => {
-      expect(Reducers.removeGeneratedMangoDocs({ language: 'foo' })).toBe(true);
-    });
-  });
-
-  describe('getShowPrioritizedEnabled', () => {
-    it('returns false when not table layout', () => {
-      expect(Reducers.getShowPrioritizedEnabled(initialState)).toBe(false);
-    });
-
-    it('returns true when table layout', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT,
-        layout: Constants.LAYOUT_ORIENTATION.TABLE
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getShowPrioritizedEnabled(newState)).toBe(true);
-    });
-  });
-
-  describe('getPageEnd', () => {
-    it('returns false when there are no results', () => {
-      expect(Reducers.getPageEnd(initialState)).toBe(false);
-    });
-
-    it('returns pageStart + results.length - 1 when there are results', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getPageEnd(newState)).toBe(1);
-    });
-  });
-
-  describe('getHasResults', () => {
-    it('returns false when state is loading', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getHasResults(newState)).toBe(false);
-    });
-
-    it('returns false when docs.length is zero', () => {
-      expect(Reducers.getHasResults(initialState)).toBe(false);
-    });
-
-    it('returns true when not loading and there are results', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getHasResults(newState)).toBe(true);
-    });
-  });
-
-  describe('getAllDocsSelected', () => {
-    it('returns false if docs.length is zero', () => {
-      expect(Reducers.getAllDocsSelected(initialState)).toBe(false);
-    });
-
-    it('returns false if docs but selectedDocs.length is zero', () => {
-      const selectedDoc = {
-        _id: 'foo',
-        _rev: '1-967a00dff5e02add41819138abb3284d',
-        _deleted: true
-      };
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [selectedDoc]
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getAllDocsSelected(newState)).toBe(false);
-    });
-
-    it('returns false there is a doc not in the selectedDocs array', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getAllDocsSelected(newState)).toBe(false);
-    });
-
-    it('returns true when all selectable docs in the docs array are in the selectedDocs array', () => {
-      const newDocAction = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true,
-        docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-      };
-
-      const newState1 = Reducers.default(initialState, newDocAction);
-      const selectedDoc = {
-        _id: 'foo',
-        _rev: '1-967a00dff5e02add41819138abb3284d',
-        _deleted: true
-      };
-      const newSelectedDocAction = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [selectedDoc]
-      };
-      const newState2 = Reducers.default(newState1, newSelectedDocAction);
-      expect(Reducers.getAllDocsSelected(newState2)).toBe(true);
-    });
-  });
-
-  describe('getHasDocsSelected', () => {
-    it('returns false when there are no docs in the selectedDocs array', () => {
-      expect(Reducers.getHasDocsSelected(initialState)).toBe(false);
-    });
-
-    it('returns true when there are docs in the selectedDocs array', () => {
-      const selectedDoc = {
-        _id: 'foo',
-        _rev: '1-967a00dff5e02add41819138abb3284d',
-        _deleted: true
-      };
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [selectedDoc]
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getHasDocsSelected(newState)).toBe(true);
-    });
-  });
-
-  it('getNumDocsSelected returns the length of the selectedDocs array', () => {
-    expect(Reducers.getNumDocsSelected(initialState)).toBe(0);
-  });
-
-  describe('canShowPrevious', () => {
-    it('returns false when the current page is 1', () => {
-      expect(Reducers.getCanShowPrevious(initialState)).toBe(false);
-    });
-
-    it('returns true when the current page is greater than 1', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getCanShowPrevious(newState)).toBe(true);
-    });
-  });
-
-  describe('getQueryOptionsParams', () => {
-    it('returns an empty object by default', () => {
-      expect(Reducers.getQueryOptionsParams(initialState)).toEqual({});
-    });
-
-    it('adds include_docs when set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          includeDocs: true
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        include_docs: true
-      });
-    });
-
-    it('adds start_key, end_key, and inclusive end when set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          showBetweenKeys: true,
-          betweenKeys: {
-            include: true,
-            startkey: '"_design"',
-            endkey: '"_design0"'
-          }
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        inclusive_end: true,
-        start_key: '"_design"',
-        end_key: '"_design0"'
-      });
-    });
-
-    it('adds keys if showByKeys is set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          showByKeys: true,
-          byKeys: "['_design', 'foo']"
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        keys: "['_design', 'foo']"
-      });
-    });
-
-    it('adds limit if limit is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          limit: 50
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        limit: 50
-      });
-    });
-
-    it('adds skip if skip is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          skip: 5
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        skip: 5
-      });
-    });
-
-    it('adds descending if descending is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          descending: true
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        descending: true
-      });
-    });
-
-    it('adds reduce if reduce is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          reduce: true
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        reduce: true,
-        group: true
-      });
-    });
-
-    it('adds reduce and group_level if both are set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          reduce: true,
-          groupLevel: 2
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        reduce: true,
-        group_level: 2
-      });
-    });
-
-    it('only adds update when set to non-default value in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          update: 'lazy'
-        }
-      };
-
-      const newStateLazy = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateLazy)).toEqual({
-        update: 'lazy'
-      });
-
-      action.options.update = 'false';
-      const newStateFalse = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateFalse)).toEqual({
-        update: 'false'
-      });
-
-      action.options.update = 'true';
-      const newStateTrue = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateTrue)).toEqual({
-        update: undefined
-      });
-    });
-
-    it('only adds stable when set to non-default value in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          stable: true
-        }
-      };
-
-      const newStateTrue = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateTrue)).toEqual({
-        stable: true
-      });
-
-      action.options.stable = false;
-      const newStateFalse = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateFalse)).toEqual({
-        stable: undefined
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/resources.test.js b/app/addons/documents/__tests__/resources.test.js
deleted file mode 100644
index cc3324c..0000000
--- a/app/addons/documents/__tests__/resources.test.js
+++ /dev/null
@@ -1,333 +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.
-
-import FauxtonAPI from "../../../core/api";
-import Helpers from '../../../helpers';
-import Models from "../resources";
-import "../base";
-import sinon from 'sinon';
-
-describe('Document', () => {
-  let doc;
-  beforeEach(() => {
-    doc = new Models.Doc({}, {});
-  });
-
-  it('does not remove an id attribute', () => {
-    const res = doc.parse({
-      _id: 'be31e531fe131bdf416b479ac1000484',
-      _rev: '4-3a1b9f4b988b413e9245cd250769da72',
-      id: 'foo'
-    });
-    expect(res.id).toBe('foo');
-  });
-
-  it('removes the id, if we create a document and get back an "id" instead of "_id"', () => {
-    // if we take the document {"_id": "mycustomid", "_rev": "18-9cdeb1b121137233e3466b06a1780c29", id: "foo"}
-    // and do a PUT request for an update, CouchDB will return:
-    // {"ok":true,"id":"mycustomid","rev":"18-9cdeb1b121137233e3466b06a1780c29"}
-    // and our Model will think it has the id "mycustomid" instead of "foo"
-    const res = doc.parse({
-      id: 'be31e531fe131bdf416b479ac1000484',
-      _rev: '4-3a1b9f4b988b413e9245cd250769da72',
-      ok: true
-    });
-    expect(res.id).toBeFalsy();
-  });
-
-  it('can return the doc url, if id given', () => {
-    doc = new Models.Doc({_id: 'scholle'}, {
-      database: {id: 'blerg', safeID: function () { return this.id; }}
-    });
-
-    expect(doc.url('apiurl')).toMatch(/\/blerg/);
-  });
-
-  it('will return the API url to create a new doc, if no doc exists yet', () => {
-    doc = new Models.Doc({}, {
-      database: {id: 'blerg', safeID: function () { return this.id; }}
-    });
-
-    expect(doc.url('apiurl')).toMatch(/\/blerg/);
-  });
-});
-
-describe('AllDocs', () => {
-  let collection;
-
-  it('all-docs-list documents are always editable', () => {
-    collection = new Models.AllDocs([{
-      _id: 'myId1',
-      doc: 'num1'
-    },
-    {
-      _id: 'myId2',
-      doc: 'num2'
-    }], {
-      database: {id: 'databaseId', safeID: function () { return this.id; }},
-      params: {limit: 20}
-    });
-
-    expect(collection.isEditable()).toBeTruthy();
-  });
-});
-
-describe('NewDoc', () => {
-
-  let getUUID;
-  beforeEach(() => {
-    getUUID = sinon.stub(Helpers, 'getUUID').resolves({ uuids: ['abc9876'] });
-  });
-
-  afterEach(() => {
-    getUUID.restore();
-  });
-
-  it('adds partition key to auto-generated ID', () => {
-    const newDoc = new Models.NewDoc(null, { database: {}, partitionKey: 'part_key' });
-    return newDoc.fetch().then(() => {
-      expect(newDoc.get('_id')).toMatch(/part_key:abc9876/);
-    });
-  });
-});
-
-describe('QueryParams', () => {
-  describe('parse', () => {
-    it('should not parse arbitrary parameters', () => {
-      const params = {'foo': '[1]]'};
-      const result = Models.QueryParams.parse(params);
-
-      expect(result).toEqual(params);
-    });
-
-    it('parses startkey, endkey', () => {
-      const params = {
-        'startkey':'["a","b"]',
-        'endkey':'["c","d"]'
-      };
-      const result = Models.QueryParams.parse(params);
-
-      expect(result).toEqual({
-        'startkey': ['a', 'b'],
-        'endkey': ['c', 'd']
-      });
-    });
-
-    it('parses key', () => {
-      const params = {
-        key:'[1,2]'
-      };
-      const result = Models.QueryParams.parse(params);
-
-      expect(result).toEqual({'key': [1, 2]});
-    });
-
-    it('does not modify input', () => {
-      const params = {
-        key:'["a","b"]'
-      };
-      const clone = _.clone(params);
-      Models.QueryParams.parse(params);
-      expect(params).toEqual(clone);
-    });
-  });
-
-  describe('stringify', () => {
-    it('should not stringify arbitrary parameters', () => {
-      const params = {'foo': [1, 2, 3]};
-      const result = Models.QueryParams.stringify(params);
-
-      expect(result).toEqual(params);
-    });
-
-    it('stringifies startkey, endkey', () => {
-      const params = {
-        'startkey': ['a', 'b'],
-        'endkey': ['c', 'd']
-      };
-
-      const result = Models.QueryParams.stringify(params);
-
-      expect(result).toEqual({
-        'startkey':'["a","b"]',
-        'endkey':'["c","d"]'
-      });
-    });
-
-    it('stringifies key', () => {
-      const params = {'key':['a', 'b']};
-      const result = Models.QueryParams.stringify(params);
-
-      expect(result).toEqual({ 'key': '["a","b"]' });
-    });
-
-    it('does not modify input', () => {
-      const params = {'key': ['a', 'b']};
-      const clone = _.clone(params);
-      Models.QueryParams.stringify(params);
-
-      expect(params).toEqual(clone);
-    });
-
-    it('is symmetrical with parse', () => {
-      const params = {
-        'startkey': ['a', 'b'],
-        'endkey': ['c', 'd'],
-        'foo': '[1,2]',
-        'bar': 'abc'
-      };
-
-      const clone = _.clone(params);
-      const json = Models.QueryParams.stringify(params);
-      const result = Models.QueryParams.parse(json);
-
-      expect(result).toEqual(clone);
-    });
-  });
-});
-
-describe('Bulk Delete', () => {
-  let databaseId = 'ente',
-      collection,
-      promise,
-      resolve,
-      reject,
-      values;
-
-  values = [{
-    _id: '1',
-    _rev: '1234561',
-    _deleted: true
-  },
-  {
-    _id: '2',
-    _rev: '1234562',
-    _deleted: true
-  },
-  {
-    _id: '3',
-    _rev: '1234563',
-    _deleted: true
-  }];
-
-  beforeEach(() => {
-    collection = new Models.BulkDeleteDocCollection(values, {
-      databaseId: databaseId
-    });
-
-    promise = new FauxtonAPI.Promise((res, rej) => {
-      resolve = res;
-      reject = rej;
-    });
-  });
-
-  it('contains the models', () => {
-    collection = new Models.BulkDeleteDocCollection(values, {
-      databaseId: databaseId
-    });
-
-    expect(collection.length).toBe(3);
-  });
-
-  it('clears the memory if no errors happened', () => {
-    collection.handleResponse([
-      {'ok': true, 'id': '1', 'rev': '10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok': true, 'id': '2', 'rev': '6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(collection.length).toBe(1);
-    });
-  });
-
-  it('triggers a removed event with all ids', (done) => {
-    collection.listenToOnce(collection, 'removed', function (ids) {
-      expect(ids).toEqual(['Deferred', 'DeskSet']);
-      done();
-    });
-
-    collection.handleResponse([
-      {'ok': true, 'id': 'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok': true, 'id': 'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-  });
-
-  it('triggers a error event with all errored ids', (done) => {
-    collection.listenToOnce(collection, 'error', function (ids) {
-      done();
-      expect(ids).toEqual(['Deferred']);
-    });
-
-    collection.handleResponse([
-      {'error':'conflict', 'id':'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-  });
-
-  it('removes successfull deleted from the collection but keeps one with errors', () => {
-    collection.handleResponse([
-      {'error':'conflict', 'id':'1', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'2', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'},
-      {'error':'conflict', 'id':'3', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(collection.get('1')).toBeTruthy();
-      expect(collection.get('3')).toBeTruthy();
-      expect(collection.get('2')).toBeFalsy();
-    });
-  });
-
-  it('triggers resolve for successful delete', () => {
-    const spy = sinon.spy();
-    promise.then(spy);
-
-    collection.handleResponse([
-      {'ok':true, 'id':'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-  it('triggers resolve for successful delete with errors as well', () => {
-    const spy = sinon.spy();
-    promise.then(spy);
-    const ids = {
-      errorIds: ['1'],
-      successIds: ['Deferred', 'DeskSet']
-    };
-
-    collection.handleResponse([
-      {'ok':true, 'id':'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'},
-      {'error':'conflict', 'id':'1', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(spy.calledWith(ids)).toBeTruthy();
-    });
-  });
-
-  it('triggers reject for failed delete', () => {
-    collection.handleResponse([
-      {'error':'conflict', 'id':'1', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'}
-    ], resolve, reject);
-
-    return promise.catch((errors) => {
-      expect(errors).toEqual(['1']);
-    });
-  });
-
-});
diff --git a/app/addons/documents/__tests__/results-options.test.js b/app/addons/documents/__tests__/results-options.test.js
deleted file mode 100644
index 62be559..0000000
--- a/app/addons/documents/__tests__/results-options.test.js
+++ /dev/null
@@ -1,63 +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.
-
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import ResultsOptions from '../components/results-options';
-import Constants from '../constants';
-
-describe('Results Options', () => {
-
-  const defaultProps = {
-    resultsStyle: {
-      textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED,
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    },
-    updateStyle: () => {}
-  };
-
-  it('calls updateStyle when one of the options is clicked', () => {
-    const mockUpdateStyle = sinon.spy();
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps}
-      updateStyle={mockUpdateStyle}/>
-    );
-    wrapper.find('a.icon').at(0).simulate('click');
-    sinon.assert.called(mockUpdateStyle);
-  });
-
-  it('shows the two sections by default', () => {
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps} />
-    );
-    expect(wrapper.find('li.header-label').length).toBe(2);
-  });
-
-  it('hides Display Density when prop is set to false', () => {
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps}
-      showDensity={false} />
-    );
-    expect(wrapper.find('li.header-label').length).toBe(1);
-    expect(wrapper.find('li.header-label').text()).toBe('Font size');
-  });
-
-  it('hides Font Size when prop is set to false', () => {
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps}
-      showFontSize={false} />
-    );
-    expect(wrapper.find('li.header-label').length).toBe(1);
-    expect(wrapper.find('li.header-label').text()).toBe('Display density');
-  });
-});
diff --git a/app/addons/documents/__tests__/results-toolbar.test.js b/app/addons/documents/__tests__/results-toolbar.test.js
deleted file mode 100644
index 614d1e1..0000000
--- a/app/addons/documents/__tests__/results-toolbar.test.js
+++ /dev/null
@@ -1,169 +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.
-
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import utils from '../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../core/api';
-import {ResultsToolBar} from '../components/results-toolbar';
-import Constants from '../constants';
-
-describe('Results Toolbar', () => {
-
-  const defaultProps = {
-    removeItem: () => {},
-    allDocumentsSelected: false,
-    hasSelectedItem: false,
-    toggleSelectAll: () => {},
-    isLoading: false,
-    queryOptionsParams: {},
-    databaseName: 'mydb',
-    fetchUrl: '/db1/_all_docs',
-    docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-    hasResults: true,
-    resultsStyle: {
-      textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED,
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    },
-    updateResultsStyle: () => {}
-  };
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').withArgs('new').returns('mock-url');
-  });
-
-  afterEach(() => {
-    utils.restore(FauxtonAPI.urls);
-  });
-
-  it('renders all content when there are results and they are deletable', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={true} />
-    );
-    expect(wrapper.find('.bulk-action-component').length).toBe(1);
-    expect(wrapper.find('div.two-sides-toggle-button').length).toBe(1);
-    expect(wrapper.find('.document-result-screen__toolbar-create-btn').length).toBe(1);
-  });
-
-  it('does not render bulk action component when list is not deletable', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false} />
-    );
-    expect(wrapper.find('.bulk-action-component').length).toBe(0);
-    expect(wrapper.find('div.two-sides-toggle-button').length).toBe(1);
-    expect(wrapper.find('.document-result-screen__toolbar-create-btn').length).toBe(1);
-  });
-
-  it('includes default partition key when one is selected', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={'partKey1'} />);
-    expect(wrapper.find('a.document-result-screen__toolbar-create-btn').prop('href')).toMatch(/\?partitionKey=partKey1$/);
-  });
-
-  it('toggles display density', () => {
-    const mockUpdateStyle = sinon.spy();
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      updateResultsStyle={mockUpdateStyle}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}/>
-    );
-    wrapper.find('a.icon').first().simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL});
-  });
-
-  it('switches font size', () => {
-    const mockUpdateStyle = sinon.spy();
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      updateResultsStyle={mockUpdateStyle}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}/>
-    );
-    wrapper.find('a.icon').at(1).simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL});
-
-    wrapper.find('a.icon').at(2).simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM});
-
-    wrapper.find('a.icon').at(3).simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE});
-  });
-
-  it('does not show Display Density option in JSON layout', () => {
-    const toolbarJson = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.JSON}/>
-    );
-    expect(toolbarJson.find('li.header-label').text()).toBe('Font size');
-
-    const toolbarMetadata = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}/>
-    );
-    expect(toolbarMetadata.find('li.header-label').at(0).text()).toBe('Display density');
-    expect(toolbarMetadata.find('li.header-label').at(1).text()).toBe('Font size');
-
-    const toolbarTable = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.TABLE}/>
-    );
-    expect(toolbarTable.find('li.header-label').at(0).text()).toBe('Display density');
-    expect(toolbarTable.find('li.header-label').at(1).text()).toBe('Font size');
-  });
-
-  it('shows Table, Metadata and JSON modes when querying a global view', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={''}
-      fetchUrl='/my_db/_design/ddoc1/_view/view1'/>);
-    expect(wrapper.find('button')).toHaveLength(4);
-  });
-
-  it('shows Table, Metadata and JSON modes when querying a partitioned view', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={'partKey1'}
-      fetchUrl='/my_db/_partition/my_partition/_design/ddoc1/_view/view1'/>);
-    expect(wrapper.find('button')).toHaveLength(4);
-  });
-
-  it('shows Table, Metadata and JSON modes when showing All Documents filtered by partition', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={'partKey1'}
-      fetchUrl='/my_db/_all_docs'/>);
-    expect(wrapper.find('button')).toHaveLength(4);
-  });
-});
diff --git a/app/addons/documents/__tests__/shared-helpers.test.js b/app/addons/documents/__tests__/shared-helpers.test.js
deleted file mode 100644
index 9f2d5ff..0000000
--- a/app/addons/documents/__tests__/shared-helpers.test.js
+++ /dev/null
@@ -1,277 +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.
-
-import {
-  getDocUrl,
-  isJSONDocEditable,
-  isJSONDocBulkDeletable,
-  hasBulkDeletableDoc,
-  getDocId,
-  getDocRev
-} from '../index-results/helpers/shared-helpers';
-import FauxtonAPI from '../../../core/api';
-import '../base';
-import Constants from '../constants';
-import sinon from 'sinon';
-
-describe('Docs Shared Helpers', () => {
-  describe('getDocUrl', () => {
-    const context = 'server';
-    const id = 'foo';
-    const databaseName = 'testdb';
-    let spy;
-
-    beforeEach(() => {
-      spy = sinon.spy(FauxtonAPI, 'urls');
-    });
-
-    afterEach(() => {
-      FauxtonAPI.urls.restore();
-    });
-
-    it('requests the proper url with standard inputs', () => {
-      getDocUrl(context, id, databaseName);
-      expect(spy.calledWith('document', 'server', 'testdb', 'foo', '?conflicts=true'));
-    });
-
-    it('requests the proper url when context is undefined', () => {
-      let undefinedContext;
-      getDocUrl(undefinedContext, id, databaseName);
-      expect(spy.calledWith('document', 'server', 'testdb', 'foo', '?conflicts=true'));
-    });
-
-    it('requests the proper url when id is undefined', () => {
-      let undefinedId;
-      getDocUrl(context, undefinedId, databaseName);
-      expect(spy.calledWith('document', 'server', 'testdb', '', '?conflicts=true'));
-    });
-  });
-
-  describe('isJSONDocEditable', () => {
-    const doc = {
-      _id: "aardvark",
-      _rev: "5-717f5e88689af3ad191b47321de10c95",
-      min_weight: 40,
-      max_weight: 65,
-      min_length: 1,
-      max_length: 2.2,
-      latin_name: "Orycteropus afer",
-      wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-      class: "mammal",
-      diet: "omnivore"
-    };
-    let docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-    let testDoc = Object.assign({}, doc);
-
-    afterEach(() => {
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      testDoc = Object.assign({}, doc);
-    });
-
-    it('returns undefined when the doc is undefined', () => {
-      let undefinedDoc;
-      expect(isJSONDocEditable(undefinedDoc, docType)).toBe(undefined);
-    });
-
-    it('returns false when type is MangoIndex', () => {
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(isJSONDocEditable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns false when the doc is empty', () => {
-      let emptyDoc = {};
-      expect(isJSONDocEditable(emptyDoc, docType)).toBe(false);
-    });
-
-    it('returns false if the doc does not have an _id', () => {
-      delete (testDoc._id);
-      expect(isJSONDocEditable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns true otherwise', () => {
-      expect(isJSONDocEditable(testDoc, docType)).toBe(true);
-    });
-  });
-
-  describe('isJSONDocBulkDeletable', () => {
-    const doc = {
-      _id: "aardvark",
-      _rev: "5-717f5e88689af3ad191b47321de10c95",
-      min_weight: 40,
-      max_weight: 65,
-      min_length: 1,
-      max_length: 2.2,
-      latin_name: "Orycteropus afer",
-      wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-      class: "mammal",
-      diet: "omnivore"
-    };
-    let docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-    let testDoc = Object.assign({}, doc);
-
-    afterEach(() => {
-      testDoc = Object.assign({}, doc);
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-    });
-
-    it('returns true for normal doc and views', () => {
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(true);
-    });
-
-    it('returns false if mango index and doc has type of special', () => {
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      testDoc.type = 'special';
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns false if doc does not have _id or id', () => {
-      delete (testDoc._id);
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns false if doc does not have _rev or doc.value.rev', () => {
-      delete (testDoc._rev);
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(false);
-    });
-  });
-
-  describe('hasBulkDeletableDoc', () => {
-    const docs = [
-      {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95",
-        min_weight: 40,
-        max_weight: 65,
-        min_length: 1,
-        max_length: 2.2,
-        latin_name: "Orycteropus afer",
-        wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-        class: "mammal",
-        diet: "omnivore"
-      }
-    ];
-    const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-
-    it('returns true if any docs are bulk deletable', () => {
-      expect(hasBulkDeletableDoc(docs, docType)).toBe(true);
-    });
-
-    it('returns true when no docs are bulk deletable', () => {
-      docs[0].type = 'special';
-      expect(hasBulkDeletableDoc(docs, docType)).toBe(false);
-    });
-  });
-
-  describe('getDocId', () => {
-    it('returns correct ID for docType "view"', () => {
-      const docView = {
-        id: "20c76d4ff9851694792654ab3e2ca303",
-        key: "20c76d4ff9851694792654ab3e2ca303",
-        value: {
-          rev: "1-c59f5770929653147ab939344b84e933"
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      expect(getDocId(docView, docType)).toBe(docView.id);
-    });
-
-    it('returns correct ID for docType "MangoQueryResult"', () => {
-      const docMangoResult = {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95"
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-      expect(getDocId(docMangoResult, docType)).toBe(docMangoResult._id);
-    });
-
-    it('returns _all_docs as ID for special Mango index', () => {
-      const docSpecialMangoIndex = {
-        "ddoc": null,
-        "name": "_all_docs",
-        "type": "special",
-        "def": {
-          "fields": [{ "_id": "asc" }]
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocId(docSpecialMangoIndex, docType)).toBe('_all_docs');
-    });
-
-    it('returns design doc ID as ID for Mango indexes', () => {
-      const docMangoIndex = {
-        ddoc: "_design/a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        name: "a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        type: "json",
-        def: { "fields": [{ "foo": "asc" }] }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocId(docMangoIndex, docType)).toBe(docMangoIndex.ddoc);
-    });
-  });
-
-  describe('getDocRev', () => {
-    it('returns document revision for docType "view"', () => {
-      const docView = {
-        id: "20c76d4ff9851694792654ab3e2ca303",
-        key: "20c76d4ff9851694792654ab3e2ca303",
-        value: {
-          rev: "1-c59f5770929653147ab939344b84e933"
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      expect(getDocRev(docView, docType)).toBe(docView.value.rev);
-    });
-
-    it('returns document revision for docType "view" and only doc', () => {
-      const docView = {
-        id: "20c76d4ff9851694792654ab3e2ca303",
-        _rev: "1-c59f5770929653147ab939344b84e933"
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      expect(getDocRev(docView, docType)).toBe(docView._rev);
-    });
-
-
-    it('returns document revision for docType "MangoQueryResult"', () => {
-      const docMangoResult = {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95"
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-      expect(getDocRev(docMangoResult, docType)).toBe(docMangoResult._rev);
-    });
-
-    it('returns undefined as revision for special Mango index', () => {
-      const docSpecialMangoIndex = {
-        "ddoc": null,
-        "name": "_all_docs",
-        "type": "special",
-        "def": {
-          "fields": [{ "_id": "asc" }]
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocRev(docSpecialMangoIndex, docType)).toBe(undefined);
-    });
-
-    it('returns undefined as revision for Mango indexes', () => {
-      const docMangoIndex = {
-        ddoc: "_design/a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        name: "a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        type: "json",
-        def: { "fields": [{ "foo": "asc" }] }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocRev(docMangoIndex, docType)).toBe(undefined);
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/table-controls.test.js b/app/addons/documents/__tests__/table-controls.test.js
deleted file mode 100644
index e0249ba..0000000
--- a/app/addons/documents/__tests__/table-controls.test.js
+++ /dev/null
@@ -1,51 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import TableControls from '../index-results/components/pagination/TableControls';
-import sinon from 'sinon';
-
-describe('TableControls', () => {
-  it('shows range of columns when not all are shown', () => {
-    const wrapper = mount(<TableControls
-      prioritizedEnabled={false}
-      displayedFields={{shown: 5, allFieldCount: 10}}
-      toggleShowAllColumns={() => {}}
-    />);
-
-    expect(wrapper.find('.shown-fields').text()).toMatch('Showing 5 of 10 columns.');
-  });
-
-  it('shows custom text when all columns are shown', () => {
-    const wrapper = mount(<TableControls
-      prioritizedEnabled={false}
-      displayedFields={{shown: 5, allFieldCount: 5}}
-      toggleShowAllColumns={() => {}}
-    />);
-
-    expect(wrapper.find('.shown-fields').text()).toMatch('Showing 5 columns.');
-  });
-
-  it('shows custom text when all columns are shown', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<TableControls
-      prioritizedEnabled={false}
-      displayedFields={{shown: 5, allFieldCount: 5}}
-      toggleShowAllColumns={spy}
-    />);
-
-    wrapper.find('#footer-doc-control-prioritized').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/table-row.test.js b/app/addons/documents/__tests__/table-row.test.js
deleted file mode 100644
index 95ed776..0000000
--- a/app/addons/documents/__tests__/table-row.test.js
+++ /dev/null
@@ -1,87 +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.
-
-import React from 'react';
-import sinon from 'sinon';
-import { shallow } from 'enzyme';
-import FauxtonAPI from '../../../core/api';
-import Constants from '../constants';
-import TableRow from '../index-results/components/results/TableRow';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Docs Table Row', () => {
-
-  const elem = {
-    content: {
-      _id: "123",
-      vBool: true,
-      vString: 'abc',
-      vFloat: 123.1234,
-      vInt: 123,
-      vObject: { f1: 1, f2: 'b'},
-    },
-    id: "123"
-  };
-
-  const data = {
-    selectedFields: ['vBool', 'vString', 'vFloat', 'vInt', 'vObject']
-  };
-
-  it('all types of value are converted to the appropriate text for display', () => {
-    const wrapper = shallow(<TableRow
-      onClick={sinon.stub()}
-      docChecked={sinon.stub()}
-      el={elem}
-      data={data}
-      index={0}
-      docIdentifier={elem.id}
-      isSelected={false}
-    />);
-
-    expect(wrapper.find('td').at(2).text()).toBe(JSON.stringify(elem.content.vBool));
-    expect(wrapper.find('td').at(3).text()).toBe(elem.content.vString);
-    expect(wrapper.find('td').at(4).text()).toBe(JSON.stringify(elem.content.vFloat));
-    expect(wrapper.find('td').at(5).text()).toBe(JSON.stringify(elem.content.vInt));
-    expect(wrapper.find('td').at(6).text().replace(/[\s]/g, '')).toBe(JSON.stringify(elem.content.vObject));
-  });
-
-  it('shows full text values', () => {
-    const wrapper = shallow(<TableRow
-      onClick={sinon.stub()}
-      docChecked={sinon.stub()}
-      el={elem}
-      data={data}
-      index={0}
-      docIdentifier={elem.id}
-      isSelected={false}
-      textOverflow={Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL}
-    />);
-
-    expect(wrapper.find('td.showall').exists()).toBe(true);
-  });
-
-  it('truncates text values', () => {
-    const wrapper = shallow(<TableRow
-      onClick={sinon.stub()}
-      docChecked={sinon.stub()}
-      el={elem}
-      data={data}
-      index={0}
-      docIdentifier={elem.id}
-      isSelected={false}
-      textOverflow={Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED}
-    />);
-
-    expect(wrapper.find('td.showall').exists()).toBe(false);
-  });
-});
diff --git a/app/addons/documents/__tests__/table-view.test.js b/app/addons/documents/__tests__/table-view.test.js
deleted file mode 100644
index b15e345..0000000
--- a/app/addons/documents/__tests__/table-view.test.js
+++ /dev/null
@@ -1,179 +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.
-
-import {
-  getPseudoSchema,
-  getPrioritizedFields,
-  sortByTwoFields,
-  getNotSelectedFields,
-  getMetaDataTableView,
-  getFullTableViewData
-} from '../index-results/helpers/table-view';
-
-describe('Docs Table View', () => {
-  const docs = [
-    {
-      _id: "badger",
-      _rev: "8-db03387de9cbd5c2814523b043566dfe",
-      wiki_page: "http://en.wikipedia.org/wiki/Badger",
-      min_weight: 7,
-      max_weight: 30,
-      min_length: 0.6,
-      max_length: 0.9,
-      latin_name: "Meles meles",
-      class: "mammal",
-      diet: "omnivore",
-      test: "xyz"
-    },
-    {
-      _id: "aardvark",
-      _rev: "5-717f5e88689af3ad191b47321de10c95",
-      min_weight: 40,
-      max_weight: 65,
-      min_length: 1,
-      max_length: 2.2,
-      latin_name: "Orycteropus afer",
-      wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-      class: "mammal",
-      diet: "omnivore",
-      foo: "bar"
-    }
-  ];
-
-  const schema = [
-    '_id',
-    '_rev',
-    'wiki_page',
-    'min_weight',
-    'max_weight',
-    'min_length',
-    'max_length',
-    'latin_name',
-    'class',
-    'diet',
-    'test',
-    'foo'
-  ];
-
-  describe('getPseudoSchema', () => {
-    it('returns array of unique keys with _id as the first element', () => {
-      expect(getPseudoSchema(docs)).toEqual(schema);
-    });
-  });
-
-  describe('getPrioritizedFields', () => {
-    it('returns the list of most popular attributes', () => {
-      const max = 5;
-      expect(getPrioritizedFields(docs, max)).toEqual([
-        '_id',
-        'class',
-        'diet',
-        'latin_name',
-        'max_length'
-      ]);
-    });
-  });
-
-  describe('sortByTowFields', () => {
-    it('returns proper sorted array for the input', () => {
-      const input = [[2, 'b'], [3, 'z'], [1, 'a'], [3, 'a']];
-      expect(sortByTwoFields(input)).toEqual([
-        [3, 'a'],
-        [3, 'z'],
-        [2, 'b'],
-        [1, 'a']
-      ]);
-    });
-  });
-
-  describe('getNotSelectedFields', () => {
-    it('returns a list of the remaining fields not currently selected', () => {
-      const selectedFields = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
-      const allFields = ['_id', '_rev', 'wiki_page', 'min_weight', 'max_weight', 'min_length', 'max_length', 'latin_name', 'class', 'diet', 'test', 'foo'];
-      expect(getNotSelectedFields(selectedFields, allFields)).toEqual([
-        '_rev',
-        'wiki_page',
-        'min_weight',
-        'max_weight',
-        'min_length',
-        'test',
-        'foo'
-      ]);
-    });
-  });
-
-  describe('getFullTableViewData', () => {
-    let schemaWithoutMetaDataFields;
-    beforeEach(() => {
-      schemaWithoutMetaDataFields = _.without(schema, '_attachments');
-    });
-
-    it('returns json object with attributes necessary when selectedFieldsTableView is not set', () => {
-      const max = 5;
-      const selectedFieldsTableView = getPrioritizedFields(docs, max);
-      const notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
-      const options = {
-        selectedFieldsTableView: [],
-        showAllFieldsTableView: false
-      };
-
-      expect(getFullTableViewData(docs, options)).toEqual({
-        schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView,
-        notSelectedFieldsTableView
-      });
-    });
-
-    it('returns json object with attributes necessary when selectedFieldsTableView is set', () => {
-      const selectedFieldsTableView = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
-      const notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
-      const options = {
-        selectedFieldsTableView,
-        showAllFieldsTableView: false
-      };
-
-      expect(getFullTableViewData(docs, options)).toEqual({
-        schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView,
-        notSelectedFieldsTableView
-      });
-    });
-
-    it('returns json object with attributes necessary when showAllFieldsTableView is set', () => {
-      const selectedFieldsTableView = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
-      const options = {
-        selectedFieldsTableView,
-        showAllFieldsTableView: true
-      };
-
-      expect(getFullTableViewData(docs, options)).toEqual({
-        schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView: schemaWithoutMetaDataFields,
-        notSelectedFieldsTableView: null
-      });
-    });
-  });
-
-  describe('getMetaDataTableView', () => {
-    it('returns json object with attributes necessary to build metadata table', () => {
-      expect(getMetaDataTableView(docs)).toEqual({
-        schema: schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView: schema,
-        notSelectedFieldsTableView: null
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/assets/less/changes.less b/app/addons/documents/assets/less/changes.less
deleted file mode 100644
index 4f38662..0000000
--- a/app/addons/documents/assets/less/changes.less
+++ /dev/null
@@ -1,151 +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.
-
-@import "../../../../../assets/less/animations.less";
-@import "../../../../../assets/less/variables.less";
-
-// used in changes.html
-.change-box {
-  margin: 0 20px 20px 20px;
-}
-
-.change-wrapper {
-  margin-top: 20px;
-  border-bottom: 1px solid #dddddd;
-  &:last-child {
-    border-bottom: none;
-  }
-  .row-fluid {
-    padding: 4px 0 4px 0;
-  }
-  .row-fluid:first {
-    padding: 0px 0 4px 0;
-  }
-  a:hover.js-copy {
-    text-decoration: none;
-  }
-  .js-json-container {
-    display: none;
-  }
-  .span2 {
-    font-weight: bold;
-  }
-  .clipboard-copy-element {
-    color: #666666;
-  }
-}
-
-.changes-header {
-  text-align: center;
-  padding: 26px 20px 0;
-  border-bottom: 1px solid #999999;
-  .label {
-    float: left;
-    margin-right: 5px;
-  }
-  fieldset {
-    text-align: left;
-    display: inline-block;
-    position: relative;
-
-    .btn-secondary {
-      padding: 12px;
-      &:hover {
-        background-color: @hoverHighlight;
-      }
-    }
-  }
-  .fonticon-filter {
-    position: absolute;
-    left: -25px;
-    top: 10px;
-    color: #777777;
-    font-size: 20px;
-  }
-  form {
-    margin: 0;
-  }
-  .help-block {
-    margin-bottom: 0;
-    padding-bottom: 0;
-  }
-  .component-badgelist li {
-    margin: 20px 0;
-  }
-  .remove-filter {
-    color: #333333;
-    text-shadow: none;
-    background-color: transparent;
-    font-size: 20px;
-    margin-top: -3px;
-    padding-left: 0;
-    margin-right: 8px;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-}
-
-.changes-tab-content {
-  padding-top: 70px;
-}
-
-#dashboard-upper-content .changes-header-section .tab-content {
-  padding: 0;
-  overflow: hidden;
-}
-
-.keyframes(slideDownChangesFilter, {
-  opacity: 0;
-  height: 0;
-},
-{
-  opacity: 1;
-  height: 160px;
-});
-
-.keyframes(slideUpChangesFilter, {
-  opacity: 1;
-  height: 160px;
-},
-{
-  opacity: 0;
-  height: 0;
-});
-
-.toggle-changes-filter-enter {
-  .animation(slideDownChangesFilter 1s both);
-}
-
-.toggle-changes-filter-leave {
-  .animation(slideUpChangesFilter 1s both);
-}
-
-.toggle-changes-code-enter {
-  .animation(slideDown .6s both);
-}
-
-.toggle-changes-code-leave {
-  .animation(slideUp .6s both);
-}
-
-.changes-result-limit {
-  margin-left: 20px;
-}
-
-.new-change-row {
-  -webkit-animation: slideDown 1.5s both, highlight-element 2.0s 1;
-}
-
-.no-doc-changes {
-  padding: 30px 0;
-}
diff --git a/app/addons/documents/assets/less/doc-editor.less b/app/addons/documents/assets/less/doc-editor.less
deleted file mode 100644
index 2866610..0000000
--- a/app/addons/documents/assets/less/doc-editor.less
+++ /dev/null
@@ -1,227 +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.
-
-@import "../../../../../assets/less/mixins.less";
-@import "../../../../../assets/less/variables.less";
-
-
-#dashboard.doc-editor-page {
-  background-color: #4d4d4d;
-
-  #dashboard-content {
-    padding-bottom: 0;
-    top: 0;
-  }
-}
-
-#editor-container {
-  height: 100%;
-  &>div:not(.loading-lines), &>div>div {
-    height: 100%;
-  }
-}
-
-.doc-editor-page {
-  border-left: none;
-
-  .loading-lines {
-    margin-top: 30px;
-    div {
-      background-color: white;
-    }
-  }
-
-  #doc-editor-actions-panel {
-    position: absolute;
-    top: 64px;
-    right: 0;
-    left: 0;
-    width: 100%;
-    background-color: #f1f1f1;
-    height: 61px;
-  }
-
-  &#dashboard > header {
-    z-index: 2;
-    > div {
-      .box-shadow(none);
-    }
-  }
-
-  #editor-container {
-    margin-top: 0;
-    font-size: 13px;
-
-    .ace_editor {
-      line-height: 22px;
-    }
-  }
-
-  .doc-actions-left {
-    float: left;
-    padding: 9px 0;
-    button {
-      margin: 0 10px 0 30px;
-    }
-    div {
-      display: inline-block;
-    }
-  }
-
-  .cancel-button {
-    font-size: 14px;
-    color: #666;
-    &:hover {
-      color: @hoverHighlight;
-      text-decoration: none;
-      cursor: pointer;
-    }
-    &--disabled {
-      opacity: 0.5;
-      cursor: not-allowed;
-      color: #666;
-    }
-    &--disabled:hover {
-      opacity: 0.5;
-      cursor: not-allowed;
-      color: #666;
-    }
-  }
-  .panel-button {
-    color: #666;
-    &:hover {
-      color: @hoverHighlight;
-      text-decoration: none;
-      cursor: pointer;
-    }
-    &:disabled {
-      color: @grayLight;
-      cursor: not-allowed;
-    }
-  }
-
-  .bgEditorGutter {
-    width: 49px;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    background-color: #3b3b3b;
-  }
-
-  .panel-button {
-    border: 0;
-    background-color: #f1f1f1;
-    padding: 11px;
-    color: #555555;
-
-    span:first-of-type {
-      margin-left: 4px;
-    }
-
-    .icon {
-      font-size: 18px;
-    }
-
-    .button-text {
-      padding-right: 5px;
-    }
-  }
-  .panel-section {
-    border-left: 1px solid #cccccc;
-    text-align: center;
-    padding: 9px 0;
-    display: inline-block;
-
-    &.open .dropdown-toggle, &:active {
-      box-shadow: none;
-      background-color: inherit;
-    }
-  }
-  .alignRight {
-    text-align: right;
-    font-size: 0; // prevents whitespace gaps between elements
-  }
-  .row-fluid.content-area {
-    background-color: #4d4d4d;
-  }
-
-  // overriding the ace editor inline styles
-  .ace_gutter-layer {
-    min-width: 49px;
-  }
-  .ace_gutter-cell {
-    min-width: 49px;
-  }
-
-  .ace_marker-layer .ace_bracket {
-    margin: 0;
-    border: 1px solid #999999;
-  }
-
-  // hide the labels on the buttons when the screen is shrunk too small,
-  @media screen and (max-width: 1000px) {
-    .panel-button span {
-      display: none;
-    }
-  }
-
-  // hides the API Url header link when the page is too small (prevents wrapping)
-  @media screen and (max-width: 835px) {
-    #api-navbar {
-      display: none;
-    }
-  }
-
-  #dashboard-content .code-region {
-    overflow-y: hidden;
-    position: absolute;
-    top: 125px;
-    height: auto;
-    width: 100%;
-    padding: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-  }
-}
-
-.upload-file-modal input[type="file"] {
-  margin-top: 10px;
-  height: inherit;
-  line-height: inherit;
-}
-
-.view-attachments-section .dropdown-menu {
-  max-width: 540px;
-  text-align: left;
-  overflow: hidden;
-  a:hover {
-    color: @hoverHighlight;
-  }
-}
-
-div.string-editor-modal {
-  width: 80%;
-
-  .modal-content {
-    min-width: initial;
-  }
-
-  .modal-body {
-    padding: 0px;
-  }
-}
-
-.attachment-delimiter {
-  color: #999999;
-  margin: 0 4px;
-}
diff --git a/app/addons/documents/assets/less/documents.less b/app/addons/documents/assets/less/documents.less
deleted file mode 100644
index 6e31c63..0000000
--- a/app/addons/documents/assets/less/documents.less
+++ /dev/null
@@ -1,225 +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.
-/*ALL DOCS TABLE*/
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-@import "query-options.less";
-@import "view-editor.less";
-@import "changes.less";
-@import "sidenav.less";
-@import "index-results.less";
-@import "doc-editor.less";
-@import "header.less";
-@import "revision-browser.less";
-@import "header-docs-left.less";
-@import "partition-key.less";
-
-
-button.beautify {
-  margin-top: 20px;
-}
-
-.toggle-btns {
-  label {
-    margin-right: 0;
-  }
-}
-
-#per-page {
-  float: right;
-
-  #select-per-page {
-    margin-top: 10px;
-    width: 60px;
-  }
-}
-
-#query div.controls-group.well {
-  height: 180px;
-  margin-right: 17px;
-}
-
-/** used in view_editor.html **/
-.design-doc-group {
-  .span3 {
-    margin: 0;
-  }
-  #new-ddoc-section {
-    margin-top: 10px;
-    width: 325px;
-    label {
-      width: 100px
-    }
-    .controls {
-      margin-left: 100px;
-    }
-  }
-}
-
-#map-function, #reduce-function {
-  width: 100%;
-  font-size: 13px;
-  line-height: 22px;
-}
-
-.metadata-page {
-  font-size: 14px;
-  padding: 20px;
-
-  .preheading {
-    font-size: 14px;
-  }
-  h2 {
-    margin: 5px 0 15px;
-  }
-  h3 {
-    font-size: 22px;
-    margin-top: 12px;
-  }
-  header {
-    padding-bottom: 10px;
-  }
-  .icon-question-sign {
-    margin-left: 4px;
-    color: @secondaryBlue;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-  section {
-    line-height: 21px;
-    width: 100%;
-
-    ul {
-      list-style-type: none;
-      margin: 0 0 15px;
-      padding: 0;
-    }
-    .item-title {
-      margin-right: 6px;
-    }
-  }
-}
-
-button.delete {
-  margin-left: 4px;
-}
-
-button.string-edit {
-  position: absolute;
-  padding: 0;
-  z-index: 1000;
-  width: 20px;
-  left: 22px;
-
-  i.icon {
-    margin-right: 0px;
-  }
-}
-
-button.string-edit[disabled] {
-  display: none;
-}
-
-#string-editor-wrapper {
-  height: 500px;
-  width: 100%;
-
-  &>div {
-    height: 100%;
-  }
-}
-
-#keys-input {
-  width: 100%;
-}
-
-#keys-error {
-  display: inline-block;
-}
-
-.change-sequence {
-  word-wrap: break-word;
-}
-
-#dashboard-upper-content {
-  .js-query-keys-wrapper {
-    padding-top: 0;
-  }
-
-  /** used in query-options.html**/
-  .custom-inputs {
-    .row-fluid {
-      padding-top: 20px;
-      .radio, .checkbox {
-        padding-left: 0;
-      }
-      .checkbox.inline,
-      #skipRows {
-        margin-bottom: 0;
-        padding: 6px;
-      }
-    }
-  }
-}
-
-.nav-list {
-  border-top: none;
-}
-
-.end-of-results {
-  margin-bottom: 30px;
-
-  .muted {
-    margin-bottom: 0px;
-  }
-}
-
-body #dashboard #react-headerbar {
-  float: left;
-  overflow: hidden;
-}
-
-.doc-editor-extension-icons {
-  display: inline-block;
-}
-
-.pagination-footer {
-  .footer-table-control label {
-    margin: 0;
-    padding: 0;
-    line-height: initial;
-  }
-
-  .footer-table-control {
-    float: right;
-    display: inline-block;
-    input {
-      margin: 0 5px 0 15px;
-    }
-    margin: 17px 40px 17px 20px;
-  }
-
-  .footer-doc-control-prioritized-wrapper {
-    margin-right: 18px;
-  }
-
-  .page-controls {
-    border-right: solid 1px @btnBorder;
-  }
-
-}
-
-.two-pane .faux-header__breadcrumbs {
-  width: 440px;
-}
diff --git a/app/addons/documents/assets/less/header-docs-left.less b/app/addons/documents/assets/less/header-docs-left.less
deleted file mode 100644
index 2b19048..0000000
--- a/app/addons/documents/assets/less/header-docs-left.less
+++ /dev/null
@@ -1,82 +0,0 @@
-@import "../../../../../assets/less/variables.less";
-
-.faux-header__doc-header-left {
-  top: 0;
-  right: 0;
-  height: @collapsedNavWidth;
-  border-right: 1px solid @grayLight;
-  width: @sidebarWidth + 1px;
-
-  .display-flex();
-  .flex-direction(row);
-}
-
-.faux-header__doc-header-title {
-  height: @collapsedNavWidth;
-  width: 247px;
-  color: #333;
-  font-size: 24px;
-  line-height: 24px;
-  padding: 22px 10px;
-  border-right: 1px solid #ccc;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-button.faux-header__doc-header-dropdown-toggle {
-  border: none;
-  height: @collapsedNavWidth;
-  right: 0;
-  padding: 10px 16px;
-  width: 43px;
-  background-color: transparent !important;
-  border: none;
-  box-shadow: none !important;
-}
-
-button.faux-header__doc-header-dropdown-toggle:focus {
-  color: @hoverHighlight;
-  background-color: transparent !important;
-  border: none;
-  box-shadow: none !important;
-}
-
-.faux-header__doc-header-dropdown-toggle:hover {
-  color: @hoverHighlight;
-  background-color: transparent;
-}
-
-.faux-header__doc-header-dropdown-toggle-icon:before {
-  width: 6px;
-  font-size: 20px;
-  padding-top: 4px;
-}
-
-.faux-header__doc-header-backlink {
-  font-size: 24px;
-  border: none;
-  background-color: transparent;
-  border-right: 1px solid #ccc;
-  width: 40px;
-  padding: 11px;
-}
-
-.faux-header__doc-header-backlink__icon:before {
-  width: 18px;
-}
-
-.faux-header__doc-header-backlink:hover {
-  text-decoration: none;
-  color: @hoverHighlight;
-}
-
-// override bootstrap styles
-.faux-header__doc-header-dropdown-itemwrapper .faux-header__doc-header-dropdown-item {
-  padding: 10px 15px 10px 12px;
-}
-.faux-header__doc-header-dropdown-itemwrapper .faux-header__doc-header-dropdown-item:hover {
-  background-color: @hoverHighlight;
-  color: #fff;
-  cursor: pointer;
-}
diff --git a/app/addons/documents/assets/less/header.less b/app/addons/documents/assets/less/header.less
deleted file mode 100644
index 1600b5c..0000000
--- a/app/addons/documents/assets/less/header.less
+++ /dev/null
@@ -1,32 +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.
-
-
-#react-headerbar {
-  .control-toggle-include-docs {
-    border-right: 1px solid @btnBorder;
-    .icon-check {
-      &:before {
-        margin: 6px 6px 0 0;
-      }
-    }
-    .icon-check-empty {
-      &:before {
-        margin: 6px 9px 0 0;
-      }
-    }
-  }
-}
-
-.right-header-wrapper {
-  justify-content: flex-end;
-}
diff --git a/app/addons/documents/assets/less/index-results.less b/app/addons/documents/assets/less/index-results.less
deleted file mode 100644
index a015a45..0000000
--- a/app/addons/documents/assets/less/index-results.less
+++ /dev/null
@@ -1,275 +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.
-
-@import "../../../../../assets/less/variables.less";
-
-.document-result-screen {
-  .loading-lines-wrapper {
-    margin-left: auto;
-    margin-right: auto;
-    width: 80px;
-  }
-
-  .loading-lines {
-    position: absolute;
-  }
-}
-
-.document-result-screen__toolbar {
-  display: flex;
-  padding-bottom: 20px;
-  position: relative;
-
-  .bulk-action-component {
-    min-width: 90px;
-    min-height: 26px;
-    padding: 8px 0;
-  }
-
-  .text-overflow-switch {
-    min-width: 145px;
-    min-height: 26px;
-    padding: 8px 0;
-  }
-
-  .toolbar-dropdown {
-    .btn {
-      color: #666;
-    }
-
-    .dropdown-menu.arrow:before {
-      right: 80%;
-    }
-
-    a.dropdown-toggle {
-      padding-left: 16px;
-    }
-
-    .dropdown-menu li a {
-      padding: 10px 15px 10px 12px;
-      &:hover {
-        background-color: @hoverHighlight;
-        color: white;
-      }
-    }
-  }
-}
-
-.document-result-screen__toolbar-flex-container {
-  width: 100%;
-  display: flex;
-  justify-content: flex-end;
-}
-
-.document-result-screen__toolbar-create-btn {
-  display: flex;
-  align-items: center;
-  height: 42px;
-}
-
-a.document-result-screen__toolbar-create-btn:active,
-a.document-result-screen__toolbar-create-btn:visited {
-  color: #fff;
-}
-
-.no-results-screen {
-  position: absolute;
-  margin: -15px;
-  top: 50%;
-  margin-top: -125px;
-  width: 100%;
-  h3 {
-    border-top: 1px solid #ccc;
-    height: 45px;
-    font-size: 20px;
-    font-weight: normal;
-    width: 400px;
-    text-align: center;
-    padding-top: 8px;
-    margin: 0 auto;
-  }
-  .no-results-screen-warning {
-    text-align: center;
-    i {
-      padding-right: 0.5rem;
-    }
-  }
-}
-.watermark-logo {
-  background: transparent url("../../../../../assets/img/couch-watermark.png")
-    no-repeat 50% 50%;
-  height: 205px;
-  text-align: center;
-  margin: 0 20%;
-  .preview {
-    margin: 0 10px;
-  }
-}
-
-.table-view-docs {
-  position: absolute;
-
-  .bulk-action-component {
-    padding-bottom: 0;
-    min-height: 0;
-  }
-  .bulk-action-component-panel input {
-    width: auto;
-  }
-
-  .tableview-data-cell-id {
-    a {
-      color: @linkColor;
-    }
-    div:first-of-type {
-      font-weight: 700;
-    }
-    div {
-      text-overflow: ellipsis;
-      overflow: hidden;
-    }
-  }
-  tbody tr {
-    cursor: pointer;
-    &:hover {
-      border-left: 2px solid @hoverHighlight;
-      td {
-        color: @hoverHighlight;
-        input[type="checkbox"] {
-          margin-left: 7px;
-        }
-      }
-    }
-  }
-  td,
-  th,
-  td a {
-    vertical-align: middle;
-    line-height: 20px;
-    font-size: 0.875rem;
-  }
-
-  td,
-  th {
-    color: @defaultHTag;
-    max-width: 160px;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    vertical-align: top;
-    &.showall {
-      overflow: visible;
-      white-space: normal;
-      word-wrap: break-word;
-    }
-    &.small-font {
-      font-size: 0.75rem;
-    }
-    &.large-font {
-      font-size: 1rem;
-    }
-  }
-  td.tableview-checkbox-cell,
-  th.tableview-header-el-checkbox {
-    width: 35px;
-    padding-left: 0px;
-  }
-  .tableview-conflict {
-    color: #f00;
-  }
-  .icon-code-fork {
-    padding-right: 2px;
-    color: #f00;
-  }
-  .tableview-el-last {
-    width: 75px;
-  }
-  .tableview-el-copy {
-    width: 35px;
-  }
-
-  thead input {
-    max-width: 138px;
-    width: 100%;
-    overflow: visible;
-  }
-
-  .table-dropdown-item {
-    padding: 2px 6px;
-    cursor: pointer;
-    background: #2b2f33;
-    color: white;
-    margin: 0 2px;
-  }
-  .table-dropdown-item-highlight {
-    background: #e23632;
-  }
-
-  .icon.icon-filter {
-    position: absolute;
-    right: 6px;
-    top: 6px;
-    pointer-events: none;
-    color: #999;
-  }
-
-  .table-container-autocomplete {
-    position: relative;
-    width: 128px;
-    height: 29px;
-  }
-
-  th {
-    overflow: visible;
-  }
-
-  .table-container-autocomplete .table-select-wrapper {
-    width: inherit;
-    overflow: visible;
-  }
-}
-
-.document-result-screen {
-  .table-bulkselector-section {
-    .bulk-action-component {
-      float: left;
-    }
-    width: 300px;
-  }
-}
-
-.execution-stats-popup {
-  font-size: 14px;
-  .execution-stats-popup-component {
-    [data-status="false"] {
-      color: @fontGrey;
-    }
-    [data-status="true"] {
-      .value {
-        font-weight: bold;
-      }
-    }
-  }
-  .warning {
-    color: @errorAlertColor;
-    margin-top: 8px;
-  }
-}
-
-.execution-stats {
-  font-size: 13px;
-  padding: 8px 8px 8px 0;
-
-  .fonticon-attention-circled {
-    margin-right: 4px;
-  }
-}
diff --git a/app/addons/documents/assets/less/partition-key.less b/app/addons/documents/assets/less/partition-key.less
deleted file mode 100644
index bf8d1a9..0000000
--- a/app/addons/documents/assets/less/partition-key.less
+++ /dev/null
@@ -1,52 +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.
-
-@import "../../../../../assets/less/variables.less";
-
-.partition-selector {
-  display: flex;
-  align-items: center;
-  padding: 0;
-  min-height: 30px;
-}
-
-.partition-selector__switch {
-  background-color: transparent;
-  border: none;
-  color: #666;
-  font-size: 1rem;
-  .fonticon-filter {
-    font-size: 1.25rem;
-    padding-right: 6px;
-  }
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-.partition-selector__switch--active {
-  color: @brandHighlight;
-  padding-right: 0px;
-}
-
-.partition-selector__key {
-  flex: 1;
-  color: #666;
-}
-
-.partition-selector__key--active {
-  color: @brandHighlight;
-}
-
-.partition-selector__global {
-  color: #666;
-}
diff --git a/app/addons/documents/assets/less/query-options.less b/app/addons/documents/assets/less/query-options.less
deleted file mode 100644
index 14f7c2d..0000000
--- a/app/addons/documents/assets/less/query-options.less
+++ /dev/null
@@ -1,183 +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.
-
-#query-options-tray:before {
-  right: 225px;
-}
-
-#query-options-tray {
-  width: 490px;
-  padding-top: 6px;
-  max-height: calc(100vh - 64px);
-  overflow-y: scroll;
-
-  .query-group:first-child {
-    margin-top: 0;
-    padding-top: 0;
-  }
-
-  .icon-question-sign {
-    margin-left: 3px;
-    font-size: 17.5px;
-    color: @secondaryBlue;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-
-  .query-group {
-    padding: 20px;
-    border-bottom: 1px solid #555;
-  }
-
-  .query-group:last-child {
-    border-bottom: none;
-  }
-  .controls-group {
-    margin: 0;
-  }
-  .controls-group:last-child {
-    margin: 0;
-  }
-
-  form {
-    overflow: auto;
-    margin-bottom: 0;
-    .dropdown.inline {
-      display: inline-block;
-    }
-
-    #keys-input {
-      resize: none;
-    }
-
-    #qoGroupLevelGroup {
-      width: 34%;
-    }
-
-    .input-small {
-      width: 74px;
-      margin-left: 5px;
-    }
-    .checkbox {
-      padding: 0;
-      margin: 0;
-    }
-    .btn-success {
-      .border-radius(5px);
-    }
-    .btn-cancel, .btn-cancel:active {
-      background: none;
-      border: none;
-      box-shadow: none;
-      color: @hoverHighlight;
-      line-height: 1em;
-    }
-    .btn-cancelDark, .btn-cancelDark:active {
-      background: none;
-      border: none;
-      box-shadow: none;
-      color: #CCC;
-      line-height: 1em;
-    }
-    select {
-      margin-top: -4px;
-      margin-bottom: 0px;
-    }
-    .include-end-key-row {
-      line-height: 20px;
-      margin-left: 8px;
-    }
-  }
-
-  .toggle-btns {
-    .btn {
-      padding: 5px 12px 5px;
-      background: #727A82;
-      color: #fff;
-      font-size: 12px;
-      border: none;
-    }
-    .btn.active {
-      background: #fff;
-      color: @linkColorHover;
-      box-shadow: none;
-    }
-    label:first-child {
-      .border-radius(5px 0 0 5px);
-    }
-    label:last-child {
-      .border-radius(0 5px 5px 0);
-      margin-left: 1px;
-    }
-  }
-
-  label {
-    margin-right: 0;
-    font-size: 13px;
-
-    /*
-    due to: https://code.google.com/p/chromium/issues/detail?id=411065 - that bug causes the checkbox state not to
-    update when the user clicks on labels quickly. It can be removed once the fix is in Chrome stable
-    */
-    -webkit-user-select: none;
-  }
-  label.disabled {
-    cursor: not-allowed;
-    opacity: .5;
-  }
-  div.controls-group.well{
-    height: 156px;
-    background: none;
-    border: none;
-    padding: 10px 0;
-  }
-  .row-fluid.fieldsets {
-    .inline {
-      width: 32%;
-    }
-    .inline:nth-child(3) {
-      text-align: right;
-      width: 34%;
-    }
-  }
-  .qo-main-fields-row .row-fluid.fieldsets {
-    .inline:nth-child(2) {
-      width: 30%;
-    }
-    .inline:nth-child(3) {
-      text-align: right;
-      width: 36%;
-    }
-  }
-
-  .row-fluid.fieldsets {
-    margin-bottom: 5px;
-    :last-child {
-      margin-bottom: 2px;
-    }
-  }
-
-  #skipRows {
-    margin-left: 5px;
-  }
-  .add-on {
-    height: 28px;
-  }
-  .hide {
-    display: none;
-  }
-
-  .additionalParams {
-    margin-bottom: 2px;
-  }
-}
diff --git a/app/addons/documents/assets/less/revision-browser.less b/app/addons/documents/assets/less/revision-browser.less
deleted file mode 100644
index a3f04df..0000000
--- a/app/addons/documents/assets/less/revision-browser.less
+++ /dev/null
@@ -1,98 +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.
-
-div#dashboard-content div.revision-wrapper {
-  padding: 0 0 15px 0;
-  margin-top: 60px;
-
-  .rev-subtree-selector {
-    font-family: monospace;
-    margin-bottom: 20px;
-  }
-  .left-area {
-    text-align: center;
-  }
-  .ours-rev {
-    font-size: 16px;
-    color: #fff;
-    text-align: center;
-    margin-top: 15px;
-  }
-
-  .revision-browser-controls {
-    color: #fff;
-    margin: 30px 0;
-  }
-
-  .revision-browser-controls .Select .Select-control {
-    border-radius: inherit;
-    border-color: #ccc;
-  }
-
-  .revision-browser-controls .Select .is-focused:not(.is-open) > .Select-control {
-    box-shadow: transparent;
-    border-color: #ccc;
-  }
-
-  .revision-browser-controls .Select .Select-menu-outer {
-    border-radius: inherit;
-  }
-
-  .revision-browser-controls .Select div.Select-placeholder {
-    color: #9d261d;
-  }
-
-  .revision-view-controls {
-    border-top: 1px solid grey;
-    text-align: center;
-  }
-
-  .revision-split-area {
-    padding: 20px 15px;
-    .display-flex();
-    color: #fff;
-  }
-
-  .conflicting-revs-dropdown {
-    max-width: 370px;
-    .display-flex();
-    margin-left: -17px;
-  }
-
-  .revision-split-area pre {
-    border: none;
-    background-color: transparent;
-  }
-  .revision-diff-area {
-    color: #fff;
-    margin-left: 60px;
-  }
-  .revision-diff-area .jsondiffpatch-unchanged, .revision-diff-area .jsondiffpatch-unchanged pre {
-    color: #fff;
-    background-color: transparent;
-    border: none;
-  }
-  .revision-diff-area .jsondiffpatch-added, .revision-diff-area .jsondiffpatch-deleted {
-    color: #000;
-  }
-  .revision-diff-area .jsondiffpatch-modified .jsondiffpatch-left-value pre,
-  .jsondiffpatch-textdiff-deleted,
-  .jsondiffpatch-deleted .jsondiffpatch-property-name,
-  .jsondiffpatch-deleted pre {
-    text-decoration: none;
-  }
-
-  .two-sides-toggle-button {
-    z-index: 0;
-  }
-
-}
diff --git a/app/addons/documents/assets/less/sidenav.less b/app/addons/documents/assets/less/sidenav.less
deleted file mode 100644
index 8ba51a5..0000000
--- a/app/addons/documents/assets/less/sidenav.less
+++ /dev/null
@@ -1,264 +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.
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/mixins.less";
-
-
-#sidebar-content {
-  .loading-lines {
-    margin-top: 20px;
-  }
-}
-
-.sidenav {
-  a {
-    text-decoration: none;
-  }
-
-  // selected nav item row styles
-  .nav-list .active > a {
-    text-shadow: none;
-    background-color: #f1f0f1;
-    color: @brandHighlight;
-    &:hover {
-      color: white;
-    }
-  }
-
-  .dropdown-toggle:hover {
-    color: @hoverHighlight;
-  }
-
-  // ugly! This styles the (+) icon to make it white when a user hovers over a row. Better solution would be to move the
-  // active class to the <li> instead of the child <a>
-  .accordion-list-item:hover, .nav-list > li a:hover {
-    & + div.add-dropdown .dropdown-toggle,
-    & + span.index-menu-toggle {
-      color: white;
-    }
-
-  }
-
-  li {
-    position: relative;
-    a {
-      text-shadow: none;
-    }
-  }
-
-  .design-doc-section {
-    border-bottom: 1px solid #d3d7db;
-    .accordion-list-item:hover {
-      p, .fonticon-play {
-        color: white;
-      }
-      p {
-        background-color: @hoverHighlight;
-      }
-    }
-    .accordion-list-item p {
-      .transition(all 0.25s linear);
-    }
-    .fonticon-play {
-      font-size: 12px;
-      top: 12px;
-      left: 12px;
-    }
-    &.down .fonticon-play {
-      .rotate(90deg);
-    }
-    .add-dropdown {
-      right: 15px;
-    }
-  }
-
-  li.nav-header .index-list li a {
-    padding-left: 46px;
-  }
-
-  li.nav-header {
-    margin-top: 0;
-    position: relative;
-
-    .design-doc-body.in {
-      border-bottom: 1px solid #d3d7db;
-    }
-
-    .accordion-body {
-      color: #eee;
-      margin-left: 0;
-
-      li {
-        cursor: pointer;
-        &.active > a {
-          background-color: #f1f0f1;
-        }
-        > a.down .fonticon-play {
-          .rotate(90deg);
-        }
-        &:hover .fonticon-play {
-          color: #dddddd;
-        }
-        a {
-          font-size: 14px;
-          background-color: rgba(0, 0, 0, 0.02);
-          &:hover {
-            color: #fff;
-            text-decoration: none;
-            background-color: @hoverHighlight;
-          }
-          border-top: none;
-          &.accordion-header{
-            padding: 8px 5px 8px 36px;
-          }
-        }
-      }
-    }
-
-    .toggle-view {
-      padding: 4px 5px 4px 36px;
-    }
-    .fonticon-play {
-      font-size: 8px;
-      top: 11px;
-      left: 15px;
-      color: @subListGray;
-      position: absolute;
-      display: block;
-      vertical-align: bottom;
-      .transition(all 0.25s linear);
-    }
-    .fonticon:before {
-      margin-right: 6px;
-      font-size: 20px;
-      top: 3px;
-      position: relative;
-    }
-    .accordion-header:hover .fonticon-play {
-      color: white;
-    }
-  }
-
-  .design-doc-name {
-    cursor: pointer;
-    margin: 0;
-    color: #222222;
-    span {
-      width: @sidebarWidth - 30px;
-      display: block;
-      padding: 10px 13px 10px 36px;
-      text-overflow: ellipsis;
-      overflow: hidden;
-    }
-    i {
-      padding-right: 6px;
-    }
-  }
-
-  .index-group-header {
-    font-weight: bold;
-  }
-
-  li.nav-header .index-menu-toggle.fonticon {
-    position: absolute;
-    top: 0;
-    right: 0;
-    color: #767f89;
-    height: 30px;
-    width: 40px;
-    padding-top: 2px;
-    padding-left: 4px;
-    .transition(all 0.25s linear);
-    &:hover {
-      color: @hoverHighlight;
-    }
-    &:before {
-      font-size: 17px;
-      margin-right: 0;
-    }
-  }
-}
-
-#index-menu-component-popover {
-  .border-radius(0);
-  .box-shadow(2px 2px rgba(0, 0, 0, 0.2));
-  background-color: @brandDark2;
-  color: #FFF;
-  font-size: 12px;
-  padding: 0;
-  margin-left: -7px;
-  margin-top: 5px;
-  ul {
-    list-style-type: none;
-    margin: 0;
-  }
-  li {
-    padding: 10px;
-    background-color: @brandDark1;
-    margin-bottom: 2px;
-    cursor: pointer;
-    .transition(all 0.25s linear);
-    &:hover {
-      background-color: @hoverHighlight;
-    }
-    &:last-child {
-      margin-bottom: 0;
-    }
-  }
-  .arrow {
-    &:after {
-      border-bottom-color: black;
-      border-top-color: black;
-    }
-  }
-  .fonticon {
-    margin-right: 7px;
-  }
-  .popover-content {
-    padding: 0;
-  }
-}
-
-.clone-index-modal {
-  .modal-body {
-    padding: 20px;
-  }
-  /* the index label ("view" / "search index", etc.) is passed dynamically to the clone index modal. This fixes the text case */
-  .modal-title, .btn-success, .new-index-title-label {
-    text-transform: capitalize;
-  }
-  .styled-select, select {
-    width: 230px;
-  }
-  .row {
-    margin: 0;
-    padding-top: 10px;
-    #new-ddoc-section {
-      width: 262px;
-
-      label {
-        width: 40px;
-        margin-top: 27px;
-        float: left;
-      }
-      div.controls {
-        margin-left: 0;
-        float: right;
-        margin-top: 15px;
-      }
-    }
-  }
-  .ddoc-selector-partitioned {
-    padding-top: 0px;
-    padding-bottom: 16px;
-  }
-}
diff --git a/app/addons/documents/assets/less/view-editor.less b/app/addons/documents/assets/less/view-editor.less
deleted file mode 100644
index 5c23149..0000000
--- a/app/addons/documents/assets/less/view-editor.less
+++ /dev/null
@@ -1,268 +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.
-
-@import "../../../../../assets/less/variables.less";
-
-.define-view {
-  padding: 15px;
-  .help-link {
-    margin-left: 4px;
-  }
-  .design-doc-group #new-ddoc-section {
-    margin-top: 24px;
-    label {
-      padding-top: 12px;
-    }
-  }
-}
-
-/* to remove once Mango has moved to the standard 2-panel layout */
-.mango-editor-wrapper {
-  label {
-    font-size: 16px;
-    margin-right: 0;
-  }
-  .bordered-box {
-    border-bottom: 1px solid #ccc;
-  }
-  .padded-box {
-    margin: 15px;
-  }
-  .db-title {
-    color: @brandHighlight;
-    line-height: 30px;
-  }
-  #index-name {
-    height: 46px;
-    width: 200px;
-  }
-  .new-ddoc-input {
-    margin-top: 25px;
-    height: 46px;
-  }
-  pre.prettyprint-left {
-    padding: 5px;
-  }
-  form {
-    padding-bottom: 15px;
-  }
-  a.edit-link {
-    float: right;
-    margin-right: 5px;
-    cursor: pointer;
-  }
-  .help-link {
-    margin-left: 4px;
-  }
-}
-
-.mango-select {
-  width: inherit;
-  overflow: visible;
-
-  div {
-    z-index: 100;
-  }
-
-  .mango-select-entry {
-    background-color: @queryHistoryBGColor;
-    color: @queryHistoryColor;
-
-    &.is-selected, &.is-focused {
-      background-color: @brandHighlight;
-      color: @queryHistoryBGColor;
-    }
-  }
-}
-
-// 940px grid without margin
-// -------------------------
-@gridColumnWidthNoMargin:         60px;
-@gridGutterWidthNoMargin:         0px;
-@gridRowWidthNoMargin:            (@gridColumns * @gridColumnWidthNoMargin) + (@gridGutterWidthNoMargin * (@gridColumns - 1));
-
-// 1200px min
-@gridColumnWidth1200NoMargin:     70px;
-@gridGutterWidth1200NoMargin:     0px;
-@gridRowWidth1200NoMargin:        (@gridColumns * @gridColumnWidth1200NoMargin) + (@gridGutterWidth1200NoMargin * (@gridColumns - 1));
-
-// 768px-979px
-@gridColumnWidth768NoMargin:      42px;
-@gridGutterWidth768NoMargin:      0px;
-@gridRowWidth768NoMargin:         (@gridColumns * @gridColumnWidth768NoMargin) + (@gridGutterWidth768NoMargin * (@gridColumns - 1));
-// Fluid grid
-// -------------------------
-@fluidGridColumnWidthNoMargin:    percentage(@gridColumnWidthNoMargin/@gridRowWidthNoMargin);
-@fluidGridGutterWidthNoMargin:    percentage(@gridGutterWidthNoMargin/@gridRowWidthNoMargin);
-// 1200px min
-@fluidGridColumnWidth1200NoMargin:     percentage(@gridColumnWidth1200NoMargin/@gridRowWidth1200NoMargin);
-@fluidGridGutterWidth1200NoMargin:     percentage(@gridGutterWidth1200NoMargin/@gridRowWidth1200NoMargin);
-// 768px-979px
-@fluidGridColumnWidth768NoMargin:      percentage(@gridColumnWidth768NoMargin/@gridRowWidth768NoMargin);
-@fluidGridGutterWidth768NoMargin:      percentage(@gridGutterWidth768NoMargin/@gridRowWidth768NoMargin);
-
-
-.two-pane > .fluid(@fluidGridColumnWidth1200NoMargin, @fluidGridGutterWidth1200NoMargin);
-
-.two-pane {
-
-  .core (@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
-    }
-
-    .span (@columns) {
-      width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-    }
-
-    .row {
-      margin-left: @gridGutterWidth * -1;
-      .clearfix();
-    }
-
-    [class*="span"] {
-      float: left;
-      min-height: 1px; // prevent collapsing columns
-      margin-left: @gridGutterWidth;
-    }
-
-    // Set the container width, and override it for fixed navbars in media queries
-    .container,
-    .navbar-static-top .container,
-    .navbar-fixed-top .container,
-    .navbar-fixed-bottom .container { .span(@gridColumns); }
-
-    // generate .spanX and .offsetX
-    .spanX (@gridColumns);
-    .offsetX (@gridColumns);
-
-  }
-
-  .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offset@{index}:first-child { .offsetFirstChild(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
-      *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .offsetFirstChild (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
-      *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .span (@columns) {
-      width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
-      *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .row-fluid {
-      width: 100%;
-      .clearfix();
-      [class*="span"] {
-        .input-block-level();
-        float: left;
-        margin-left: @fluidGridGutterWidth;
-        *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-      }
-      [class*="span"]:first-child {
-        margin-left: 0;
-      }
-
-      // Space grid-sized controls properly if multiple per line
-      .controls-row [class*="span"] + [class*="span"] {
-        margin-left: @fluidGridGutterWidth;
-      }
-
-      // generate .spanX and .offsetX
-      .spanX (@gridColumns);
-      .offsetX (@gridColumns);
-    }
-
-  }
-
-  .input(@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .span(@columns) {
-      width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14;
-    }
-
-    input,
-    textarea,
-    .uneditable-input {
-      margin-left: 0; // override margin-left from core grid system
-    }
-
-    // Space grid-sized controls properly if multiple per line
-    .controls-row [class*="span"] + [class*="span"] {
-      margin-left: @gridGutterWidth;
-    }
-
-    // generate .spanX
-    .spanX (@gridColumns);
-  }
-}
-
-a.index-cancel-link {
-  margin-left: 10px;
-  font-size: 14px;
-  color: #666;
-  &:hover {
-    color: @hoverHighlight;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
-
-.ddoc-selector-partitioned {
-  clear: both;
-  padding-top: 16px;
-
-  label.check--disabled {
-    cursor: default
-  }
-}
-
-.reduce-editor-warning {
-  padding-bottom: 1rem;
-}
diff --git a/app/addons/documents/base.js b/app/addons/documents/base.js
deleted file mode 100644
index 6294b00..0000000
--- a/app/addons/documents/base.js
+++ /dev/null
@@ -1,284 +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.
-
-import app from "../../app";
-import Helpers from "../../helpers";
-import FauxtonAPI from "../../core/api";
-import Documents from "./routes";
-import designDocInfoReducers from "./designdocinfo/reducers";
-import reducers from "./index-results/reducers";
-import mangoReducers from "./mango/mango.reducers";
-import sidebarReducers from "./sidebar/reducers";
-import partitionKeyReducers from "./partition-key/reducers";
-import revisionBrowserReducers from './rev-browser/reducers';
-import docEditorReducers from './doc-editor/reducers';
-import changesReducers from './changes/reducers';
-import indexEditorReducers from './index-editor/reducers';
-import "./assets/less/documents.less";
-
-FauxtonAPI.addReducers({
-  indexResults: reducers,
-  mangoQuery: mangoReducers,
-  sidebar: sidebarReducers,
-  revisionBrowser: revisionBrowserReducers,
-  partitionKey: partitionKeyReducers,
-  docEditor: docEditorReducers,
-  changes: changesReducers,
-  designDocInfo: designDocInfoReducers,
-  indexEditor: indexEditorReducers
-});
-
-function getQueryParam (query) {
-  if (!query) {
-    query = '';
-  }
-  return query;
-}
-
-function partitionUrlComponent(partitionKey) {
-  return partitionKey ? `/_partition/${partitionKey}` : '';
-}
-
-FauxtonAPI.registerUrls('allDocs', {
-  server: function (id, query) {
-    /** XXX DEPRECATED: use allDocsSanitized **/
-    return Helpers.getServerUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  },
-  app: function (id, partitionKey, query) {
-    /** XXX DEPRECATED: use allDocsSanitized **/
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_all_docs' + getQueryParam(query);
-  },
-  apiurl: function (id, query) {
-    /** XXX DEPRECATED: use allDocsSanitized **/
-    return Helpers.getApiUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('partitioned_allDocs', {
-  app: function (databaseName, partitionKey, query) {
-    return 'database/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query);
-  },
-  apiurl: function (databaseName, partitionKey, query) {
-    return Helpers.getApiUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
-  },
-  server: function (databaseName, partitionKey, query) {
-    return Helpers.getServerUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('allDocsSanitized', {
-  server: function (id, query) {
-    id = encodeURIComponent(id);
-    return Helpers.getServerUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  },
-
-  app: function (id, query) {
-    id = encodeURIComponent(id);
-    return 'database/' + id + '/_all_docs' + getQueryParam(query);
-  },
-
-  apiurl: function (id, query) {
-    id = encodeURIComponent(id);
-    return Helpers.getApiUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('bulk_docs', {
-  server: function (id, query) {
-    return Helpers.getServerUrl('/' + encodeURIComponent(id) + '/_bulk_docs' + getQueryParam(query));
-  },
-  app: function (id, query) {
-    return 'database/' + id + '/_bulk_docs' + getQueryParam(query);
-  },
-  apiurl: function (id, query) {
-    return Helpers.getApiUrl('/' + id + '/_bulk_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('revision-browser', {
-  app: function (id, doc) {
-    return 'database/' + id + '/' + doc + '/conflicts';
-  }
-});
-
-FauxtonAPI.registerUrls('designDocs', {
-  server: function (id, designDoc) {
-    return Helpers.getServerUrl('/' + id + '/' + designDoc + '/_info');
-  },
-
-  app: function (id, partitionKey, designDoc) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + app.utils.safeURLName(designDoc) + '/_info';
-  },
-
-  apiurl: function (id, designDoc) {
-    return Helpers.getApiUrl('/' + id + '/' + designDoc + '/_info');
-  }
-});
-
-FauxtonAPI.registerUrls('view', {
-  server: function (database, partitionKey, designDoc, viewName) {
-    return Helpers.getServerUrl('/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_view/' + viewName);
-  },
-
-  app: function (database, designDoc) {
-    return 'database/' + database + '/_design/' + designDoc + '/_view/';
-  },
-
-  apiurl: function (id, partitionKey, designDoc, viewName) {
-    return Helpers.getApiUrl('/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_view/' + viewName);
-  },
-
-  edit: function (database, partitionKey, designDoc, indexName) {
-    return 'database/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_view/' + indexName + '/edit';
-  },
-
-  showView: function (database, partitionKey, designDoc, viewName) {
-    return '/database/' + database + partitionUrlComponent(partitionKey) + '/' + designDoc + '/_view/' + viewName;
-  },
-
-  fragment: function (database, designDoc, viewName) {
-    return 'database/' + database + designDoc + '/_view/' + viewName;
-  }
-});
-
-FauxtonAPI.registerUrls('partitioned_view', {
-  server: function (database, partitionKey, designDoc, viewName) {
-    return Helpers.getServerUrl('/' + database + '/_partition/' + partitionKey + '/_design/' + designDoc + '/_view/' + viewName);
-  },
-  app: function (database, partitionKey, designDoc) {
-    return 'database/' + database + '/_partition/' + partitionKey + '/_design/' + designDoc + '/_view/';
-  },
-  apiurl: function (database, partitionKey, designDoc, viewName) {
-    return Helpers.getApiUrl('/' + database + '/_partition/' + partitionKey + '/_design/' + designDoc + '/_view/' + viewName);
-  }
-});
-
-FauxtonAPI.registerUrls('document', {
-  server: function (database, doc, query) {
-    if (_.isUndefined(query)) {
-      query = '';
-    }
-    return Helpers.getServerUrl('/' + database + '/' + doc + query);
-  },
-
-  attachment: function (database, doc, filename, query) {
-    if (_.isUndefined(query)) {
-      query = '';
-    }
-    return Helpers.getServerUrl('/' + database + '/' + doc + '/' + filename + query);
-  },
-
-  app: function (database, doc) {
-    return '/database/' + database + '/' + doc;
-  },
-
-  apiurl: function (database, doc) {
-    if (!doc) {
-      // api url for creating a doc with POST
-      return Helpers.getApiUrl('/' + database);
-    }
-    return Helpers.getApiUrl('/' + database + '/' + doc);
-  },
-
-  'web-index': function (database, doc) {
-    return '/database/' + database + '/' + doc;
-  }
-});
-
-FauxtonAPI.registerUrls('new', {
-  newDocument: function (database) {
-    return '/database/' + database + '/_new';
-  },
-
-  newView: function (database, partitionKey) {
-    return '/database/' + database + partitionUrlComponent(partitionKey) + '/new_view';
-  },
-
-  addView: function (database, partitionKey, ddoc) {
-    return '/database/' + database + partitionUrlComponent(partitionKey) + '/new_view/' + ddoc;
-  }
-});
-
-FauxtonAPI.registerUrls('base', {
-  server: function (database) {
-    return Helpers.getServerUrl('/' + database + '/');
-  },
-
-  app: function (database) {
-    return '/database/' + database + '/';
-  },
-});
-
-FauxtonAPI.registerUrls('mango', {
-
-  'index-server': function (db, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getServerUrl('/' + db + '/_index' + query);
-  },
-
-  'index-apiurl': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getApiUrl('/' + db + partitionUrlComponent(partitionKey) + '/_index' + query);
-  },
-
-  'index-app': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return 'database/' + db + partitionUrlComponent(partitionKey) + '/_index' + query;
-  },
-
-  'index-server-bulk-delete': function (db) {
-    return Helpers.getServerUrl('/' + db + '/_index/_bulk_delete');
-  },
-
-  'query-server': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getServerUrl('/' + db + partitionUrlComponent(partitionKey) + '/_find' + query);
-  },
-
-  'query-apiurl': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getApiUrl('/' + db + partitionUrlComponent(partitionKey) + '/_find' + query);
-  },
-
-  'query-app': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return 'database/' + db + partitionUrlComponent(partitionKey) + '/_find' + query;
-  },
-
-  'explain-server': function (db, partitionKey) {
-    return Helpers.getServerUrl('/' + db + partitionUrlComponent(partitionKey) + '/_explain');
-  },
-
-  'explain-apiurl': function (db, partitionKey) {
-    return Helpers.getApiUrl('/' + db + partitionUrlComponent(partitionKey) + '/_explain');
-  }
-});
-
-export default Documents;
diff --git a/app/addons/documents/changes/actions.js b/app/addons/documents/changes/actions.js
deleted file mode 100644
index f6f72d4..0000000
--- a/app/addons/documents/changes/actions.js
+++ /dev/null
@@ -1,84 +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.
-
-import app from '../../../app';
-import FauxtonAPI from '../../../core/api';
-import { get } from '../../../core/ajax';
-import ActionTypes from './actiontypes';
-import Helpers from '../helpers';
-
-const pollingTimeout = 60000;
-let currentRequest;
-
-const addFilter = (filter) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-    filter: filter
-  });
-};
-
-const removeFilter = (filter) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.REMOVE_CHANGES_FILTER_ITEM,
-    filter: filter
-  });
-};
-
-const loadChanges = (databaseName) => (dispatch) => {
-  currentRequest = null;
-  getLatestChanges(dispatch, databaseName);
-};
-
-const getLatestChanges = (dispatch, databaseName, lastSeqNum) => {
-  const params = {
-    limit: 100
-  };
-
-  // after the first request for the changes list has been made, switch to longpoll
-  if (currentRequest) {
-    params.since = lastSeqNum;
-    params.timeout = pollingTimeout;
-    params.feed = 'longpoll';
-  }
-
-  const query = app.utils.queryParams(params);
-  const db = app.utils.safeURLName(databaseName);
-  const endpoint = FauxtonAPI.urls('changes', 'server', db, '?' + query);
-  get(endpoint).then((res) => {
-    if (res.error) {
-      throw new Error(res.reason || res.error);
-    }
-    updateChanges(res, dispatch);
-  }).catch((err) => {
-    FauxtonAPI.addNotification({
-      msg: 'Error loading list of changes. Reason: ' + err.message,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const updateChanges = (json, dispatch) => {
-  const latestSeqNum = Helpers.getSeqNum(json.last_seq);
-  dispatch({
-    type: ActionTypes.UPDATE_CHANGES,
-    changes: json.results,
-    seqNum: latestSeqNum
-  });
-};
-
-export default {
-  addFilter,
-  removeFilter,
-  loadChanges
-};
diff --git a/app/addons/documents/changes/actiontypes.js b/app/addons/documents/changes/actiontypes.js
deleted file mode 100644
index 6325683..0000000
--- a/app/addons/documents/changes/actiontypes.js
+++ /dev/null
@@ -1,19 +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.
-
-export default {
-  UPDATE_CHANGES: 'UPDATE_CHANGES',
-  ADD_CHANGES_FILTER_ITEM: 'ADD_CHANGES_FILTER_ITEM',
-  REMOVE_CHANGES_FILTER_ITEM: 'REMOVE_CHANGES_FILTER_ITEM',
-  UPDATE_CHANGES_FILTER: 'UPDATE_CHANGES_FILTER',
-  TOGGLE_CHANGES_CODE_VISIBILITY: 'TOGGLE_CHANGES_CODE_VISIBILITY'
-};
diff --git a/app/addons/documents/changes/components/AddFilterForm.js b/app/addons/documents/changes/components/AddFilterForm.js
deleted file mode 100644
index 8e0b795..0000000
--- a/app/addons/documents/changes/components/AddFilterForm.js
+++ /dev/null
@@ -1,93 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-export default class AddFilterForm extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      filter: '',
-      error: false
-    };
-    this.submitForm = this.submitForm.bind(this);
-  }
-
-  submitForm (e) {
-    e.preventDefault();
-    e.stopPropagation();
-
-    if (this.props.hasFilter(this.state.filter)) {
-      this.setState({ error: true });
-
-      // Yuck. This removes the class after the effect has completed so it can occur again. The
-      // other option is to use jQuery to add the flash. This seemed slightly less crumby
-      let component = this;
-      setTimeout(function () {
-        component.setState({ error: false });
-      }, 1000);
-    } else {
-      this.props.addFilter(this.state.filter);
-      this.setState({ filter: '', error: false });
-    }
-  }
-
-  componentDidMount () {
-    this.focusFilterField();
-  }
-
-  componentDidUpdate () {
-    this.focusFilterField();
-  }
-
-  focusFilterField () {
-    this.addItem.focus();
-  }
-
-  inputClassNames () {
-    let className = 'js-changes-filter-field';
-    if (this.state.error) {
-      className += ' errorHighlight';
-    }
-    return className;
-  }
-
-  render () {
-    return (
-      <form className="form-inline js-filter-form" onSubmit={this.submitForm}>
-        <fieldset>
-          <i className="fonticon-filter" />
-          <input
-            type="text"
-            ref={node => this.addItem = node}
-            className={this.inputClassNames()}
-            placeholder="Sequence or ID"
-            onChange={(e) => this.setState({ filter: e.target.value })}
-            value={this.state.filter} />
-          <button type="submit" className="btn btn-secondary">Filter</button>
-          <div className="help-block"></div>
-        </fieldset>
-      </form>
-    );
-  }
-}
-
-AddFilterForm.propTypes = {
-  addFilter: PropTypes.func.isRequired,
-  hasFilter: PropTypes.func.isRequired,
-  tooltips: PropTypes.string
-};
-AddFilterForm.defaultProps = {
-  tooltip: ''
-};
diff --git a/app/addons/documents/changes/components/ChangeID.js b/app/addons/documents/changes/components/ChangeID.js
deleted file mode 100644
index 79c8a33..0000000
--- a/app/addons/documents/changes/components/ChangeID.js
+++ /dev/null
@@ -1,29 +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.
-
-import React from 'react';
-import FauxtonAPI from '../../../../core/api';
-
-export default class ChangeID extends React.Component {
-  render () {
-    const { deleted, id, databaseName } = this.props;
-    if (deleted) {
-      return (
-        <span className="js-doc-id">{id}</span>
-      );
-    }
-    const link = '#' + FauxtonAPI.urls('document', 'app', databaseName, id);
-    return (
-      <a href={link} className="js-doc-link">{id}</a>
-    );
-  }
-}
diff --git a/app/addons/documents/changes/components/ChangeRow.js b/app/addons/documents/changes/components/ChangeRow.js
deleted file mode 100644
index e6d30fe..0000000
--- a/app/addons/documents/changes/components/ChangeRow.js
+++ /dev/null
@@ -1,120 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import uuid from 'uuid';
-import FauxtonAPI from '../../../../core/api';
-import Components from '../../../fauxton/components';
-import ReactComponents from '../../../components/react-components';
-import ChangesCodeTransition from './ChangesCodeTransition';
-import ChangeID from './ChangeID';
-
-const {Copy} = ReactComponents;
-
-export default class ChangeRow extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      codeVisible: false
-    };
-  }
-
-  toggleJSON (e) {
-    e.preventDefault();
-    this.setState({ codeVisible: !this.state.codeVisible });
-  }
-
-  getChangesCode () {
-    return (this.state.codeVisible) ? <Components.CodeFormat key="changesCodeSection" code={this.getChangeCode()} /> : null;
-  }
-
-  getChangeCode () {
-    return {
-      changes: this.props.change.changes,
-      doc: this.props.change.doc
-    };
-  }
-
-  showCopiedMessage (target) {
-    let msg = 'The document ID has been copied to your clipboard.';
-    if (target === 'seq') {
-      msg = 'The document seq number has been copied to your clipboard.';
-    }
-    FauxtonAPI.addNotification({
-      msg: msg,
-      type: 'info',
-      clear: true
-    });
-  }
-
-  render () {
-    const { codeVisible } = this.state;
-    const { change, databaseName } = this.props;
-    const wrapperClass = 'change-wrapper' + (change.isNew ? ' new-change-row' : '');
-
-    return (
-      <div className={wrapperClass}>
-        <div className="change-box" data-id={change.id}>
-          <div className="row-fluid">
-            <div className="span2">seq</div>
-            <div className="span8 change-sequence">{change.seq}</div>
-            <div className="span2 text-right">
-              <Copy
-                uniqueKey={uuid.v4()}
-                text={change.seq.toString()}
-                onClipboardClick={() => this.showCopiedMessage('seq')} />
-            </div>
-          </div>
-
-          <div className="row-fluid">
-            <div className="span2">id</div>
-            <div className="span8">
-              <ChangeID id={change.id} deleted={change.deleted} databaseName={databaseName} />
-            </div>
-            <div className="span2 text-right">
-              <Copy
-                uniqueKey={uuid.v4()}
-                text={change.id}
-                onClipboardClick={() => this.showCopiedMessage('id')} />
-            </div>
-          </div>
-
-          <div className="row-fluid">
-            <div className="span2">deleted</div>
-            <div className="span10">{change.deleted ? 'True' : 'False'}</div>
-          </div>
-
-          <div className="row-fluid">
-            <div className="span2">changes</div>
-            <div className="span10">
-              <button type="button" className='btn btn-small btn-secondary' onClick={this.toggleJSON.bind(this)}>
-                {codeVisible ? 'Close JSON' : 'View JSON'}
-              </button>
-            </div>
-          </div>
-
-          <ChangesCodeTransition
-            codeVisible={this.state.codeVisible}
-            code={this.getChangeCode()}
-          />
-        </div>
-      </div>
-    );
-  }
-}
-
-ChangeRow.propTypes = {
-  change: PropTypes.object,
-  databaseName: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesCodeTransition.js b/app/addons/documents/changes/components/ChangesCodeTransition.js
deleted file mode 100644
index 09ba58d..0000000
--- a/app/addons/documents/changes/components/ChangesCodeTransition.js
+++ /dev/null
@@ -1,94 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import Components from '../../../fauxton/components';
-import {TransitionMotion, spring, presets} from 'react-motion';
-import '../../../../../assets/js/plugins/prettify';
-
-export default class ChangesCodeTransition extends React.Component {
-  willEnter () {
-    return {
-      opacity: spring(1, presets.gentle),
-      height: spring(160, presets.gentle)
-    };
-  }
-
-  willLeave () {
-    return {
-      opacity: spring(0, presets.gentle),
-      height: spring(0, presets.gentle)
-    };
-  }
-
-  getStyles (prevStyle) {
-    if (!prevStyle && this.props.codeVisible) {
-      return [{
-        key: '1',
-        style: this.willEnter()
-      }];
-    }
-
-    if (!prevStyle && !this.props.codeVisible) {
-      return [{
-        key: '1',
-        style: this.willLeave()
-      }];
-    }
-    return prevStyle.map(item => {
-      return {
-        key: '1',
-        style: item.style
-      };
-    });
-  }
-
-  getChildren (items) {
-    const code =  items.map(({style}) => {
-      if (this.props.codeVisible === false && style.opacity === 0) {
-        return null;
-      }
-      return (
-        <div key='1' style={{opacity: style.opacity, height: style.height + 'px'}}>
-          <Components.CodeFormat
-            code={this.props.code}
-          />
-        </div>
-      );
-    });
-
-    return (
-      <span>
-        {code}
-      </span>
-    );
-  }
-
-  render () {
-    return (
-      <TransitionMotion
-        styles={this.getStyles()}
-        willLeave={this.willLeave}
-        willEnter={this.willEnter}
-      >
-        {this.getChildren.bind(this)}
-      </TransitionMotion>
-    );
-  }
-}
-
-ChangesCodeTransition.propTypes = {
-  code: PropTypes.object.isRequired,
-  codeVisible: PropTypes.bool.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesContainer.js b/app/addons/documents/changes/components/ChangesContainer.js
deleted file mode 100644
index 3fa7ce3..0000000
--- a/app/addons/documents/changes/components/ChangesContainer.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { connect } from 'react-redux';
-import ChangesScreen from './ChangesScreen';
-import Actions from '../actions';
-
-const mapStateToProps = ({ changes }, ownProps) => {
-  return {
-    changes: changes.filteredChanges,
-    loaded: changes.isLoaded,
-    databaseName: ownProps.databaseName,
-    isShowingSubset: changes.showingSubset
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    loadChanges: (databaseName) => {
-      dispatch(Actions.loadChanges(databaseName));
-    }
-  };
-};
-
-const ChangesContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ChangesScreen);
-
-export default ChangesContainer;
diff --git a/app/addons/documents/changes/components/ChangesScreen.js b/app/addons/documents/changes/components/ChangesScreen.js
deleted file mode 100644
index 8a78d37..0000000
--- a/app/addons/documents/changes/components/ChangesScreen.js
+++ /dev/null
@@ -1,67 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import ChangeRow from './ChangeRow';
-
-export default class ChangesScreen extends React.Component {
-  constructor (props) {
-    super(props);
-    this.props.loadChanges(this.props.databaseName);
-  }
-
-  showingSubsetMsg () {
-    const { isShowingSubset, changes } = this.props;
-    let msg = '';
-    if (isShowingSubset) {
-      let numChanges = changes.length;
-      msg = <p className="changes-result-limit">Limiting results to latest <b>{numChanges}</b> changes.</p>;
-    }
-    return msg;
-  }
-
-  getRows () {
-    const { changes, loaded, databaseName } = this.props;
-    if (!changes.length && loaded) {
-      return (
-        <p className="no-doc-changes">
-          There are no document changes to display.
-        </p>
-      );
-    }
-
-    return changes.map((change, i) => {
-      return <ChangeRow change={change} key={i} databaseName={databaseName} />;
-    });
-  }
-
-  render () {
-    return (
-      <div>
-        <div className="js-changes-view">
-          {this.showingSubsetMsg()}
-          {this.getRows()}
-        </div>
-      </div>
-    );
-  }
-}
-
-ChangesScreen.propTypes = {
-  changes: PropTypes.array.isRequired,
-  loaded: PropTypes.bool.isRequired,
-  databaseName: PropTypes.string.isRequired,
-  isShowingSubset: PropTypes.bool.isRequired,
-  loadChanges: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesTabContent.js b/app/addons/documents/changes/components/ChangesTabContent.js
deleted file mode 100644
index 205fe44..0000000
--- a/app/addons/documents/changes/components/ChangesTabContent.js
+++ /dev/null
@@ -1,52 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import ReactComponents from '../../../components/react-components';
-import AddFilterForm from './AddFilterForm';
-
-export default class ChangesTabContent extends React.Component {
-  constructor (props) {
-    super(props);
-    this.addFilter = this.addFilter.bind(this);
-    this.hasFilter = this.hasFilter.bind(this);
-  }
-
-  addFilter (newFilter) {
-    if (_.isEmpty(newFilter)) {
-      return;
-    }
-    this.props.addFilter(newFilter);
-  }
-
-  hasFilter (filter) {
-    return this.props.filters.includes(filter);
-  }
-
-  render () {
-    return (
-      <div className="changes-header">
-        <AddFilterForm filter={(label) => this.props.removeFilter(label)} addFilter={this.addFilter}
-          hasFilter={this.hasFilter} />
-        <ReactComponents.BadgeList elements={this.props.filters} removeBadge={(label) => this.props.removeFilter(label)} />
-      </div>
-    );
-  }
-}
-
-ChangesTabContent.propTypes = {
-  filters: PropTypes.array.isRequired,
-  addFilter: PropTypes.func.isRequired,
-  removeFilter: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesTabContentContainer.js b/app/addons/documents/changes/components/ChangesTabContentContainer.js
deleted file mode 100644
index ed222b4..0000000
--- a/app/addons/documents/changes/components/ChangesTabContentContainer.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { connect } from 'react-redux';
-import ChangesTabContent from './ChangesTabContent';
-import Actions from '../actions';
-
-const mapStateToProps = ({ changes }) => {
-  return {
-    filters: changes.filters
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    addFilter: (filter) => {
-      dispatch(Actions.addFilter(filter));
-    },
-
-    removeFilter: (filter) => {
-      dispatch(Actions.removeFilter(filter));
-    }
-  };
-};
-
-const ChangesTabContentContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ChangesTabContent);
-
-export default ChangesTabContentContainer;
diff --git a/app/addons/documents/changes/reducers.js b/app/addons/documents/changes/reducers.js
deleted file mode 100644
index 8bcf9f6..0000000
--- a/app/addons/documents/changes/reducers.js
+++ /dev/null
@@ -1,126 +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.
-
-import ActionTypes from './actiontypes';
-import Helpers from '../helpers';
-
-const initialState = {
-  isLoaded: false,
-  filters: [],
-  changes: [],
-  filteredChanges: [],
-  maxChangesListed: 100,
-  showingSubset: false,
-  lastSequenceNum: null
-};
-
-function updateChanges(state, seqNum, changes) {
-  const newState = {
-    ...state,
-    // make a note of the most recent sequence number. This is used for a point of reference for polling for new changes
-    lastSequenceNum: seqNum,
-    isLoaded: true
-  };
-
-  // mark any additional changes that come after first page load as "new" so we can add a nice highlight effect
-  // when the new row is rendered
-  const firstBatch = newState.changes.length === 0;
-  newState.changes.forEach((change) => {
-    change.isNew = false;
-  });
-
-  const newChanges = changes.map((change) => {
-    const seq = Helpers.getSeqNum(change.seq);
-    return {
-      id: change.id,
-      seq: seq,
-      deleted: _.has(change, 'deleted') ? change.deleted : false,
-      changes: change.changes,
-      doc: change.doc, // only populated with ?include_docs=true
-      isNew: !firstBatch
-    };
-  });
-
-  // add the new changes to the start of the list
-  newState.changes = newChanges.concat(newState.changes);
-  updateFilteredChanges(newState);
-  return newState;
-}
-
-function addFilter(state, filter) {
-  const newFilters = state.filters.slice();
-  newFilters.push(filter);
-
-  const newState = {
-    ...state,
-    filters: newFilters
-  };
-  updateFilteredChanges(newState);
-  return newState;
-}
-
-function removeFilter(state, filter) {
-  const newFilters = state.filters.slice();
-  const idx = newFilters.indexOf(filter);
-  if (idx >= 0) {
-    newFilters.splice(idx, 1);
-  }
-
-  const newState = {
-    ...state,
-    filters: newFilters
-  };
-  updateFilteredChanges(newState);
-  return newState;
-}
-
-function updateFilteredChanges(state) {
-  state.showingSubset = false;
-  let numMatches = 0;
-  state.filteredChanges = state.changes.filter((change) => {
-    if (numMatches >= state.maxChangesListed) {
-      state.showingSubset = true;
-      return false;
-    }
-    let changeStr = JSON.stringify(change);
-    let match = state.filters.every((filter) => {
-      return new RegExp(filter, 'i').test(changeStr);
-    });
-
-    if (match) {
-      numMatches++;
-    }
-    return match;
-  });
-}
-
-export default function changes (state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.UPDATE_CHANGES:
-      // only bother updating the list of changes if the seq num has changed
-      if (state.lastSequenceNum !== action.seqNum) {
-        return updateChanges(state, action.seqNum, action.changes);
-      }
-      return state;
-
-    case ActionTypes.ADD_CHANGES_FILTER_ITEM:
-      return addFilter(state, action.filter);
-
-    case ActionTypes.REMOVE_CHANGES_FILTER_ITEM:
-      return removeFilter(state, action.filter);
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/components/actions.js b/app/addons/documents/components/actions.js
deleted file mode 100644
index d9b266f..0000000
--- a/app/addons/documents/components/actions.js
+++ /dev/null
@@ -1,40 +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.
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-import { get } from "../../../core/ajax";
-
-export default {
-  fetchAllDocsWithKey: (database, partitionKey) => {
-    return (id, callback) => {
-      const query = '?' + app.utils.queryParams({
-        startkey: JSON.stringify(id),
-        endkey: JSON.stringify(id + "\u9999"),
-        limit: 30
-      });
-
-      const url = partitionKey ?
-        FauxtonAPI.urls('partitioned_allDocs', 'server', database.safeID(), encodeURIComponent(partitionKey), query) :
-        FauxtonAPI.urls('allDocs', 'server', database.safeID(), query);
-      get(url).then(res => {
-        let options = [];
-        if (!res.error) {
-          const {rows} = res;
-          options = rows.map(row => {
-            return { value: row.id, label: row.id};
-          });
-        }
-        callback(null, { options: options });
-      });
-    };
-  }
-};
diff --git a/app/addons/documents/components/header-docs-left.js b/app/addons/documents/components/header-docs-left.js
deleted file mode 100644
index cca5693..0000000
--- a/app/addons/documents/components/header-docs-left.js
+++ /dev/null
@@ -1,89 +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.
-
-import PropTypes from 'prop-types';
-import React from "react";
-import Helpers from "../helpers";
-import FauxtonAPI from '../../../core/api';
-import { Dropdown } from "react-bootstrap";
-
-function getModififyDbLinks (dbName) {
-  return Helpers.getModifyDatabaseLinks(dbName);
-}
-
-function getAllDatabaseModalLinks (dbName, partitionKey) {
-  const dropdownMenuLinks = Helpers.getNewButtonLinks(dbName, partitionKey);
-  return getModififyDbLinks(dbName).concat(dropdownMenuLinks);
-}
-
-
-function getDropdownItems (items) {
-  return items.map((el, i) => {
-
-    if (el.title && el.links) {
-      const items = el.links.map((subel) => {
-        return <Item key={subel.title} onClick={subel.onClick} icon={subel.icon} url={subel.url}>{subel.title}</Item>;
-      });
-
-      return ([
-        <li key={el.title} className="header-label">{el.title}</li>,
-        items
-      ]);
-    }
-
-    return (
-      <Item icon={el.icon} url={el.url} onClick={el.onClick} key={i}>{el.title}</Item>
-    );
-  });
-}
-
-
-const Item = ({url, icon, onClick, children}) => {
-  return (
-    <li role="presentation">
-      <a className="faux-header__doc-header-dropdown-item" onClick={onClick} href={url}>
-        <i className={icon}></i> {children}
-      </a>
-    </li>
-  );
-};
-
-const HeaderDocsLeft = ({dbName, partitionKey}) => {
-  const items = getAllDatabaseModalLinks(dbName, partitionKey);
-  const dropdownItems = getDropdownItems(items);
-
-  return (
-    <div className="faux-header__doc-header-left">
-      <button type="button" className="faux-header__doc-header-backlink" onClick={() => { FauxtonAPI.navigate('#/_all_dbs'); }}>
-        <i className="faux-header__doc-header-backlink__icon fonticon fonticon-left-open" />
-      </button>
-      <div className="faux-header__doc-header-title flex-fill" title={dbName}>
-        {dbName}
-      </div>
-      <Dropdown id="faux-header__doc-header-left-1">
-        <Dropdown.Toggle noCaret className="faux-header__doc-header-dropdown-toggle">
-          <i className="faux-header__doc-header-dropdown-toggle-icon fonticon-vertical-ellipsis"></i>
-        </Dropdown.Toggle>
-        <Dropdown.Menu className="faux-header__doc-header-dropdown-itemwrapper">
-          {dropdownItems}
-        </Dropdown.Menu>
-      </Dropdown>
-    </div>
-  );
-};
-
-HeaderDocsLeft.propTypes = {
-  dbName: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string
-};
-
-export default HeaderDocsLeft;
diff --git a/app/addons/documents/components/header-docs-right.js b/app/addons/documents/components/header-docs-right.js
deleted file mode 100644
index dfeaaa9..0000000
--- a/app/addons/documents/components/header-docs-right.js
+++ /dev/null
@@ -1,53 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import QueryOptionsContainer from '../index-results/containers/QueryOptionsContainer';
-import JumpToDoc from './jumptodoc';
-import Actions from './actions';
-
-const RightAllDocsHeader = ({database, hideQueryOptions, hideJumpToDoc, queryDocs, ddocsOnly, selectedNavItem, partitionKey}) =>
-  <div className="header-right right-db-header flex-layout flex-row">
-
-    <div className="faux-header__searchboxwrapper">
-      <div className="faux-header__searchboxcontainer">
-        {hideJumpToDoc ? null :
-          <JumpToDoc
-            // 'key' is set to force mounting a new component when the partition key changes
-            // otherwise the internal ReactSelect doesn't reload the options even though
-            // it loadOptions is assigned a new function
-            key={JSON.stringify(database + partitionKey)}
-            cache={false}
-            loadOptions={Actions.fetchAllDocsWithKey(database, partitionKey)}
-            database={database} /> }
-      </div>
-    </div>
-    {hideQueryOptions ? null :
-      <QueryOptionsContainer ddocsOnly={ddocsOnly} queryDocs={ queryDocs } selectedNavItem={selectedNavItem} /> }
-  </div>;
-
-RightAllDocsHeader.propTypes = {
-  database: PropTypes.object.isRequired,
-  hideQueryOptions: PropTypes.bool,
-  isRedux: PropTypes.bool,
-  queryDocs: PropTypes.func,
-  selectedNavItem: PropTypes.object,
-  partitionKey: PropTypes.string
-};
-
-RightAllDocsHeader.defaultProps = {
-  hideQueryOptions: false
-};
-
-export default RightAllDocsHeader;
diff --git a/app/addons/documents/components/jumptodoc.js b/app/addons/documents/components/jumptodoc.js
deleted file mode 100644
index 7edbc66..0000000
--- a/app/addons/documents/components/jumptodoc.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-
-// 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.
-
-import PropTypes from 'prop-types';
-import React from "react";
-import ReactDOM from "react-dom";
-import Components from "../../components/react-components";
-
-
-const JumpToDoc = ({database, loadOptions}) => {
-  return (
-    <div>
-      <Components.ThrottledReactSelectAsync
-        className="jump-to-doc"
-        name="jump-to-doc"
-        placeholder="Document ID"
-        loadOptions={loadOptions}
-        clearable={false}
-        ignoreCase={false}
-        ignoreAccents={false}
-        cache={false}
-        onChange={({value: docId}) => {
-          const url = FauxtonAPI.urls('document', 'app', app.utils.safeURLName(database.id), app.utils.safeURLName(docId));
-          // We navigating away from the page. So we need to take that navigation out of the loop otherwise
-          // it causes an issue where the react-select state is changed after its unmounted
-          setTimeout(() => FauxtonAPI.navigate(url, {trigger: true}));
-        }} />
-    </div>
-  );
-};
-
-JumpToDoc.propTypes = {
-  database: PropTypes.object.isRequired,
-  loadOptions: PropTypes.func.isRequired,
-};
-
-export default JumpToDoc;
diff --git a/app/addons/documents/components/results-options.js b/app/addons/documents/components/results-options.js
deleted file mode 100644
index c63f0ea..0000000
--- a/app/addons/documents/components/results-options.js
+++ /dev/null
@@ -1,99 +0,0 @@
-
-import React from 'react';
-import PropTypes from 'prop-types';
-import Components from '../../components/react-components';
-import Constants from '../constants';
-
-const { MenuDropDown } = Components;
-
-export default class ResultsOptions extends React.Component {
-  static defaultProps = {
-    showDensity: true,
-    showFontSize: true
-  };
-  static propTypes = {
-    resultsStyle: PropTypes.object.isRequired,
-    updateStyle: PropTypes.func.isRequired,
-    showDensity: PropTypes.bool,
-    showFontSize: PropTypes.bool
-  };
-
-  constructor(props) {
-    super(props);
-    this.toggleTextOverflow = this.toggleTextOverflow.bind(this);
-    this.setFontSize = this.setFontSize.bind(this);
-  }
-
-  toggleTextOverflow() {
-    if (this.props.resultsStyle.textOverflow === Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL) {
-      this.props.updateStyle({
-        textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED
-      });
-    } else {
-      this.props.updateStyle({
-        textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL
-      });
-    }
-  }
-
-  setFontSize(size) {
-    this.props.updateStyle({
-      fontSize: size
-    });
-  }
-
-  getDensitySection() {
-    let menuOptionTitle = 'Show full values';
-    if (this.props.resultsStyle.textOverflow === Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL) {
-      menuOptionTitle = 'Truncate values';
-    }
-
-    const densityItems = [{
-      title: menuOptionTitle,
-      onClick: this.toggleTextOverflow
-    }];
-
-    return {
-      title: 'Display density',
-      links: densityItems
-    };
-  }
-
-  getFontSizeSection() {
-    const fontSizeItems = [{
-      title: 'Small',
-      onClick: () => { this.setFontSize(Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL); },
-      icon: this.props.resultsStyle.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL ? 'fonticon-ok' : ''
-    },
-    {
-      title: 'Medium',
-      onClick: () => { this.setFontSize(Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM); },
-      icon: this.props.resultsStyle.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM ? 'fonticon-ok' : ''
-    },
-    {
-      title: 'Large',
-      onClick: () => { this.setFontSize(Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE); },
-      icon: this.props.resultsStyle.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE ? 'fonticon-ok' : ''
-    }];
-    return {
-      title: 'Font size',
-      links: fontSizeItems
-    };
-  }
-
-  render() {
-    const links = [];
-    if (this.props.showDensity) {
-      links.push(this.getDensitySection());
-    }
-    if (this.props.showFontSize) {
-      links.push(this.getFontSizeSection());
-    }
-
-    return (
-      <div className='toolbar-dropdown'>
-        <MenuDropDown id="result-style-menu" links={links} icon='fonticon-mixer' hideArrow={true} toggleType='button'/>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/components/results-toolbar.js b/app/addons/documents/components/results-toolbar.js
deleted file mode 100644
index a610d2f..0000000
--- a/app/addons/documents/components/results-toolbar.js
+++ /dev/null
@@ -1,101 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import BulkDocumentHeaderController from "../header/header";
-import ResultsOptions from './results-options';
-import Components from "../../components/react-components";
-import Constants from '../constants';
-import Helpers from '../helpers';
-
-const {BulkActionComponent} = Components;
-
-export class ResultsToolBar extends React.Component {
-
-  shouldComponentUpdate (nextProps) {
-    return nextProps.isListDeletable != undefined;
-  }
-
-  render () {
-    const {
-      hasResults,
-      isListDeletable,
-      removeItem,
-      allDocumentsSelected,
-      hasSelectedItem,
-      toggleSelectAll,
-      isLoading,
-      databaseName,
-      partitionKey
-    } = this.props;
-
-    // Determine if we need to display the bulk action selector
-    let bulkAction = null;
-    if ((isListDeletable && hasResults) || isLoading) {
-      bulkAction = <BulkActionComponent
-        removeItem={removeItem}
-        isChecked={allDocumentsSelected}
-        hasSelectedItem={hasSelectedItem}
-        toggleSelect={toggleSelectAll}
-        disabled={isLoading}
-        title="Select all docs that can be..." />;
-    }
-
-    // Determine if we need to display the bulk doc header and result options
-    let bulkHeader = null;
-    const showDensityOptions = this.props.selectedLayout !== Constants.LAYOUT_ORIENTATION.JSON;
-    let resultOptions = null;
-    if (hasResults || isLoading) {
-      bulkHeader = <BulkDocumentHeaderController {...this.props} />;
-      resultOptions = <ResultsOptions
-        updateStyle={this.props.updateResultsStyle}
-        resultsStyle={this.props.resultsStyle}
-        showDensity={showDensityOptions}
-      />;
-    }
-
-    let createDocumentLink = null;
-    if (databaseName) {
-      createDocumentLink = (
-        <div className="document-result-screen__toolbar-flex-container">
-          <a href={Helpers.getNewDocUrl(databaseName, partitionKey)} className="btn save document-result-screen__toolbar-create-btn btn-primary">
-            Create Document
-          </a>
-        </div>
-      );
-    }
-
-    return (
-      <div className="document-result-screen__toolbar">
-        {bulkAction}
-        {bulkHeader}
-        {resultOptions}
-        {createDocumentLink}
-      </div>
-    );
-  }
-}
-
-ResultsToolBar.propTypes = {
-  removeItem: PropTypes.func.isRequired,
-  allDocumentsSelected: PropTypes.bool.isRequired,
-  hasSelectedItem: PropTypes.bool.isRequired,
-  toggleSelectAll: PropTypes.func.isRequired,
-  isLoading: PropTypes.bool.isRequired,
-  hasResults: PropTypes.bool.isRequired,
-  isListDeletable: PropTypes.bool,
-  partitionKey: PropTypes.string,
-  docType: PropTypes.string,
-  resultsStyle: PropTypes.object.isRequired,
-  updateResultsStyle: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/constants.js b/app/addons/documents/constants.js
deleted file mode 100644
index 49a3f96..0000000
--- a/app/addons/documents/constants.js
+++ /dev/null
@@ -1,32 +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.
-
-export default {
-  LAYOUT_ORIENTATION: {
-    TABLE: 'LAYOUT_TABLE',
-    METADATA: 'LAYOUT_METADATA',
-    JSON: 'LAYOUT_JSON'
-  },
-  // Document types that can be displayed by Index Results components
-  INDEX_RESULTS_DOC_TYPE: {
-    MANGO_INDEX: 'MangoIndex',
-    MANGO_QUERY: 'MangoQueryResult',
-    VIEW: 'view'
-  },
-  INDEX_RESULTS_STYLE: {
-    TEXT_OVERFLOW_TRUNCATED: 'truncated',
-    TEXT_OVERFLOW_FULL: 'full',
-    FONT_SIZE_SMALL: 'small-font',
-    FONT_SIZE_LARGE: 'large-font',
-    FONT_SIZE_MEDIUM: 'medium-font'
-  }
-};
diff --git a/app/addons/documents/designdocinfo/actions.js b/app/addons/documents/designdocinfo/actions.js
deleted file mode 100644
index 3ec85e6..0000000
--- a/app/addons/documents/designdocinfo/actions.js
+++ /dev/null
@@ -1,70 +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.
-
-import FauxtonAPI from '../../../core/api';
-import ActionTypes from "./actiontypes";
-
-const fetchDesignDocInfo = ({designDocName, designDocInfo}) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_FETCHING
-  });
-
-  return designDocInfo.fetch().then(() => {
-    monitorDesignDoc({
-      designDocName,
-      designDocInfo
-    }, dispatch);
-  }).catch(() => {
-    dispatch({
-      type: ActionTypes.DESIGN_FETCHING_FAILED
-    });
-    FauxtonAPI.addNotification({
-      msg: 'Error loading design document metadata.',
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-let intervalId;
-const monitorDesignDoc = (options, dispatch) => {
-  const refreshDDoc = () => {
-    refresh(options.designDocInfo, dispatch);
-  };
-  stopRefresh();
-  intervalId = window.setInterval(refreshDDoc, 5000);
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_MONITOR,
-    options: options
-  });
-};
-
-const refresh = (designDocInfo, dispatch) => {
-  designDocInfo.fetch().then(() => {
-    dispatch({
-      type: ActionTypes.DESIGN_REFRESH,
-      designDocInfo
-    });
-  });
-};
-
-const stopRefresh = () => {
-  if (intervalId) {
-    window.clearInterval(intervalId);
-    intervalId = undefined;
-  }
-};
-
-export default {
-  fetchDesignDocInfo,
-  stopRefresh
-};
diff --git a/app/addons/documents/designdocinfo/actiontypes.js b/app/addons/documents/designdocinfo/actiontypes.js
deleted file mode 100644
index 4c5f49e..0000000
--- a/app/addons/documents/designdocinfo/actiontypes.js
+++ /dev/null
@@ -1,18 +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.
-
-export default {
-  DESIGN_DOC_MONITOR: 'DESIGN_DOC_MONITOR',
-  DESIGN_FETCHING: 'DESIGN_FETCHING',
-  DESIGN_FETCHING_FAILED: 'DESIGN_FETCHING_FAILED',
-  DESIGN_REFRESH: 'DESIGN_REFRESH'
-};
diff --git a/app/addons/documents/designdocinfo/components/DesignDocInfo.js b/app/addons/documents/designdocinfo/components/DesignDocInfo.js
deleted file mode 100644
index 10c72b9..0000000
--- a/app/addons/documents/designdocinfo/components/DesignDocInfo.js
+++ /dev/null
@@ -1,151 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import uuid from 'uuid';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-
-const LoadLines = ReactComponents.LoadLines;
-const Copy = ReactComponents.Copy;
-
-export default class DesignDocInfo extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.fetchDDocInfo();
-  }
-
-  componentDidUpdate(prevProps) {
-    if (this.props.designDocInfo !== prevProps.designDocInfo) {
-      this.fetchDDocInfo();
-    }
-  }
-
-  componentWillUnmount() {
-    this.props.stopRefresh();
-  }
-
-  fetchDDocInfo() {
-    this.props.fetchDesignDocInfo({
-      designDocName: this.props.designDocName,
-      designDocInfo: this.props.designDocInfo
-    });
-  }
-
-  showCopiedMessage = () => {
-    FauxtonAPI.addNotification({
-      type: 'success',
-      msg: 'The MD5 sha has been copied to your clipboard.',
-      clear: true
-    });
-  };
-
-  render() {
-    if (this.props.isLoading) {
-      return <LoadLines />;
-    }
-    if (this.props.showLoadError) {
-      return (
-        <div className="metadata-page">
-          <header>
-            <h2>_design/{this.props.designDocName} Metadata</h2>
-          </header>
-
-          <section className="container">
-            Error retrieving metadata. Try reloading the page.
-          </section>
-        </div>
-      );
-    }
-    const viewIndex = this.props.viewIndex;
-    const {sizes} = viewIndex;
-    const actualSize = (sizes.active) ? sizes.active.toLocaleString('en') : 0;
-    const dataSize = (sizes.external) ? sizes.external.toLocaleString('en') : 0;
-
-    return (
-      <div className="metadata-page">
-        <header>
-          <h2>_design/{this.props.designDocName} Metadata</h2>
-        </header>
-
-        <section className="container">
-          <h3>Index Information</h3>
-
-          <ul>
-            <li>
-              <span className="item-title">Language:</span>
-              <span className="capitalize">{viewIndex.language}</span>
-            </li>
-            <li>
-              <span className="item-title">Currently being updated?</span>
-              {viewIndex.updater_running ? 'Yes' : 'No'}
-            </li>
-            <li>
-              <span className="item-title">Currently running compaction?</span>
-              {viewIndex.compact_running ? 'Yes' : 'No'}
-            </li>
-            <li>
-              <span className="item-title">Waiting for a commit?</span>
-              {viewIndex.waiting_commit ? 'Yes' : 'No'}
-            </li>
-          </ul>
-
-          <ul>
-            <li>
-              <span className="item-title">Clients waiting for the index:</span>
-              {viewIndex.waiting_clients}
-            </li>
-            <li>
-              <span className="item-title">Update sequence on DB:</span>
-              {viewIndex.update_seq}
-            </li>
-            <li>
-              <span className="item-title">Processed purge sequence:</span>
-              {viewIndex.purge_seq}
-            </li>
-            <li>
-              <span className="item-title">Actual data size (bytes):</span>
-              {actualSize}
-            </li>
-            <li>
-              <span className="item-title">Data size on disk (bytes):</span>
-              {dataSize}
-            </li>
-          </ul>
-
-          <ul>
-            <li>
-              <span className="item-title">MD5 Signature:</span>
-              <Copy
-                uniqueKey={uuid.v4()}
-                text={viewIndex.signature}
-                onClipboardClick={this.showCopiedMessage} />
-            </li>
-          </ul>
-
-        </section>
-
-      </div>
-    );
-  }
-}
-
-DesignDocInfo.propTypes = {
-  isLoading: PropTypes.bool.isRequired,
-  showLoadError: PropTypes.bool.isRequired,
-  viewIndex: PropTypes.object,
-  designDocName: PropTypes.string.isRequired,
-  stopRefresh: PropTypes.func.isRequired,
-  fetchDesignDocInfo: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/designdocinfo/components/DesignDocInfoContainer.js b/app/addons/documents/designdocinfo/components/DesignDocInfoContainer.js
deleted file mode 100644
index 98feedb..0000000
--- a/app/addons/documents/designdocinfo/components/DesignDocInfoContainer.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import { connect } from 'react-redux';
-import DesignDocInfo from './DesignDocInfo';
-import Actions from '../actions';
-
-const mapStateToProps = ({ designDocInfo }, ownProps) => {
-  return {
-    isLoading: designDocInfo.isLoading,
-    showLoadError: designDocInfo.showLoadError,
-    viewIndex: designDocInfo.viewIndex,
-    designDocInfo: ownProps.designDocInfo,
-    designDocName: ownProps.designDocName
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    fetchDesignDocInfo: (options) => {
-      dispatch(Actions.fetchDesignDocInfo(options));
-    },
-
-    stopRefresh: () => {
-      Actions.stopRefresh();
-    }
-  };
-};
-
-const DesignDocInfoContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(DesignDocInfo);
-
-export default DesignDocInfoContainer;
diff --git a/app/addons/documents/designdocinfo/reducers.js b/app/addons/documents/designdocinfo/reducers.js
deleted file mode 100644
index 0b34356..0000000
--- a/app/addons/documents/designdocinfo/reducers.js
+++ /dev/null
@@ -1,57 +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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  isLoading: true,
-  showLoadError: false,
-  viewIndex: undefined
-};
-
-export default function designDocInfo (state = initialState, action) {
-  const { options } = action;
-
-  switch (action.type) {
-
-    case ActionTypes.DESIGN_FETCHING:
-      return {
-        ...state,
-        isLoading: true
-      };
-
-    case ActionTypes.DESIGN_FETCHING_FAILED:
-      return {
-        ...state,
-        isLoading: false,
-        showLoadError: true,
-      };
-
-    case ActionTypes.DESIGN_DOC_MONITOR:
-      return {
-        ...state,
-        isLoading: false,
-        showLoadError: false,
-        viewIndex: options.designDocInfo.get('view_index')
-      };
-
-    case ActionTypes.DESIGN_DOC_REFRESH:
-      return {
-        ...state,
-        showLoadError: false,
-        viewIndex: options.designDocInfo.get('view_index')
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.actions.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.actions.test.js
deleted file mode 100644
index 317b678..0000000
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.actions.test.js
+++ /dev/null
@@ -1,169 +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.
-
-import FauxtonAPI from "../../../../core/api";
-import Actions from "../actions";
-import Documents from "../../resources";
-import Databases from "../../../databases/base";
-import utils from "../../../../../test/mocha/testUtils";
-import sinon from "sinon";
-
-const { restore } = utils;
-
-describe('DocEditorActions', () => {
-  const database = new Databases.Model({ id: 'db1' });
-  const doc = new Documents.Doc({ _id: 'foo' }, { database: database });
-  let fakeXMLHttpRequest, fakeOpen;
-
-  beforeEach(() => {
-    fakeXMLHttpRequest = sinon.stub(global, 'XMLHttpRequest');
-    fakeOpen = sinon.stub();
-    fakeXMLHttpRequest.returns({
-      send: sinon.stub(),
-      setRequestHeader: sinon.stub(),
-      open: fakeOpen
-    });
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.addNotification);
-    restore(FauxtonAPI.navigate);
-    restore(FauxtonAPI.urls);
-    fakeXMLHttpRequest.restore();
-  });
-
-  it('uploadAttachment handles filenames with special chars', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    sinon.stub(FauxtonAPI, 'urls').callsFake((p1, p2, p3, p4, p5, p6) => {
-      return [p1, p2, p3, p4, p5, p6].join('/');
-    });
-    const params = {
-      rev: 'rev-num',
-      doc: doc,
-      files: [
-        {
-          name: 'file-#?&-123.txt',
-          length: 100
-        }
-      ]
-    };
-    const mockDispatch = () => {};
-
-    Actions.uploadAttachment(params)(mockDispatch);
-    sinon.assert.calledWithExactly(
-      fakeOpen,
-      'PUT',
-      'document/attachment/db1/foo/' + encodeURIComponent(params.files[0].name) + '/?rev=rev-num'
-    );
-  });
-
-  it('uploadAttachment shows error reason, if available', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    sinon.stub(FauxtonAPI, 'urls').callsFake((p1, p2, p3, p4, p5, p6) => {
-      return [p1, p2, p3, p4, p5, p6].join('/');
-    });
-    const params = {
-      rev: 'rev-num',
-      doc: doc,
-      files: [
-        {
-          name: 'a_file.txt',
-          length: 100
-        }
-      ]
-    };
-    const mockDispatch = sinon.stub();
-
-    const fakeRequest = {
-      send: sinon.stub(),
-      setRequestHeader: sinon.stub(),
-      open: sinon.stub()
-    };
-    fakeXMLHttpRequest.returns(fakeRequest);
-
-    // Call uploadAttachment to attach the event handlers to fakeRequest
-    Actions.uploadAttachment(params)(mockDispatch);
-    expect(fakeRequest.onload).toBeDefined();
-    const mockError = {
-      error: 'bad_request',
-      reason: 'Invalid filename'
-    };
-    // Simulate an error response
-    fakeRequest.responseText = JSON.stringify(mockError);
-    fakeRequest.status = 400;
-    mockDispatch.resetHistory();
-    // Call the onload event
-    fakeRequest.onload();
-    // Verify it includes the error details
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        options: { error: `Error uploading file. Reason: ${mockError.reason}` },
-        type: 'FILE_UPLOAD_ERROR'
-      }
-    );
-
-    // Make sure it calls doesn't crash if response is not JSON
-    // Simulate an error response
-    fakeRequest.responseText = 'Forbidden';
-    fakeRequest.status = 403;
-    mockDispatch.resetHistory();
-    // Call the onload event
-    fakeRequest.onload();
-    // Verify it displays the error message, without any details
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        options: { error: `Error uploading file. ` },
-        type: 'FILE_UPLOAD_ERROR'
-      }
-    );
-  });
-
-  it('sets and resets the isSaving state', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    sinon.stub(FauxtonAPI, 'navigate');
-    sinon.stub(FauxtonAPI, 'urls').callsFake((p1, p2, p3, p4, p5, p6) => {
-      return [p1, p2, p3, p4, p5, p6].join('/');
-    });
-    const mockDispatch = sinon.stub();
-    const mockRes = {
-      then: cb => {
-        cb();
-        return {
-          fail: () => {},
-        };
-      }
-    };
-    const mockDoc = {
-      database: {
-        id: 'mock_db'
-      },
-      save: sinon.stub().returns(mockRes),
-      prettyJSON: sinon.stub(),
-    };
-    Actions.saveDoc(mockDoc, true, () => {}, '')(mockDispatch);
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        type: 'SAVING_DOCUMENT'
-      }
-    );
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        type: 'SAVING_DOCUMENT_COMPLETED'
-      }
-    );
-  });
-
-});
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
deleted file mode 100644
index 5602ebb..0000000
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
+++ /dev/null
@@ -1,372 +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.
-
-import FauxtonAPI from '../../../../core/api';
-import Helpers from '../../../../helpers';
-import React from 'react';
-import sinon from 'sinon';
-import Documents from '../../resources';
-import AttachmentsPanelButton from '../components/AttachmentsPanelButton';
-import CloneDocModal from '../components/CloneDocModal';
-import DocEditorScreen from '../components/DocEditorScreen';
-import DocEditorContainer from '../components/DocEditorContainer';
-import Databases from '../../../databases/base';
-import databasesReducer from '../../../databases/reducers';
-import { mount } from 'enzyme';
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import actiontypes from '../actiontypes';
-import docEditorReducer from '../reducers';
-
-import '../../base';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-const docJSON = {
-  _id: '_design/test-doc',
-  views: {
-    'test-view': {
-      map: '() => {};'
-    }
-  }
-};
-
-const docWithAttachmentsJSON = {
-  _id: '_design/test#doc',
-  _rev: '12345',
-  blah: {
-    whatever: {
-      something: 1
-    }
-  },
-  _attachments: {
-    "one%2F.png": {
-      "content-type": "images/png",
-      "length": 100
-    },
-    "one.zip": {
-      "content-type": "application/zip",
-      "length": 111100
-    }
-  }
-};
-
-const database = new Databases.Model({ id: 'a/special?db' });
-const defaultProps = {
-  isLoading: true,
-  isNewDoc: true,
-  isDbPartitioned: false,
-  database: database,
-  doc: new Documents.NewDoc(null, { database: database }),
-  conflictCount: 0,
-  saveDoc: () => {},
-
-  isCloneDocModalVisible: false,
-  showCloneDocModal: () => {},
-  hideCloneDocModal: () => {},
-  cloneDoc: () => {},
-
-  isDeleteDocModalVisible: false,
-  showDeleteDocModal: () => {},
-  hideDeleteDocModal: () => {},
-  deleteDoc: () => {},
-
-  isUploadModalVisible: false,
-  uploadInProgress: false,
-  uploadPercentage: 0,
-  uploadErrorMessage: '',
-  numFilesUploaded: 0,
-  showUploadModal: () => {},
-  hideUploadModal: () => {},
-  cancelUpload: () => {},
-  resetUploadModal: () => {},
-  uploadAttachment: () => {}
-};
-
-describe('DocEditorScreen', () => {
-
-  it('loading indicator appears on load', () => {
-    const el = mount(<DocEditorScreen {...defaultProps} />);
-    expect(el.find('.loading-lines').length).toBe(1);
-  });
-
-  it('new docs do not show the button row', () => {
-    const doc = new Documents.Doc(docJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.loading-lines').length).toBe(0);
-    expect(el.find('.icon-circle-arrow-up').length).toBe(0);
-    expect(el.find('.icon-repeat').length).toBe(0);
-    expect(el.find('.icon-trash').length).toBe(0);
-  });
-
-  it('view attachments button does not appear with no attachments', () => {
-    const doc = new Documents.Doc(docJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.view-attachments-section').length).toBe(0);
-  });
-
-  it('view attachments button shows up when the doc has attachments', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.view-attachments-section').length).toBe(1);
-  });
-
-  it('view attachments dropdown contains right number of docs', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.view-attachments-section .dropdown-menu li').length).toBe(2);
-  });
-
-  it('view attachments dropdown contains correct urls', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    const $attachmentNode = el.find('.view-attachments-section .dropdown-menu li');
-    const attachmentURLactual = $attachmentNode.find('a').first().prop('href');
-
-    expect(attachmentURLactual).toBe('./a%2Fspecial%3Fdb/_design%2Ftest%23doc/one%252F.png');
-  });
-
-  it('auto-generated ID for new docs starts with colon for partitioned databases', () => {
-    const doc = { database: database, attributes: { _id: 'new_doc_id'} };
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      isDbPartitioned={true}
-      database={database}
-      doc={doc} />);
-
-    const editor = el.find('CodeEditor');
-    expect(editor.prop('defaultCode')).toMatch(/":new_doc_id"/);
-  });
-
-  it('cancel button navigates to all docs by default', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      isDbPartitioned={true}
-      database={database}
-      doc={doc} />);
-
-    const linkUrl = el.find('a.cancel-button').prop('href');
-    expect(linkUrl).toBe('#/database/' + encodeURIComponent(database.id) + '/_all_docs');
-  });
-
-  it('cancel button navigates to previousUrl', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      isDbPartitioned={true}
-      database={database}
-      previousUrl='something/else'
-      doc={doc} />);
-
-    const linkUrl = el.find('a.cancel-button').prop('href');
-    expect(linkUrl).toBe('#/something/else');
-  });
-
-});
-
-describe('DocEditorContainer', () => {
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({ docEditor: docEditorReducer, databases: databasesReducer }),
-    applyMiddleware(...middlewares)
-  );
-  const loadDummyDocAction = {
-    type: actiontypes.DOC_LOADED,
-    options: {
-      doc: {
-        get: () => {},
-        unset: () => {},
-        hasChanged: () => false,
-      }
-    }
-  };
-
-  afterEach(() => {
-    store.dispatch({
-      type: actiontypes.RESET_DOC
-    });
-  });
-
-  it('clicking Delete button shows the confirmation modal', () => {
-    store.dispatch(loadDummyDocAction);
-    const wrapper = mount(
-      <Provider store={store}>
-        <DocEditorContainer
-          isNewDoc={false}
-          database={database} />
-      </Provider>
-    );
-    expect(wrapper.find(DocEditorScreen).prop('isDeleteDocModalVisible')).toBe(false);
-    wrapper.find('button[title="Delete"]').simulate('click');
-    expect(wrapper.find(DocEditorScreen).prop('isDeleteDocModalVisible')).toBe(true);
-  });
-
-  it('clicking Upload button shows the upload dialog', () => {
-    store.dispatch(loadDummyDocAction);
-    const wrapper = mount(
-      <Provider store={store}>
-        <DocEditorContainer
-          isNewDoc={false}
-          database={database} />
-      </Provider>
-    );
-    expect(wrapper.find(DocEditorScreen).prop('isUploadModalVisible')).toBe(false);
-    wrapper.find('button[title="Upload Attachment"]').simulate('click');
-    expect(wrapper.find(DocEditorScreen).prop('isUploadModalVisible')).toBe(true);
-  });
-
-  it('clicking Clone button shows the clone doc dialog', () => {
-    store.dispatch(loadDummyDocAction);
-    const wrapper = mount(
-      <Provider store={store}>
-        <DocEditorContainer
-          isNewDoc={false}
-          database={database} />
-      </Provider>
-    );
-    expect(wrapper.find(DocEditorScreen).prop('isCloneDocModalVisible')).toBe(false);
-    wrapper.find('button[title="Clone Document"]').simulate('click');
-    expect(wrapper.find(DocEditorScreen).prop('isCloneDocModalVisible')).toBe(true);
-  });
-
-});
-
-
-describe("AttachmentsPanelButton", () => {
-  let doc;
-
-  beforeEach(() => {
-    doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-  });
-
-  it('does not show up when loading', () => {
-    const el = mount(<AttachmentsPanelButton isLoading={true} doc={doc} />);
-    expect(el.find('.panel-button').length).toBe(0);
-  });
-
-  it('shows up after loading', () => {
-    const el = mount(<AttachmentsPanelButton isLoading={false} doc={doc} />);
-    expect(el.find('button.panel-button').length).toBe(1);
-  });
-});
-
-
-describe("Custom Extension Buttons", () => {
-  it('supports buttons', () => {
-    class CustomButton extends React.Component {
-      render() {
-        return (
-          <div>
-            <button>Oh no she di&apos;n&apos;t!</button>
-            <span id="testDatabaseName">{this.props.database.id}</span>
-          </div>
-        );
-      }
-    }
-
-    FauxtonAPI.registerExtension('DocEditor:icons', CustomButton);
-
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database} />);
-    expect(/Oh\sno\sshe\sdi'n't!/.test(el.html())).toBe(true);
-    // confirm the database name was also included
-    expect(el.find("#testDatabaseName").text()).toBe(database.id);
-  });
-});
-
-describe("CloneDocModal", () => {
-  const defaultProps = {
-    visible: false,
-    doc: { attributes: {_id: 'my_doc_id', hey: 'there'} },
-    database: {},
-    onSubmit: () => {},
-    hideCloneDocModal: () => {},
-    cloneDoc: () => {}
-  };
-
-  let getUUID;
-
-  afterEach(() => {
-    if (getUUID) {
-      getUUID.restore();
-    }
-  });
-
-  it('sets random UUID by default', () => {
-    const promise = FauxtonAPI.Promise.resolve({ uuids: ['abc9876'] });
-    getUUID = sinon.stub(Helpers, 'getUUID').returns(promise);
-    const el = mount(
-      <CloneDocModal {...defaultProps} />
-    );
-    el.setProps({visible: true});
-    return promise.then(() => {
-      expect(el.state().uuid).toBe('abc9876');
-    });
-  });
-
-  it('adds partition key from original doc to the auto-generated ID when it exists', () => {
-    const promise = FauxtonAPI.Promise.resolve({ uuids: ['abc9876'] });
-    getUUID = sinon.stub(Helpers, 'getUUID').returns(promise);
-    const el = mount(
-      <CloneDocModal
-        {...defaultProps}
-        doc={{ attributes: {_id: 'part1:my_doc_id', hey: 'there'} }}/>
-    );
-    el.setProps({visible: true});
-    return promise.then(() => {
-      expect(el.state().uuid).toBe('part1:abc9876');
-    });
-  });
-
-
-});
-
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.reducers.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.reducers.test.js
deleted file mode 100644
index a775fa2..0000000
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.reducers.test.js
+++ /dev/null
@@ -1,77 +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.
-
-import FauxtonAPI from "../../../../core/api";
-import Documents from "../../resources";
-import ActionTypes from "../actiontypes";
-import reducer from "../reducers";
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-const doc = new Documents.Doc({id: 'foo'}, {database: 'bar'});
-
-describe('DocEditor Reducer', function () {
-
-  it('defines sensible defaults', function () {
-    const newState = reducer(undefined, { type: 'do_nothing'});
-
-    expect(newState.isLoading).toBe(true);
-    expect(newState.isSaving).toBe(false);
-    expect(newState.cloneDocModalVisible).toBe(false);
-    expect(newState.deleteDocModalVisible).toBe(false);
-    expect(newState.uploadModalVisible).toBe(false);
-    expect(newState.numFilesUploaded).toBe(0);
-    expect(newState.uploadInProgress).toBe(false);
-    expect(newState.uploadPercentage).toBe(0);
-  });
-
-  it('marks loading as complete after doc is loaded', function () {
-    const newState = reducer(undefined, {
-      type: ActionTypes.DOC_LOADED,
-      options: { doc: doc }
-    });
-    expect(newState.isLoading).toBe(false);
-  });
-
-  it('showCloneDocModal / hideCloneDocModal', function () {
-    const newStateShow = reducer(undefined, { type: ActionTypes.SHOW_CLONE_DOC_MODAL });
-    expect(newStateShow.cloneDocModalVisible).toBe(true);
-
-    const newStateHide = reducer(undefined, { type: ActionTypes.HIDE_CLONE_DOC_MODAL });
-    expect(newStateHide.cloneDocModalVisible).toBe(false);
-  });
-
-  it('showDeleteDocModal / hideDeleteDocModal', function () {
-    const newStateShow = reducer(undefined, { type: ActionTypes.SHOW_DELETE_DOC_CONFIRMATION_MODAL });
-    expect(newStateShow.deleteDocModalVisible).toBe(true);
-
-    const newStateHide = reducer(undefined, { type: ActionTypes.HIDE_DELETE_DOC_CONFIRMATION_MODAL });
-    expect(newStateHide.deleteDocModalVisible).toBe(false);
-  });
-
-  it('showUploadModal / hideUploadModal', function () {
-    const newStateShow = reducer(undefined, { type: ActionTypes.SHOW_UPLOAD_MODAL });
-    expect(newStateShow.uploadModalVisible).toBe(true);
-
-    const newStateHide = reducer(undefined, { type: ActionTypes.HIDE_UPLOAD_MODAL });
-    expect(newStateHide.uploadModalVisible).toBe(false);
-  });
-
-  it('saving document in-progress / completed', function () {
-    const newStateSaving = reducer(undefined, { type: ActionTypes.SAVING_DOCUMENT });
-    expect(newStateSaving.isSaving).toBe(true);
-
-    const newStateSavingDone = reducer(undefined, { type: ActionTypes.SAVING_DOCUMENT_COMPLETED });
-    expect(newStateSavingDone.isSaving).toBe(false);
-  });
-
-});
diff --git a/app/addons/documents/doc-editor/actions.js b/app/addons/documents/doc-editor/actions.js
deleted file mode 100644
index 2132506..0000000
--- a/app/addons/documents/doc-editor/actions.js
+++ /dev/null
@@ -1,281 +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.
-
-import FauxtonAPI from '../../../core/api';
-import { deleteRequest } from '../../../core/ajax';
-import ActionTypes from './actiontypes';
-
-var currentUploadHttpRequest;
-
-const dispatchInitDocEditor = (params) => {
-  FauxtonAPI.reduxDispatch(initDocEditor(params));
-};
-
-const initDocEditor = (params) => (dispatch) => {
-  const doc = params.doc;
-
-  // ensure a clean slate
-  dispatch({ type: ActionTypes.RESET_DOC });
-
-  doc.fetch().then(function () {
-    dispatch({
-      type: ActionTypes.DOC_LOADED,
-      options: {
-        doc: doc
-      }
-    });
-
-    if (params.onLoaded) {
-      params.onLoaded();
-    }
-  }, function (xhr) {
-    if (xhr.status === 404) {
-      errorNotification(`The ${doc.id} document does not exist.`);
-    }
-
-    FauxtonAPI.navigate(FauxtonAPI.urls('allDocs', 'app', params.database.id, ''));
-  });
-};
-
-const saveDoc = (doc, isValidDoc, onSave, navigateToUrl) => dispatch => {
-  if (isValidDoc) {
-    dispatch({ type: ActionTypes.SAVING_DOCUMENT });
-
-    doc.save().then(function () {
-      onSave(doc.prettyJSON());
-      dispatch({ type: ActionTypes.SAVING_DOCUMENT_COMPLETED });
-      FauxtonAPI.addNotification({
-        msg: 'Document saved successfully.',
-        type: 'success',
-        clear: true
-      });
-      if (navigateToUrl) {
-        FauxtonAPI.navigate(navigateToUrl, {trigger: true});
-      } else {
-        FauxtonAPI.navigate('#/' + FauxtonAPI.urls('allDocs', 'app',  FauxtonAPI.url.encode(doc.database.id)), {trigger: true});
-      }
-    }).fail(function (xhr) {
-      dispatch({ type: ActionTypes.SAVING_DOCUMENT_COMPLETED });
-      FauxtonAPI.addNotification({
-        msg: 'Save failed: ' + JSON.parse(xhr.responseText).reason,
-        type: 'error',
-        fade: false,
-        clear: true
-      });
-    });
-
-  } else if (doc.validationError && doc.validationError === 'Cannot change a documents id.') {
-    errorNotification('You cannot edit the _id of an existing document. Try this: Click \'Clone Document\', then change the _id on the clone before saving.');
-    delete doc.validationError;
-  } else {
-    errorNotification('Please fix the JSON errors and try saving again.');
-  }
-};
-
-const showDeleteDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_DELETE_DOC_CONFIRMATION_MODAL });
-};
-
-const hideDeleteDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_DELETE_DOC_CONFIRMATION_MODAL });
-};
-
-const deleteDoc = (doc) => {
-  const databaseName = doc.database.safeID();
-  const query = '?rev=' + doc.get('_rev');
-  const url = FauxtonAPI.urls('document', 'server', databaseName, doc.safeID(), query);
-  deleteRequest(url).then(res => {
-    if (res.error) {
-      throw new Error(res.reason || res.error);
-    }
-    FauxtonAPI.addNotification({
-      msg: 'Your document has been successfully deleted.',
-      type: 'success',
-      clear: true
-    });
-    FauxtonAPI.navigate(FauxtonAPI.urls('allDocs', 'app', databaseName, ''));
-  }).catch(err => {
-    FauxtonAPI.addNotification({
-      msg: 'Failed to delete your document. Reason: ' + err.message,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const showCloneDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_CLONE_DOC_MODAL });
-};
-
-const hideCloneDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_CLONE_DOC_MODAL });
-};
-
-const cloneDoc = (database, doc, newId) => {
-  hideCloneDocModal();
-
-  doc.copy(newId).then(() => {
-    const url = FauxtonAPI.urls('document', 'app', database.safeID(), encodeURIComponent(newId));
-    FauxtonAPI.navigate(url, { trigger: true });
-
-    FauxtonAPI.addNotification({
-      msg: 'Document has been duplicated.'
-    });
-
-  }, (error) => {
-    const errorMsg = `Could not duplicate document, reason: ${error.responseText}.`;
-    FauxtonAPI.addNotification({
-      msg: errorMsg,
-      type: 'error'
-    });
-  });
-};
-
-const showUploadModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_UPLOAD_MODAL });
-};
-
-const hideUploadModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_UPLOAD_MODAL });
-};
-
-const uploadAttachment = (params) => (dispatch) => {
-  if (params.files.length === 0) {
-    dispatch({
-      type: ActionTypes.FILE_UPLOAD_ERROR,
-      options: {
-        error: 'Please select a file to be uploaded.'
-      }
-    });
-    return;
-  }
-  dispatch({ type: ActionTypes.START_FILE_UPLOAD });
-
-  const query = '?rev=' + params.rev;
-  const db = params.doc.getDatabase().safeID();
-  const docId = params.doc.safeID();
-  const file = params.files[0];
-  const url = FauxtonAPI.urls('document', 'attachment', db, docId, encodeURIComponent(file.name), query);
-
-  const onProgress = (evt) => {
-    if (evt.lengthComputable) {
-      const percentComplete = evt.loaded / evt.total * 100;
-      dispatch({
-        type: ActionTypes.SET_FILE_UPLOAD_PERCENTAGE,
-        options: {
-          percent: percentComplete
-        }
-      });
-    }
-  };
-  const onSuccess = (doc) => {
-    // re-initialize the document editor. Only announce it's been updated when
-    dispatch(initDocEditor({
-      doc: doc,
-      onLoaded: () => {
-        dispatch({ type: ActionTypes.FILE_UPLOAD_SUCCESS });
-        FauxtonAPI.addNotification({
-          msg: 'Document saved successfully.',
-          type: 'success',
-          clear: true
-        });
-      }
-    }));
-  };
-  const onError = (msg) => {
-    dispatch({
-      type: ActionTypes.FILE_UPLOAD_ERROR,
-      options: {
-        error: msg
-      }
-    });
-  };
-  const httpRequest = new XMLHttpRequest();
-  currentUploadHttpRequest = httpRequest;
-  httpRequest.withCredentials = true;
-  if (httpRequest.upload) {
-    httpRequest.upload.onprogress = onProgress;
-  }
-  httpRequest.onloadend = () => {
-    currentUploadHttpRequest = undefined;
-  };
-  httpRequest.onerror = () => {
-    onError('Error uploading file');
-  };
-  httpRequest.onload = () => {
-    if (httpRequest.status >= 200 && httpRequest.status < 300) {
-      onSuccess(params.doc);
-    } else {
-      let errorMsg = 'Error uploading file. ';
-      try {
-        if (httpRequest.responseText) {
-          const json = JSON.parse(httpRequest.responseText);
-          if (json.error) {
-            errorMsg += 'Reason: ' + (json.reason || json.error);
-          }
-        }
-      } catch (err) {
-        //ignore parsing error
-      }
-      onError(errorMsg);
-    }
-  };
-  httpRequest.open('PUT', url);
-  httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
-  httpRequest.setRequestHeader('Content-Type', file.type || `application/octet-stream`);
-  httpRequest.setRequestHeader('Accept', 'application/json');
-  httpRequest.send(file);
-};
-
-const cancelUpload = () => {
-  if (currentUploadHttpRequest) {
-    currentUploadHttpRequest.abort();
-  }
-};
-
-const resetUploadModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.RESET_UPLOAD_MODAL });
-};
-
-
-// helpers
-
-function errorNotification (msg) {
-  FauxtonAPI.addNotification({
-    msg: msg,
-    type: 'error',
-    clear: true
-  });
-}
-
-export default {
-  dispatchInitDocEditor,
-  initDocEditor,
-  saveDoc,
-
-  // clone doc
-  showCloneDocModal,
-  hideCloneDocModal,
-  cloneDoc,
-
-  // delete doc
-  showDeleteDocModal,
-  hideDeleteDocModal,
-  deleteDoc,
-
-  // upload modal
-  showUploadModal,
-  hideUploadModal,
-  uploadAttachment,
-  cancelUpload,
-  resetUploadModal
-};
diff --git a/app/addons/documents/doc-editor/actiontypes.js b/app/addons/documents/doc-editor/actiontypes.js
deleted file mode 100644
index c9191ba..0000000
--- a/app/addons/documents/doc-editor/actiontypes.js
+++ /dev/null
@@ -1,31 +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.
-
-export default {
-  RESET_DOC: 'RESET_DOC',
-  DOC_LOADED: 'DOC_LOADED',
-  SHOW_CLONE_DOC_MODAL: 'SHOW_CLONE_DOC_MODAL',
-  HIDE_CLONE_DOC_MODAL: 'HIDE_CLONE_DOC_MODAL',
-  SHOW_DELETE_DOC_CONFIRMATION_MODAL: 'SHOW_DELETE_DOC_CONFIRMATION_MODAL',
-  HIDE_DELETE_DOC_CONFIRMATION_MODAL: 'HIDE_DELETE_DOC_CONFIRMATION_MODAL',
-  SHOW_UPLOAD_MODAL: 'SHOW_UPLOAD_MODAL',
-  HIDE_UPLOAD_MODAL: 'HIDE_UPLOAD_MODAL',
-  RESET_UPLOAD_MODAL: 'RESET_UPLOAD_MODAL',
-  SHOW_STRING_EDIT_MODAL: 'SHOW_STRING_EDIT_MODAL',
-  HIDE_STRING_EDIT_MODAL: 'HIDE_STRING_EDIT_MODAL',
-  FILE_UPLOAD_SUCCESS: 'FILE_UPLOAD_SUCCESS',
-  FILE_UPLOAD_ERROR: 'FILE_UPLOAD_ERROR',
-  START_FILE_UPLOAD: 'START_FILE_UPLOAD',
-  SET_FILE_UPLOAD_PERCENTAGE: 'SET_FILE_UPLOAD_PERCENTAGE',
-  SAVING_DOCUMENT: 'SAVING_DOCUMENT',
-  SAVING_DOCUMENT_COMPLETED: 'SAVING_DOCUMENT_COMPLETED',
-};
diff --git a/app/addons/documents/doc-editor/components/AttachmentsPanelButton.js b/app/addons/documents/doc-editor/components/AttachmentsPanelButton.js
deleted file mode 100644
index 36b683e..0000000
--- a/app/addons/documents/doc-editor/components/AttachmentsPanelButton.js
+++ /dev/null
@@ -1,70 +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.
-
-import FauxtonAPI from '../../../../core/api';
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { Dropdown, MenuItem } from 'react-bootstrap';
-import Helpers from '../../../../helpers';
-
-
-export default class AttachmentsPanelButton extends React.Component {
-  static propTypes = {
-    isLoading: PropTypes.bool.isRequired,
-    disabled: PropTypes.bool,
-    doc: PropTypes.object
-  };
-
-  static defaultProps = {
-    isLoading: true,
-    disabled: false,
-    doc: {}
-  };
-
-  getAttachmentList = () => {
-    const db = encodeURIComponent(this.props.doc.database.get('id'));
-    const doc = encodeURIComponent(this.props.doc.get('_id'));
-
-    return _.map(this.props.doc.get('_attachments'), (item, filename) => {
-      const url = FauxtonAPI.urls('document', 'attachment', db, doc, encodeURIComponent(filename));
-      return (
-        <MenuItem key={filename} href={url} target="_blank" data-bypass="true">
-          <strong>{filename}</strong>
-          <span className="attachment-delimiter">-</span>
-          <span>{item.content_type}{item.content_type ? ', ' : ''}{Helpers.formatSize(item.length)}</span>
-        </MenuItem>
-      );
-    });
-  };
-
-  render() {
-    if (this.props.isLoading || !this.props.doc.get('_attachments')) {
-      return false;
-    }
-
-    return (
-      <div className="panel-section view-attachments-section btn-group">
-        <Dropdown id="view-attachments-menu" disabled={this.props.disabled} >
-          <Dropdown.Toggle noCaret className="panel-button dropdown-toggle btn" data-bypass="true">
-            <i className="icon icon-paper-clip"></i>
-            <span className="button-text">View Attachments</span>
-            <span className="caret"></span>
-          </Dropdown.Toggle>
-          <Dropdown.Menu>
-            {this.getAttachmentList()}
-          </Dropdown.Menu>
-        </Dropdown>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/CloneDocModal.js b/app/addons/documents/doc-editor/components/CloneDocModal.js
deleted file mode 100644
index 7ae7968..0000000
--- a/app/addons/documents/doc-editor/components/CloneDocModal.js
+++ /dev/null
@@ -1,100 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { Modal } from 'react-bootstrap';
-import Helpers from '../../../../helpers';
-
-
-export default class CloneDocModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    doc: PropTypes.object,
-    database: PropTypes.object.isRequired,
-    onSubmit: PropTypes.func.isRequired,
-    hideCloneDocModal: PropTypes.func.isRequired,
-    cloneDoc: PropTypes.func.isRequired
-  };
-
-  state = {
-    uuid: null
-  };
-
-  cloneDoc = () => {
-    if (this.props.onSubmit) {
-      this.props.onSubmit();
-    }
-
-    this.props.cloneDoc(this.props.database, this.props.doc, this.state.uuid);
-  };
-
-  componentDidUpdate() {
-    if (this.state.uuid === null) {
-      Helpers.getUUID().then((res) => {
-        if (res.uuids) {
-          const newState = { uuid: res.uuids[0] };
-          const idx = this.props.doc ? this.props.doc.attributes._id.indexOf(':') : -1;
-          if (idx >= 0) {
-            const partitionKey = this.props.doc.attributes._id.substring(0, idx);
-            newState.uuid = partitionKey + ':' + newState.uuid;
-          }
-          this.setState(newState);
-        }
-      }).catch(() => {});
-    }
-  }
-
-  closeModal = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-    this.props.hideCloneDocModal();
-  };
-
-  docIDChange = (e) => {
-    this.setState({ uuid: e.target.value });
-  };
-
-  render() {
-    if (this.state.uuid === null) {
-      return false;
-    }
-
-    return (
-      <Modal dialogClassName="clone-doc-modal" show={this.props.visible} onHide={this.closeModal}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Clone Document</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <form className="form" onSubmit={(e) => { e.preventDefault(); this.cloneDoc(); }}>
-            <p>
-              Document cloning copies the saved version of the document. Unsaved document changes will be discarded.
-            </p>
-            <p>
-              You can modify the following generated ID for your new document.
-            </p>
-            <input ref={node => this.newDocId = node} type="text" autoFocus={true} className="input-block-level"
-              onChange={this.docIDChange} value={this.state.uuid} />
-          </form>
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" data-bypass="true" className="cancel-link" onClick={this.closeModal}>Cancel</a>
-          <button className="btn btn-primary save" onClick={this.cloneDoc}>
-            <i className="icon-repeat"></i> Clone Document
-          </button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/DocEditorContainer.js b/app/addons/documents/doc-editor/components/DocEditorContainer.js
deleted file mode 100644
index 4b3d8f3..0000000
--- a/app/addons/documents/doc-editor/components/DocEditorContainer.js
+++ /dev/null
@@ -1,88 +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.
-
-import { connect } from 'react-redux';
-import Actions from '../actions';
-import DocEditorScreen from './DocEditorScreen';
-
-const mapStateToProps = ({ docEditor, databases }, ownProps) => {
-  return {
-    isLoading: docEditor.isLoading || databases.isLoadingDbInfo,
-    isSaving: docEditor.isSaving,
-    isNewDoc: ownProps.isNewDoc,
-    isDbPartitioned: databases.isDbPartitioned,
-    doc: docEditor.doc,
-    database: ownProps.database,
-    conflictCount: docEditor.docConflictCount,
-    previousUrl: ownProps.previousUrl,
-    isCloneDocModalVisible: docEditor.cloneDocModalVisible,
-
-    isDeleteDocModalVisible: docEditor.deleteDocModalVisible,
-
-    isUploadModalVisible: docEditor.uploadModalVisible,
-    uploadInProgress: docEditor.uploadInProgress,
-    uploadPercentage: docEditor.uploadPercentage,
-    uploadErrorMessage: docEditor.uploadErrorMessage,
-    numFilesUploaded: docEditor.numFilesUploaded
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    saveDoc: (doc, isValidDoc, onSave, navigateToUrl) => {
-      dispatch(Actions.saveDoc(doc, isValidDoc, onSave, navigateToUrl));
-    },
-
-    showCloneDocModal: () => {
-      dispatch(Actions.showCloneDocModal());
-    },
-    hideCloneDocModal: () => {
-      dispatch(Actions.hideCloneDocModal());
-    },
-    cloneDoc: (database, doc, newId) => {
-      Actions.cloneDoc(database, doc, newId);
-    },
-
-    showDeleteDocModal: () => {
-      dispatch(Actions.showDeleteDocModal());
-    },
-    hideDeleteDocModal: () => {
-      dispatch(Actions.hideDeleteDocModal());
-    },
-    deleteDoc: (doc) => {
-      Actions.deleteDoc(doc);
-    },
-
-    showUploadModal: () => {
-      dispatch(Actions.showUploadModal());
-    },
-    hideUploadModal: () => {
-      dispatch(Actions.hideUploadModal());
-    },
-    cancelUpload: () => {
-      Actions.cancelUpload();
-    },
-    resetUploadModal: () => {
-      dispatch(Actions.resetUploadModal());
-    },
-    uploadAttachment: (params) => {
-      dispatch(Actions.uploadAttachment(params));
-    }
-  };
-};
-
-const DocEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(DocEditorScreen);
-
-export default DocEditorContainer;
diff --git a/app/addons/documents/doc-editor/components/DocEditorScreen.js b/app/addons/documents/doc-editor/components/DocEditorScreen.js
deleted file mode 100644
index 448e4c7..0000000
--- a/app/addons/documents/doc-editor/components/DocEditorScreen.js
+++ /dev/null
@@ -1,249 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from '../../../../core/api';
-import FauxtonComponents from '../../../fauxton/components';
-import GeneralComponents from '../../../components/react-components';
-import AttachmentsPanelButton from './AttachmentsPanelButton';
-import CloneDocModal from './CloneDocModal';
-import PanelButton from './PanelButton';
-import UploadModal from './UploadModal';
-
-
-export default class DocEditorScreen extends React.Component {
-  static defaultProps = {
-    database: {},
-    isNewDoc: false
-  };
-
-  static propTypes = {
-    isLoading: PropTypes.bool.isRequired,
-    isSaving: PropTypes.bool.isRequired,
-    isNewDoc: PropTypes.bool.isRequired,
-    isDbPartitioned: PropTypes.bool.isRequired,
-    doc: PropTypes.object,
-    conflictCount: PropTypes.number.isRequired,
-    previousUrl: PropTypes.string,
-    saveDoc: PropTypes.func.isRequired,
-
-    isCloneDocModalVisible: PropTypes.bool.isRequired,
-    database: PropTypes.object,
-    showCloneDocModal: PropTypes.func.isRequired,
-    hideCloneDocModal: PropTypes.func.isRequired,
-    cloneDoc: PropTypes.func.isRequired,
-
-    isDeleteDocModalVisible: PropTypes.bool.isRequired,
-    showDeleteDocModal: PropTypes.func.isRequired,
-    hideDeleteDocModal: PropTypes.func.isRequired,
-    deleteDoc: PropTypes.func.isRequired,
-
-    isUploadModalVisible: PropTypes.bool.isRequired,
-    uploadInProgress: PropTypes.bool.isRequired,
-    uploadPercentage: PropTypes.number.isRequired,
-    uploadErrorMessage: PropTypes.string,
-    numFilesUploaded: PropTypes.number.isRequired,
-    showUploadModal: PropTypes.func.isRequired,
-    hideUploadModal: PropTypes.func.isRequired,
-    cancelUpload: PropTypes.func.isRequired,
-    resetUploadModal: PropTypes.func.isRequired,
-    uploadAttachment: PropTypes.func.isRequired
-  }
-
-  getCodeEditor = () => {
-    if (this.props.isLoading) {
-      return (<GeneralComponents.LoadLines />);
-    }
-
-    const docContent = this.props.doc.attributes;
-    if (this.props.isDbPartitioned) {
-      if (!docContent._id.includes(':') && !docContent._id.startsWith('_design')) {
-        docContent._id = ':' + docContent._id;
-      }
-    }
-    const code = JSON.stringify(docContent, null, '  ');
-    const editorCommands = [{
-      name: 'save',
-      bindKey: { win: 'Ctrl-S', mac: 'Ctrl-S' },
-      exec: this.saveDoc
-    }];
-
-    return (
-      <GeneralComponents.CodeEditor
-        id="doc-editor"
-        ref={node => this.docEditor = node}
-        defaultCode={code}
-        disabled={this.props.isSaving}
-        mode="json"
-        autoFocus={true}
-        editorCommands={editorCommands}
-        notifyUnsavedChanges={true}
-        stringEditModalEnabled={true} />
-    );
-  };
-
-  UNSAFE_componentWillUpdate(nextProps) {
-    // Update the editor whenever a file is uploaded, a doc is cloned, or a new doc is loaded
-    if (this.props.numFilesUploaded !== nextProps.numFilesUploaded ||
-        this.props.doc && this.props.doc.hasChanged() ||
-        (this.props.doc && nextProps.doc && this.props.doc.id !== nextProps.doc.id)) {
-      const editor = this.getEditor();
-      if (editor) {
-        this.getEditor().setValue(JSON.stringify(nextProps.doc.attributes, null, '  '));
-      }
-      this.onSaveComplete();
-    }
-  }
-
-  saveDoc = () => {
-    this.props.saveDoc(this.props.doc, this.checkDocIsValid(), this.onSaveComplete, this.props.previousUrl);
-  };
-
-  onSaveComplete = () => {
-    this.getEditor().clearChanges();
-  };
-
-  hideDeleteDocModal = () => {
-    this.props.hideDeleteDocModal();
-  };
-
-  deleteDoc = () => {
-    this.props.hideDeleteDocModal();
-    this.props.deleteDoc(this.props.doc);
-  };
-
-  getEditor = () => {
-    return (this.docEditor) ? this.docEditor.getEditor() : null;
-  };
-
-  checkDocIsValid = () => {
-    if (this.getEditor().hasErrors()) {
-      return false;
-    }
-    const json = JSON.parse(this.getEditor().getValue());
-    this.props.doc.clear().set(json, { validate: true });
-
-    return !this.props.doc.validationError;
-  };
-
-  clearChanges = () => {
-    if (this.docEditor) {
-      this.docEditor.clearChanges();
-    }
-  };
-
-  getExtensionIcons = () => {
-    var extensions = FauxtonAPI.getExtensions('DocEditor:icons');
-    return _.map(extensions, (Extension, i) => {
-      return (<Extension doc={this.props.doc} key={i} database={this.props.database} />);
-    });
-  };
-
-  getButtonRow = () => {
-    if (this.props.isNewDoc || this.props.doc === null) {
-      return false;
-    }
-    return (
-      <div>
-        <AttachmentsPanelButton
-          doc={this.props.doc}
-          isLoading={this.props.isLoading}
-          disabled={this.props.isSaving} />
-        <div className="doc-editor-extension-icons">{this.getExtensionIcons()}</div>
-
-        {this.props.conflictCount ? <PanelButton
-          title={`Conflicts (${this.props.conflictCount})`}
-          iconClass="icon-columns"
-          className="conflicts"
-          disabled={this.props.isSaving}
-          onClick={() => { FauxtonAPI.navigate(FauxtonAPI.urls('revision-browser', 'app', this.props.database.safeID(), this.props.doc.id));}}/> : null}
-
-        <PanelButton className="upload"
-          title="Upload Attachment"
-          iconClass="icon-circle-arrow-up"
-          disabled={this.props.isSaving}
-          onClick={this.props.showUploadModal} />
-        <PanelButton title="Clone Document"
-          iconClass="icon-repeat"
-          disabled={this.props.isSaving}
-          onClick={this.props.showCloneDocModal} />
-        <PanelButton title="Delete"
-          iconClass="icon-trash"
-          disabled={this.props.isSaving}
-          onClick={this.props.showDeleteDocModal} />
-      </div>
-    );
-  };
-
-  render() {
-    const saveButtonLabel = this.props.isSaving ?
-      'Saving...' :
-      (this.props.isNewDoc ? 'Create Document' : 'Save Changes');
-    const endpoint = this.props.previousUrl ?
-      this.props.previousUrl :
-      FauxtonAPI.urls('allDocs', 'app', FauxtonAPI.url.encode(this.props.database.id));
-    let cancelBtClass = `js-back cancel-button ${this.props.isSaving ? 'cancel-button--disabled' : ''}`;
-    return (
-      <div>
-        <div id="doc-editor-actions-panel">
-          <div className="doc-actions-left">
-            <button disabled={this.props.isSaving} className="save-doc btn btn-primary save" type="button" onClick={this.saveDoc}>
-              <i className="icon fonticon-ok-circled"></i> {saveButtonLabel}
-            </button>
-            <div>
-              <a href={this.props.isSaving ? undefined : `#/${endpoint}`}
-                className={cancelBtClass}>Cancel</a>
-            </div>
-          </div>
-          <div className="alignRight">
-            {this.getButtonRow()}
-          </div>
-        </div>
-
-        <div className="code-region">
-          <div className="bgEditorGutter"></div>
-          <div id="editor-container" className="doc-code">{this.getCodeEditor()}</div>
-
-        </div>
-
-        <UploadModal
-          ref={node => this.uploadModal = node}
-          visible={this.props.isUploadModalVisible}
-          doc={this.props.doc}
-          inProgress={this.props.uploadInProgress}
-          uploadPercentage={this.props.uploadPercentage}
-          errorMessage={this.props.uploadErrorMessage}
-          cancelUpload={this.props.cancelUpload}
-          hideUploadModal={this.props.hideUploadModal}
-          resetUploadModal={this.props.resetUploadModal}
-          uploadAttachment={this.props.uploadAttachment}/>
-        <CloneDocModal
-          doc={this.props.doc}
-          database={this.props.database}
-          visible={this.props.isCloneDocModalVisible}
-          onSubmit={this.clearChanges}
-          hideCloneDocModal={this.props.hideCloneDocModal}
-          cloneDoc={this.props.cloneDoc}/>
-        <span id='hey'>bb</span>
-        <FauxtonComponents.ConfirmationModal
-          title="Confirm Deletion"
-          visible={this.props.isDeleteDocModalVisible}
-          text="Are you sure you want to delete this document?"
-          onClose={this.hideDeleteDocModal}
-          onSubmit={this.deleteDoc}
-          successButtonLabel="Delete Document" />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/PanelButton.js b/app/addons/documents/doc-editor/components/PanelButton.js
deleted file mode 100644
index 682f9df..0000000
--- a/app/addons/documents/doc-editor/components/PanelButton.js
+++ /dev/null
@@ -1,47 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class PanelButton extends React.Component {
-  static propTypes = {
-    title: PropTypes.string.isRequired,
-    onClick: PropTypes.func.isRequired,
-    className: PropTypes.string,
-    disabled: PropTypes.bool
-  };
-
-  static defaultProps = {
-    title: '',
-    iconClass: '',
-    onClick: () => { },
-    className: '',
-    disabled: false
-  };
-
-  render() {
-    var iconClasses = 'icon ' + this.props.iconClass;
-    return (
-      <div className="panel-section">
-        <button className={`panel-button ${this.props.className}`}
-          title={this.props.title}
-          onClick={this.props.onClick}
-          disabled={this.props.disabled} >
-
-          <i className={iconClasses}></i>
-          <span>{this.props.title}</span>
-        </button>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/UploadModal.js b/app/addons/documents/doc-editor/components/UploadModal.js
deleted file mode 100644
index eb907f5..0000000
--- a/app/addons/documents/doc-editor/components/UploadModal.js
+++ /dev/null
@@ -1,95 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { Modal } from 'react-bootstrap';
-
-
-export default class UploadModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    doc: PropTypes.object,
-    inProgress: PropTypes.bool.isRequired,
-    uploadPercentage: PropTypes.number.isRequired,
-    errorMessage: PropTypes.string,
-    cancelUpload: PropTypes.func.isRequired,
-    hideUploadModal: PropTypes.func.isRequired,
-    resetUploadModal: PropTypes.func.isRequired,
-    uploadAttachment: PropTypes.func.isRequired
-  };
-
-  closeModal = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-
-    if (this.props.inProgress) {
-      this.props.cancelUpload();
-    }
-    this.props.hideUploadModal();
-    this.props.resetUploadModal();
-  };
-
-  upload = () => {
-    this.props.uploadAttachment({
-      doc: this.props.doc,
-      rev: this.props.doc.get('_rev'),
-      files: this.attachments.files
-    });
-  };
-
-  render() {
-    let errorClasses = 'alert alert-error';
-    if (this.props.errorMessage === '') {
-      errorClasses += ' hide';
-    }
-    let loadIndicatorClasses = 'progress progress-info';
-    let disabledAttribute = {disabled: 'disabled'};
-    if (!this.props.inProgress) {
-      loadIndicatorClasses += ' hide';
-      disabledAttribute = {};
-    }
-
-    return (
-      <Modal dialogClassName="upload-file-modal" show={this.props.visible} onHide={this.closeModal}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Upload Attachment</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <div className={errorClasses}>{this.props.errorMessage}</div>
-          <div>
-            <form ref={node => this.uploadForm = node} className="form">
-              <p>
-                Select a file to upload as an attachment to this document. Uploading a file saves the document as a new
-                revision.
-              </p>
-              <input ref={el => this.attachments = el} type="file" name="_attachments" {...disabledAttribute}/>
-              <br />
-            </form>
-
-            <div className={loadIndicatorClasses}>
-              <div className="bar" style={{ width: this.props.uploadPercentage + '%'}}></div>
-            </div>
-          </div>
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" data-bypass="true" className="cancel-link" onClick={this.closeModal}>Cancel</a>
-          <button href="#" id="upload-btn" data-bypass="true" className="btn btn-primary save" onClick={this.upload} {...disabledAttribute}>
-            <i className="icon icon-upload" /> Upload Attachment
-          </button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/reducers.js b/app/addons/documents/doc-editor/reducers.js
deleted file mode 100644
index 694c0bb..0000000
--- a/app/addons/documents/doc-editor/reducers.js
+++ /dev/null
@@ -1,137 +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.
-
-import ActionTypes from "./actiontypes";
-
-const initialState = {
-  doc: null,
-  isLoading: true,
-  isSaving: false,
-  cloneDocModalVisible: false,
-  deleteDocModalVisible: false,
-  uploadModalVisible: false,
-
-  numFilesUploaded: 0,
-  uploadErrorMessage: '',
-  uploadInProgress: false,
-  uploadPercentage: 0,
-
-  docConflictCount: 0
-};
-
-export default function docEditor (state = initialState, action) {
-  const { options, type } = action;
-  switch (type) {
-
-    case ActionTypes.RESET_DOC:
-      return {
-        ...initialState
-      };
-
-    case ActionTypes.DOC_LOADED:
-      const conflictCount = options.doc.get('_conflicts') ? options.doc.get('_conflicts').length : 0;
-      options.doc.unset('_conflicts');
-      return {
-        ...state,
-        isLoading: false,
-        doc: options.doc,
-        docConflictCount: conflictCount,
-      };
-
-    case ActionTypes.SHOW_CLONE_DOC_MODAL:
-      return {
-        ...state,
-        cloneDocModalVisible: true
-      };
-
-    case ActionTypes.HIDE_CLONE_DOC_MODAL:
-      return {
-        ...state,
-        cloneDocModalVisible: false
-      };
-
-    case ActionTypes.SHOW_DELETE_DOC_CONFIRMATION_MODAL:
-      return {
-        ...state,
-        deleteDocModalVisible: true
-      };
-
-    case ActionTypes.HIDE_DELETE_DOC_CONFIRMATION_MODAL:
-      return {
-        ...state,
-        deleteDocModalVisible: false
-      };
-
-    case ActionTypes.SHOW_UPLOAD_MODAL:
-      return {
-        ...state,
-        uploadModalVisible: true
-      };
-
-    case ActionTypes.HIDE_UPLOAD_MODAL:
-      return {
-        ...state,
-        uploadModalVisible: false
-      };
-
-    case ActionTypes.FILE_UPLOAD_SUCCESS:
-      return {
-        ...state,
-        numFilesUploaded: state.numFilesUploaded + 1
-      };
-
-    case ActionTypes.FILE_UPLOAD_ERROR:
-      return {
-        ...state,
-        uploadInProgress: false,
-        uploadPercentage: 0,
-        uploadErrorMessage: options.error
-      };
-
-    case ActionTypes.RESET_UPLOAD_MODAL:
-      return {
-        ...state,
-        uploadInProgress: false,
-        uploadPercentage: 0,
-        uploadErrorMessage: ''
-      };
-
-    case ActionTypes.START_FILE_UPLOAD:
-      return {
-        ...state,
-        uploadInProgress: true,
-        uploadPercentage: 0,
-        fileUploadErrorMsg: ''
-      };
-
-    case ActionTypes.SET_FILE_UPLOAD_PERCENTAGE:
-      return {
-        ...state,
-        uploadPercentage: options.percent
-      };
-
-    case ActionTypes.SAVING_DOCUMENT:
-      return {
-        ...state,
-        isSaving: true,
-      };
-
-    case ActionTypes.SAVING_DOCUMENT_COMPLETED:
-      return {
-        ...state,
-        isSaving: false,
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/header/header.js b/app/addons/documents/header/header.js
deleted file mode 100644
index c481e23..0000000
--- a/app/addons/documents/header/header.js
+++ /dev/null
@@ -1,100 +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.
-
-import React from 'react';
-import Constants from '../constants';
-import { Button, ButtonGroup } from 'react-bootstrap';
-
-export default class BulkDocumentHeaderController extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  render () {
-    const {
-      selectedLayout,
-      docType,
-      queryOptionsParams,
-      fetchUrl
-    } = this.props;
-
-    let metadata, json, table;
-    if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) {
-      metadata = <Button
-        className={selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA ? 'active' : ''}
-        onClick={this.toggleLayout.bind(this, Constants.LAYOUT_ORIENTATION.METADATA)}
-      >
-          Metadata
-      </Button>;
-    } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-      return null;
-    }
-
-    // Reduce doesn't allow for include_docs=true, so we'll hide the JSON and table modes
-    // since they force 'include_docs=true' when reduce is checked in the query options panel.
-    const isAllDocsQuery = fetchUrl && fetchUrl.includes('/_all_docs');
-    const isMangoQuery = docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-    if (isAllDocsQuery || isMangoQuery || (!queryOptionsParams.reduce)) {
-      table = <Button
-        className={selectedLayout === Constants.LAYOUT_ORIENTATION.TABLE ? 'active' : ''}
-        onClick={this.toggleLayout.bind(this, Constants.LAYOUT_ORIENTATION.TABLE)}
-      >
-        <i className="fonticon-table" /> Table
-      </Button>;
-
-      json = <Button
-        className={selectedLayout === Constants.LAYOUT_ORIENTATION.JSON ? 'active' : ''}
-        onClick={this.toggleLayout.bind(this, Constants.LAYOUT_ORIENTATION.JSON)}
-      >
-        <i className="fonticon-json" /> JSON
-      </Button>;
-    }
-
-    return (
-      <div className="alternative-header">
-        <ButtonGroup className="two-sides-toggle-button">
-          {table}
-          {metadata}
-          {json}
-        </ButtonGroup>
-      </div>
-    );
-  }
-
-  toggleLayout (newLayout) {
-    const {
-      changeLayout,
-      selectedLayout,
-      fetchDocs,
-      fetchParams,
-      queryOptionsParams,
-      queryOptionsToggleIncludeDocs
-    } = this.props;
-
-    if (newLayout !== selectedLayout) {
-      // change our layout to JSON, Table, or Metadata
-      changeLayout(newLayout);
-
-      queryOptionsParams.include_docs = newLayout !== Constants.LAYOUT_ORIENTATION.METADATA;
-      if (newLayout === Constants.LAYOUT_ORIENTATION.TABLE) {
-        fetchParams.conflicts = true;
-      } else {
-        delete fetchParams.conflicts;
-      }
-
-      // tell the query options panel we're updating include_docs
-      queryOptionsToggleIncludeDocs(!queryOptionsParams.include_docs);
-      fetchDocs(fetchParams, queryOptionsParams);
-      return;
-    }
-  }
-}
diff --git a/app/addons/documents/helpers.js b/app/addons/documents/helpers.js
deleted file mode 100644
index 27623a9..0000000
--- a/app/addons/documents/helpers.js
+++ /dev/null
@@ -1,168 +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.
-
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-
-import ReactComponentsActions from "../components/actions";
-
-
-// sequence info is an array in couchdb2 with two indexes. On couch 1.x, it's just a string / number
-const getSeqNum = (val) => {
-  return _.isArray(val) ? val[1] : val;
-};
-
-const getNewButtonLinks = (databaseName, partitionKey) => {
-  const addLinks = FauxtonAPI.getExtensions('sidebar:links');
-  const newUrlPrefix = '#' + FauxtonAPI.urls('databaseBaseURL', 'app', FauxtonAPI.url.encode(databaseName));
-  let partitionKeyComponent = '';
-  let partitionKeyQueryParam = '';
-  if (partitionKey) {
-    partitionKeyComponent = '/_partition/' + encodeURIComponent(partitionKey);
-    partitionKeyQueryParam = '?partitionKey=' + encodeURIComponent(partitionKey);
-  }
-
-  const addNewLinks = addLinks.reduce((menuLinks, link) => {
-    menuLinks.push({
-      title: link.title,
-      url: newUrlPrefix + partitionKeyComponent + '/' + link.url,
-      icon: 'fonticon-plus-circled'
-    });
-
-    return menuLinks;
-  }, [{
-    title: 'New Doc',
-    url: newUrlPrefix + '/_new' + partitionKeyQueryParam,
-    icon: 'fonticon-plus-circled'
-  }, {
-    title: 'New View',
-    url: newUrlPrefix + partitionKeyComponent + '/new_view',
-    icon: 'fonticon-plus-circled'
-  }, getMangoLink(databaseName, partitionKey)]);
-
-  return [{
-    title: 'Add New',
-    links: addNewLinks
-  }];
-};
-
-const getMangoLink = (databaseName, partitionKey) => {
-  const newUrlPrefix = '#' + FauxtonAPI.urls('databaseBaseURL', 'app', FauxtonAPI.url.encode(databaseName)) +
-    (partitionKey ? '/_partition/' + encodeURIComponent(partitionKey) : '');
-
-  return {
-    title: app.i18n.en_US['new-mango-index'],
-    url: newUrlPrefix + '/_index',
-    icon: 'fonticon-plus-circled'
-  };
-};
-
-const parseJSON = (str) => {
-  return JSON.parse('"' + str + '"');   // this ensures newlines are converted
-};
-
-const getModifyDatabaseLinks = (databaseName) => {
-  return [{
-    title: 'Replicate Database',
-    icon: 'fonticon-replicate',
-    url: FauxtonAPI.urls('replication', 'app', databaseName)
-  }, {
-    title: 'Delete',
-    icon: 'fonticon-trash',
-    onClick: ReactComponentsActions.showDeleteDatabaseModal.bind(this, {showDeleteModal: true, dbId: databaseName})
-  }];
-};
-
-const truncateDoc = (docString, maxRows) => {
-  let lines = docString.split('\n');
-  let isTruncated = false;
-  if (lines.length > maxRows) {
-    isTruncated = true;
-    lines = lines.slice(0, maxRows);
-    docString = lines.join('\n');
-  }
-  return {
-    isTruncated: isTruncated,
-    content: docString
-  };
-};
-
-const getNewDocUrl = (databaseName, partitionKey) => {
-  const safeDatabaseName = encodeURIComponent(databaseName);
-  let url = FauxtonAPI.urls('new', 'newDocument', safeDatabaseName);
-  if (partitionKey) {
-    url = url + '?partitionKey=' + encodeURIComponent(partitionKey);
-  }
-  return url;
-};
-
-const selectedViewContainsReduceFunction = (designDocs, selectedNavItem) => {
-  if (!selectedNavItem) {
-    return false;
-  }
-
-  let showReduce = false;
-  // If a map/reduce view is selected, check if view contains reduce field
-  if (designDocs && isViewSelected(selectedNavItem)) {
-    const ddocID = '_design/' + selectedNavItem.designDocName;
-    const ddoc = designDocs.find(ddoc => ddoc._id === ddocID);
-    showReduce = ddoc !== undefined && ddoc.views
-        && ddoc.views[selectedNavItem.indexName] !== undefined
-        && ddoc.views[selectedNavItem.indexName].reduce !== undefined;
-  }
-  return showReduce;
-};
-
-const selectedItemIsPartitionedView = (designDocs, selectedNavItem, isDbPartitioned) => {
-  if (!selectedNavItem) {
-    return false;
-  }
-
-  let isPartitioned = false;
-  if (designDocs && isViewSelected(selectedNavItem)) {
-    const ddocID = '_design/' + selectedNavItem.designDocName;
-    const ddoc = designDocs.find(ddoc => ddoc._id === ddocID);
-    if (ddoc) {
-      isPartitioned = isDDocPartitioned(ddoc, isDbPartitioned);
-    }
-  }
-  return isPartitioned;
-};
-
-const isViewSelected = (selectedNavItem) => {
-  return (selectedNavItem.navItem === 'designDoc'
-    && selectedNavItem.designDocSection === 'Views'
-    && selectedNavItem.indexName);
-};
-
-const isDDocPartitioned = (ddoc, isDbPartitioned) => {
-  // By default a design doc is partitioned if the database is partitioned
-  let isDDocPartitioned = isDbPartitioned;
-  // Check if ddoc is explictly set to not partitioned
-  if (isDbPartitioned && ddoc.options && ddoc.options.partitioned === false) {
-    isDDocPartitioned = false;
-  }
-  return isDDocPartitioned;
-};
-
-export default {
-  getSeqNum,
-  getNewButtonLinks,
-  getModifyDatabaseLinks,
-  getNewDocUrl,
-  isDDocPartitioned,
-  parseJSON,
-  truncateDoc,
-  selectedViewContainsReduceFunction,
-  selectedItemIsPartitionedView,
-  isViewSelected
-};
diff --git a/app/addons/documents/index-editor/__tests__/actions.test.js b/app/addons/documents/index-editor/__tests__/actions.test.js
deleted file mode 100644
index c01e469..0000000
--- a/app/addons/documents/index-editor/__tests__/actions.test.js
+++ /dev/null
@@ -1,148 +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.
-
-import FauxtonAPI from '../../../../core/api';
-import Actions from '../actions';
-import Documents from '../../resources';
-import testUtils from '../../../../../test/mocha/testUtils';
-import sinon from 'sinon';
-import '../../../documents/base';
-
-const restore = testUtils.restore;
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Index Editor Actions', function () {
-
-  describe('delete view', function () {
-    let designDocs, database, designDoc, designDocCollection, designDocId, viewName;
-    beforeEach(function () {
-      FauxtonAPI.reduxDispatch = sinon.stub();
-      database = {
-        safeID: function () { return 'safeid';}
-      };
-
-      viewName = 'test-view';
-      designDocId = '_design/test-doc';
-      designDocCollection = new Documents.AllDocs([{
-        _id: designDocId,
-        _rev: '1-231',
-        views: {
-          'test-view': {
-            map: 'function () {};'
-          },
-          'test-view2': {
-            map: 'function () {};'
-          }
-        }
-      }], {
-        params: { limit: 10 },
-        database: database
-      });
-      designDocs = designDocCollection.models;
-      designDoc = _.head(designDocs);
-    });
-
-    afterEach(function () {
-      restore(FauxtonAPI.navigate);
-    });
-
-    it('saves design doc if has other views', function () {
-      designDoc.save = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      const saveSpy = sinon.spy(designDoc, 'save');
-      designDocs.fetch = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-
-      Actions.deleteView({
-        indexName: viewName,
-        database: database,
-        designDocs: designDocs,
-        designDoc: designDoc
-      });
-
-      sinon.assert.calledOnce(saveSpy);
-    });
-
-    it('deletes design doc if has no other views', function () {
-      designDoc.removeDdocView('test-view2');
-
-      designDoc.destroy = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      const destroySpy = sinon.spy(designDoc, 'destroy');
-      designDocs.remove = function () {};
-      designDocs.fetch = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-
-      Actions.deleteView({
-        indexName: viewName,
-        database: database,
-        designDocs: designDocs,
-        designDoc: designDoc
-      });
-
-      sinon.assert.calledOnce(destroySpy);
-    });
-
-    it('navigates to all docs if was on view', function () {
-      const spy = sinon.spy(FauxtonAPI, 'navigate');
-
-      designDoc.save = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      designDocs.fetch = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      return Actions.deleteView({
-        indexName: viewName,
-        database: database,
-        designDocs: designDocs,
-        designDoc: designDoc,
-        isOnIndex: true
-      }).then(() => {
-        sinon.assert.calledWithMatch(spy, /_all_docs/);
-        sinon.assert.calledOnce(spy);
-      });
-    });
-
-    it('saves design doc if it has no view section', function () {
-      const ddoc = { _id: designDocId };
-      const ddocModel = new Documents.Doc(ddoc, { database: database });
-
-      ddocModel.setDdocView('testview', '() => {}', '() => {}');
-      expect(ddocModel.get('views')).toEqual({
-        testview: {
-          map: '() => {}',
-          reduce: '() => {}'
-        }
-      });
-      expect(ddocModel.get('language')).toBe('javascript');
-    });
-
-    it('removes old view only when editting', function () {
-      const viewInfo = {
-        isNewView: false,
-        originalDesignDocName: 'test',
-        designDocId: 'test',
-        originalViewName: 'foo',
-        viewName: 'bar'
-      };
-      expect(Actions.shouldRemoveDdocView(viewInfo)).toBe(true);
-
-      viewInfo.isNewView = true;
-      expect(Actions.shouldRemoveDdocView(viewInfo)).toBe(false);
-    });
-  });
-});
diff --git a/app/addons/documents/index-editor/__tests__/components.test.js b/app/addons/documents/index-editor/__tests__/components.test.js
deleted file mode 100644
index 33936d7..0000000
--- a/app/addons/documents/index-editor/__tests__/components.test.js
+++ /dev/null
@@ -1,275 +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.
-
-import React from 'react';
-import {mount, shallow} from 'enzyme';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../../core/api';
-import Views from '../components';
-import '../../base';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('ReduceEditor', () => {
-  describe('getReduceValue', () => {
-    const defaultProps = {
-      reduceOptions: [],
-      hasReduce: false,
-      hasCustomReduce: false,
-      reduce: null,
-      reduceSelectedOption: 'NONE',
-      customReducerSupported: true,
-      updateReduceCode: () => {},
-      selectReduceChanged: () => {}
-    };
-
-    it('returns null for none', () => {
-      const reduceEl = shallow(<Views.ReduceEditor
-        {...defaultProps}
-      />);
-      expect(reduceEl.instance().getReduceValue()).toBeNull();
-    });
-
-    it('returns built in for built in reduce', () => {
-      const reduceEl = shallow(<Views.ReduceEditor
-        {...defaultProps}
-        reduce='_sum'
-        hasReduce={true}
-      />);
-      expect(reduceEl.instance().getReduceValue()).toBe('_sum');
-    });
-
-    it('shows warning when custom reduce is not supported', () => {
-      const reduceEl = shallow(<Views.ReduceEditor
-        {...defaultProps}
-        reduce='function() {}'
-        hasReduce={true}
-        customReducerSupported={false}
-      />);
-      expect(reduceEl.find('div.reduce-editor-warning').exists()).toBe(true);
-    });
-
-  });
-});
-
-describe('DesignDocSelector component', () => {
-  const defaultProps = {
-    designDocList: ['_design/test-doc', '_design/test-doc2'],
-    newDesignDocName: '',
-    selectedDesignDocPartitioned: false,
-    isDbPartitioned: false,
-    newDesignDocPartitioned: false,
-    onChangeNewDesignDocName: () => {},
-    onSelectDesignDoc: () => {}
-  };
-  let selectorEl;
-
-  it('calls onSelectDesignDoc on change', () => {
-    const spy = sinon.spy();
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDDocName={'new-doc'}
-        onSelectDesignDoc={spy}
-      />);
-
-    selectorEl.find('.styled-select select').first().simulate('change', {
-      target: {
-        value: '_design/test-doc'
-      }
-    });
-    sinon.assert.calledOnce(spy);
-  });
-
-  it('shows new design doc field when set to new-doc', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-      />);
-
-    expect(selectorEl.find('#new-ddoc-section').length).toBe(1);
-  });
-
-  it('hides new design doc field when design doc selected', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'_design/test-doc'}
-      />);
-
-    expect(selectorEl.find('#new-ddoc-section').length).toBe(0);
-  });
-
-  it('always passes validation when design doc selected', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'_design/test-doc'}
-      />);
-
-    expect(selectorEl.instance().validate()).toBe(true);
-  });
-
-  it('fails validation if new doc name entered/not entered', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        newDesignDocName=''
-      />);
-
-    // it shouldn't validate at this point: no new design doc name has been entered
-    expect(selectorEl.instance().validate()).toBe(false);
-  });
-
-  it('passes validation if new doc name entered/not entered', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        newDesignDocName='new-doc-name'
-      />);
-    expect(selectorEl.instance().validate()).toBe(true);
-  });
-
-
-  it('omits doc URL when not supplied', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-      />);
-    expect(selectorEl.find('.help-link').length).toBe(0);
-  });
-
-  it('includes help doc link when supplied', () => {
-    const docLink = 'http://docs.com';
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        docLink={docLink}
-      />);
-    expect(selectorEl.find('.help-link').length).toBe(1);
-    expect(selectorEl.find('.help-link').prop('href')).toBe(docLink);
-  });
-
-  it('shows Partitioned checkbox only when db is partitioned', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-      />);
-
-    expect(selectorEl.find('div.ddoc-selector-partitioned').exists()).toBe(false);
-
-    selectorEl.setProps({isDbPartitioned: true});
-    expect(selectorEl.find('div.ddoc-selector-partitioned').exists()).toBe(true);
-  });
-
-  it('calls onChangeNewDesignDocPartitioned when partitioned option changes', () => {
-    const spy = sinon.stub();
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        isDbPartitioned={true}
-        onChangeNewDesignDocPartitioned={spy}
-      />);
-    selectorEl.find('input#js-ddoc-selector-partitioned').simulate('change');
-    sinon.assert.called(spy);
-  });
-});
-
-describe('IndexEditor', () => {
-  const defaultProps = {
-    isLoading: false,
-    isNewView: false,
-    isNewDesignDoc: false,
-    isDbPartitioned: false,
-    viewName: '',
-    database: { safeID: () => 'test_db' },
-    newDesignDocName: '',
-    newDesignDocPartitioned: false,
-    originalViewName: '',
-    originalDesignDocName: '',
-    designDoc: {},
-    designDocId: '',
-    designDocPartitioned: false,
-    designDocList: [],
-    map: '',
-    reduce: '',
-    designDocs: {},
-    updateNewDesignDocName: () => {},
-    updateMapCode: () => {},
-    selectDesignDoc: () => {},
-    onChangeNewDesignDocName: () => {},
-    changeViewName: () => {},
-    reduceOptions: [],
-    reduceSelectedOption: 'NONE',
-    hasReduce: false,
-    hasCustomReduce: false,
-    updateReduceCode: () => {},
-    selectReduceChanged: () => {}
-  };
-
-  afterEach(() => {
-    sinon.restore();
-  });
-
-  it('calls changeViewName on view name change', () => {
-    const spy = sinon.spy();
-    const editorEl = mount(<Views.IndexEditor
-      {...defaultProps}
-      viewName='new-name'
-      changeViewName={spy}
-    />);
-
-    editorEl.find('#index-name').simulate('change', {
-      target: {
-        value: 'newViewName'
-      }
-    });
-    sinon.assert.calledWith(spy, 'newViewName');
-  });
-
-  it('generates the correct cancel link when db, ddoc and views have special chars', () => {
-    const editorEl = mount(<Views.IndexEditor
-      {...defaultProps}
-      database={{ id: 'db%$1' }}
-      designDocId={'_design/doc/1$2'}
-      viewName={'v?abc/123'}
-    />);
-    const expectedUrl = `/${encodeURIComponent('db%$1')}/_design/${encodeURIComponent('doc/1$2')}/_view/${encodeURIComponent('v?abc/123')}`;
-    expect(editorEl.find('a.index-cancel-link').prop('href')).toMatch(expectedUrl);
-  });
-
-  it('shows warning when trying to save a partitioned view with custom reduce', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    const editorEl = mount(<Views.IndexEditor
-      {...defaultProps}
-      viewName='new-name'
-      designDocId='new-doc'
-      newDesignDocName='test_ddoc'
-      newDesignDocPartitioned={true}
-      isDbPartitioned={true}
-      reduce='function() { /*custom reduce*/ }'
-    />);
-
-    editorEl.find('form.view-query-save').simulate('submit', {
-      preventDefault: () => {}
-    });
-    sinon.assert.calledWithMatch(FauxtonAPI.addNotification, { msg: 'Partitioned views do not support custom reduce functions.' });
-  });
-
-});
diff --git a/app/addons/documents/index-editor/__tests__/reducers.test.js b/app/addons/documents/index-editor/__tests__/reducers.test.js
deleted file mode 100644
index c579010..0000000
--- a/app/addons/documents/index-editor/__tests__/reducers.test.js
+++ /dev/null
@@ -1,351 +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.
-
-import Documents from '../../../documents/resources';
-import reducer, { hasCustomReduce, getDesignDocList, getSelectedDesignDocPartitioned,
-  getSaveDesignDoc } from '../reducers';
-import ActionTypes from '../actiontypes';
-import '../../base';
-
-describe('IndexEditor Reducer', () => {
-  describe('map editor', () => {
-    it('new view is assigned the default map code', () => {
-      const action = {
-        type: ActionTypes.EDIT_NEW_INDEX,
-        options: {
-          isNewView: true,
-          //designDocs: {find: () => { return { dDocModel: () => {}}; }}
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.view.map).toBe('function (doc) {\n  emit(doc._id, 1);\n}');
-    });
-  });
-
-  describe('reduce editor', () => {
-    describe('hasCustomReduce', () => {
-      it('is false for no reduce', () => {
-        const designDoc = {
-          _id: '_design/test-doc',
-          views: {
-            'test-view': {
-              map: '() => {};'
-            }
-          }
-        };
-        const designDocs = new Documents.AllDocs([designDoc], {
-          params: { limit: 10 },
-          database: {
-            safeID: () => { return 'id';}
-          }
-        });
-        const action = {
-          type: ActionTypes.EDIT_NEW_INDEX,
-          options: {
-            isNewView: false,
-            viewName: 'test-view',
-            designDocs: designDocs,
-            designDocId: designDoc._id
-          }
-        };
-        const newState = reducer(undefined, action);
-        expect(hasCustomReduce(newState)).toBe(false);
-      });
-
-      it('is false for built in reduce', () => {
-        const designDoc = {
-          _id: '_design/test-doc',
-          views: {
-            'test-view': {
-              map: '() => {};',
-              reduce: '_sum'
-            }
-          }
-        };
-        const designDocs = new Documents.AllDocs([designDoc], {
-          params: { limit: 10 },
-          database: {
-            safeID: () => { return 'id';}
-          }
-        });
-        const action = {
-          type: ActionTypes.EDIT_NEW_INDEX,
-          options: {
-            isNewView: false,
-            viewName: 'test-view',
-            designDocs: designDocs,
-            designDocId: designDoc._id
-          }
-        };
-        const newState = reducer(undefined, action);
-        expect(hasCustomReduce(newState)).toBe(false);
-      });
-
-      it('is true for custom reduce', () => {
-        const designDoc = {
-          _id: '_design/test-doc',
-          views: {
-            'test-view': {
-              map: '() => {};',
-              reduce: 'function (reduce) { reduce(); }'
-            }
-          }
-        };
-        const designDocs = new Documents.AllDocs([designDoc], {
-          params: { limit: 10 },
-          database: {
-            safeID: () => { return 'id';}
-          }
-        });
-        const action = {
-          type: ActionTypes.EDIT_NEW_INDEX,
-          options: {
-            isNewView: false,
-            viewName: 'test-view',
-            designDocs: designDocs,
-            designDocId: designDoc._id
-          }
-        };
-
-        const newState = reducer(undefined, action);
-        expect(hasCustomReduce(newState)).toBe(true);
-      });
-    });
-
-    describe('SELECT_REDUCE_CHANGE', () => {
-      const designDoc = {
-        _id: '_design/test-doc',
-        views: {
-          'test-view': {
-            map: '() => {};'
-          }
-        }
-      };
-      const designDocs = new Documents.AllDocs([designDoc], {
-        params: { limit: 10 },
-        database: {
-          safeID: () => { return 'id';}
-        }
-      });
-      const editAction = {
-        type: ActionTypes.EDIT_NEW_INDEX,
-        options: {
-          isNewView: false,
-          viewName: 'test-view',
-          designDocs: designDocs,
-          designDocId: designDoc._id
-        }
-      };
-
-      it('NONE returns null reduce', () => {
-        let newState = reducer(undefined, editAction);
-        const selectReduceaction = {
-          type: ActionTypes.SELECT_REDUCE_CHANGE,
-          reduceSelectedOption: 'NONE'
-        };
-        newState = reducer(newState, selectReduceaction);
-        expect(newState.view.reduce).toBe('');
-      });
-
-      it('builtin returns builtin reduce', () => {
-        let newState = reducer(undefined, editAction);
-        const selectReduceAction = {
-          type: ActionTypes.SELECT_REDUCE_CHANGE,
-          reduceSelectedOption: '_sum'
-        };
-        newState = reducer(newState, selectReduceAction);
-        expect(newState.view.reduce).toBe('_sum');
-      });
-
-      it('custom returns custom reduce', () => {
-        let newState = reducer(undefined, editAction);
-        const selectReduceAction = {
-          type: ActionTypes.SELECT_REDUCE_CHANGE,
-          reduceSelectedOption: 'CUSTOM'
-        };
-        newState = reducer(newState, selectReduceAction);
-        expect(newState.view.reduce).toBe('function (keys, values, rereduce) {\n  if (rereduce) {\n    return sum(values);\n  } else {\n    return values.length;\n  }\n}');
-      });
-    });
-  });
-
-  describe('design doc selector', () => {
-    const designDoc = {
-      _id: '_design/test-doc',
-      views: {
-        'test-view': {
-          map: 'boom'
-        }
-      }
-    };
-
-    const mangoDoc = {
-      "_id": "_design/123mango",
-      "id": "_design/123mango",
-      "key": "_design/123mango",
-      "value": {
-        "rev": "20-9e4bc8b76fd7d752d620bbe6e0ea9a80"
-      },
-      "doc": {
-        "_id": "_design/123mango",
-        "_rev": "20-9e4bc8b76fd7d752d620bbe6e0ea9a80",
-        "views": {
-          "test-view": {
-            "map": "function(doc) {\n  emit(doc._id, 2);\n}"
-          },
-          "new-view": {
-            "map": "function(doc) {\n  if (doc.class === \"mammal\" && doc.diet === \"herbivore\")\n    emit(doc._id, 1);\n}",
-            "reduce": "_sum"
-          }
-        },
-        "language": "query",
-        "indexes": {
-          "newSearch": {
-            "analyzer": "standard",
-            "index": "function(doc){\n index(\"default\", doc._id);\n}"
-          }
-        }
-      }
-    };
-
-    const designDocArray = _.map([designDoc, mangoDoc], (doc) => {
-      return Documents.Doc.prototype.parse(doc);
-    });
-
-    const designDocs = new Documents.AllDocs(designDocArray, {
-      params: { limit: 10 },
-      database: {
-        safeID: () => { return 'id'; }
-      }
-    });
-
-    const editAction = {
-      type: ActionTypes.EDIT_INDEX,
-      options: {
-        isNewView: false,
-        viewName: 'test-view',
-        designDocs: designDocs,
-        designDocId: designDoc._id
-      }
-    };
-
-    it('DESIGN_DOC_CHANGE changes design doc id', () => {
-      let newState = reducer(undefined, editAction);
-      const designDocId = 'another-one';
-      const ddocChangeAction = {
-        type: ActionTypes.DESIGN_DOC_CHANGE,
-        options: {
-          value: designDocId
-        }
-      };
-      newState = reducer(newState, ddocChangeAction);
-      expect(newState.designDocId).toBe(designDocId);
-    });
-
-    it('only filters mango docs', () => {
-      const newState = reducer(undefined, editAction);
-      const designDocs = getDesignDocList(newState);
-
-      expect(designDocs.length).toBe(1);
-      expect(designDocs[0]).toBe('_design/test-doc');
-    });
-  });
-
-  describe('EDIT_INDEX', () => {
-    const designDoc = {
-      _id: '_design/test-doc',
-      views: {
-        'test-view': {
-          map: 'boom'
-        }
-      }
-    };
-    const designDocs = new Documents.AllDocs([designDoc], {
-      params: { limit: 10 },
-      database: {
-        safeID: () => { return 'id';}
-      }
-    });
-
-    it('can set reduce for new design doc', () => {
-      const editAction = {
-        type: ActionTypes.EDIT_INDEX,
-        options: {
-          isNewView: true,
-          isNewDesignDoc: true,
-          viewName: 'test-view',
-          designDocs: designDocs,
-          designDocId: undefined
-        }
-      };
-      let newState = reducer(undefined, editAction);
-
-      const selectReduceAction = {
-        type: ActionTypes.SELECT_REDUCE_CHANGE,
-        reduceSelectedOption: '_sum'
-      };
-      newState = reducer(newState, selectReduceAction);
-      expect(newState.view.reduce).toBe('_sum');
-    });
-  });
-
-  describe('getSelectedDesignDocPartitioned', () => {
-    const designDocs = [
-      {id: '_design/docGlobal', get: () => { return {options: { partitioned: false }}; }},
-      {id: '_design/docPartitioned', get: () => { return {options: { partitioned: true }}; }},
-      {id: '_design/docNoOptions', get: () => { return {};}}
-    ];
-
-    it('returns true for ddocs without partitioned flag on partitioned dbs', () => {
-      const isDbPartitioned = true;
-      const state = { designDocs, designDocId: '_design/docNoOptions' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(true);
-    });
-
-    it('returns false for ddocs where partitioned is false on partitioned dbs', () => {
-      const isDbPartitioned = true;
-      const state = { designDocs, designDocId: '_design/docGlobal' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(false);
-    });
-
-    it('returns true for ddocs where partitioned is true on partitioned dbs', () => {
-      const isDbPartitioned = true;
-      const state = { designDocs, designDocId: '_design/docPartitioned' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(true);
-    });
-
-    it('any ddoc is global on non-partitioned dbs', () => {
-      const isDbPartitioned = false;
-      const state = { designDocs, designDocId: '_design/docGlobal' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(false);
-
-      const state2 = { designDocs, designDocId: '_design/docPartitioned' };
-      expect(getSelectedDesignDocPartitioned(state2, isDbPartitioned)).toBe(false);
-
-      const state3 = { designDocs, designDocId: '_design/docNoOptions' };
-      expect(getSelectedDesignDocPartitioned(state3, isDbPartitioned)).toBe(false);
-    });
-
-  });
-
-  describe('getSaveDesignDoc', () => {
-
-    it('only sets partitioned flag when db is partitioned', () => {
-      const state = { designDocId: 'new-doc', newDesignDocPartitioned: true, };
-      const ddoc = getSaveDesignDoc(state, true);
-      expect(ddoc.get('options')).toEqual({ partitioned: true });
-
-      const ddoc2 = getSaveDesignDoc(state, false);
-      expect(ddoc2.get('options')).toBeUndefined();
-    });
-  });
-});
diff --git a/app/addons/documents/index-editor/actions.js b/app/addons/documents/index-editor/actions.js
deleted file mode 100644
index a6cf7e7..0000000
--- a/app/addons/documents/index-editor/actions.js
+++ /dev/null
@@ -1,331 +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.
-
-import FauxtonAPI from '../../../core/api';
-import Documents from '../resources';
-import ActionTypes from './actiontypes';
-import SidebarActions from '../sidebar/actions';
-
-const selectReduceChanged = (reduceOption) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SELECT_REDUCE_CHANGE,
-    reduceSelectedOption: reduceOption
-  });
-};
-
-const changeViewName = (name) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_NAME_CHANGE,
-    name: name
-  });
-};
-
-const editIndex = (options) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.EDIT_INDEX,
-    options: options
-  });
-};
-
-const dispatchClearIndex = () => {
-  FauxtonAPI.reduxDispatch({ type: ActionTypes.CLEAR_INDEX });
-};
-
-const dispatchFetchDesignDocsBeforeEdit = (options) => {
-  options.designDocs.fetch({reset: true}).then(() => {
-    editIndex(options)(FauxtonAPI.reduxDispatch);
-  }, xhr => {
-    let errorMsg = 'Error';
-    if (xhr.responseJSON && xhr.responseJSON.error === 'not_found') {
-      const databaseName = options.designDocs.database.safeID();
-      errorMsg = `The ${databaseName} database does not exist`;
-      FauxtonAPI.navigate('/', {trigger: true});
-    }
-    FauxtonAPI.addNotification({
-      msg: errorMsg,
-      type: "error",
-      clear:  true
-    });
-  });
-};
-
-const shouldRemoveDdocView = (viewInfo) => {
-  return !viewInfo.isNewView &&
-          viewInfo.originalDesignDocName === viewInfo.designDocId &&
-          viewInfo.originalViewName !== viewInfo.viewName;
-};
-
-const saveView = (viewInfo, navigateToURL) => (dispatch) => {
-  const designDoc = viewInfo.designDoc;
-  designDoc.setDdocView(viewInfo.viewName, viewInfo.map, viewInfo.reduce);
-
-  FauxtonAPI.addNotification({
-    msg: 'Saving View...',
-    type: 'info',
-    clear: true
-  });
-
-  // if the view name just changed and it's in the SAME design doc, remove the old one before saving the doc
-  if (shouldRemoveDdocView(viewInfo)) {
-    designDoc.removeDdocView(viewInfo.originalViewName);
-  }
-
-  designDoc.save().then(function () {
-    FauxtonAPI.addNotification({
-      msg: 'View Saved.',
-      type: 'success',
-      clear: true
-    });
-
-    // if the user just saved an existing view to a different design doc, remove the view
-    // from the old design doc and delete if it's empty
-    if (!viewInfo.isNewView && viewInfo.originalDesignDocName !== viewInfo.designDocId) {
-      const oldDesignDoc = findDesignDoc(viewInfo.designDocs, viewInfo.originalDesignDocName);
-      safeDeleteIndex(oldDesignDoc, viewInfo.designDocs, 'views', viewInfo.originalViewName, {
-        onSuccess: function () {
-          SidebarActions.dispatchUpdateDesignDocs(viewInfo.designDocs);
-        }
-      });
-    }
-
-    if (viewInfo.designDocId === 'new-doc') {
-      addDesignDoc(designDoc);
-    }
-    SidebarActions.dispatchUpdateDesignDocs(viewInfo.designDocs);
-    dispatch({ type: ActionTypes.VIEW_SAVED });
-    FauxtonAPI.navigate(navigateToURL, { trigger: true });
-  }, (xhr) => {
-    FauxtonAPI.addNotification({
-      msg: 'Save failed. ' + (xhr.responseJSON ? `Reason: ${xhr.responseJSON.reason}` : ''),
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const addDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_ADD_DESIGN_DOC,
-    designDoc: designDoc.toJSON()
-  });
-};
-
-const deleteView = (options) => {
-
-  function onSuccess () {
-
-    // if the user was on the index that was just deleted, redirect them back to all docs
-    if (options.isOnIndex) {
-      const url = FauxtonAPI.urls('allDocs', 'app', options.database.safeID());
-      FauxtonAPI.navigate(url);
-    }
-
-    SidebarActions.dispatchUpdateDesignDocs(options.designDocs);
-
-    FauxtonAPI.addNotification({
-      msg: 'The <code>' + _.escape(options.indexName) + '</code> view has been deleted.',
-      type: 'info',
-      escape: false,
-      clear: true
-    });
-    SidebarActions.dispatchHideDeleteIndexModal();
-  }
-
-  return safeDeleteIndex(options.designDoc, options.designDocs, 'views', options.indexName, { onSuccess: onSuccess });
-};
-
-const cloneView = (params) => {
-  const targetDesignDoc = getDesignDoc(params.designDocs, params.targetDesignDocName, params.newDesignDocName,
-    params.newDesignDocPartitioned, params.database, params.isDbPartitioned);
-  let indexes = targetDesignDoc.get('views');
-  if (indexes && _.has(indexes, params.newIndexName)) {
-    FauxtonAPI.addNotification({
-      msg: 'That index name is already used in this design doc. Please enter a new name.',
-      type: 'error',
-      clear: true
-    });
-    return;
-  }
-  if (!indexes) {
-    indexes = {};
-  }
-  const sourceDesignDoc = findDesignDoc(params.designDocs, '_design/' + params.sourceDesignDocName);
-  const sourceDesignDocJSON = sourceDesignDoc.toJSON();
-
-  // this sets whatever content is in the source index into the target design doc under the new index name
-  indexes[params.newIndexName] = sourceDesignDocJSON.views[params.sourceIndexName];
-  targetDesignDoc.set({ views: indexes });
-
-  targetDesignDoc.save().then(() => {
-    params.onComplete();
-    FauxtonAPI.addNotification({
-      msg: 'The index has been cloned.',
-      type: 'success',
-      clear: true
-    });
-    SidebarActions.dispatchUpdateDesignDocs(params.designDocs);
-  }, (xhr) => {
-    params.onComplete();
-    const responseText = JSON.parse(xhr.responseText).reason;
-    FauxtonAPI.addNotification({
-      msg: 'Clone failed: ' + responseText,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const gotoEditViewPage = (databaseName, partitionKey, designDocName, indexName) => {
-  FauxtonAPI.navigate('#' + FauxtonAPI.urls('view', 'edit', encodeURIComponent(databaseName),
-    (partitionKey ? encodeURIComponent(partitionKey) : ''),
-    encodeURIComponent(designDocName), encodeURIComponent(indexName)));
-};
-
-const updateMapCode = (code) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_UPDATE_MAP_CODE,
-    code: code
-  });
-};
-
-const updateReduceCode = (code) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_UPDATE_REDUCE_CODE,
-    code: code
-  });
-};
-
-const selectDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_CHANGE,
-    options: {
-      value: designDoc
-    }
-  });
-};
-
-const updateNewDesignDocName = (designDocName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_NEW_NAME_UPDATED,
-    options: {
-      value: designDocName
-    }
-  });
-};
-
-const updateNewDesignDocPartitioned = (isPartitioned) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_NEW_PARTITIONED_UPDATED,
-    options: {
-      value: isPartitioned
-    }
-  });
-};
-
-// safely deletes an index of any type. It only deletes the actual design doc if there are no
-// other indexes of any type left in the doc
-const safeDeleteIndex = (designDoc, designDocs, indexPropName, indexName, options) => {
-  const opts = _.extend({
-    onSuccess: function () { },
-    onError: function (xhr) {
-      const responseText = JSON.parse(xhr.responseText).reason;
-      FauxtonAPI.addNotification({
-        msg: 'Delete failed: ' + responseText,
-        type: 'error',
-        clear: true
-      });
-    }
-  }, options);
-
-  const indexes = designDoc.get(indexPropName) || {};
-  delete indexes[indexName];
-  const newIndexes = {};
-  newIndexes[indexPropName] = indexes;
-  designDoc.set(newIndexes);
-
-  // we either save the design doc with the now-removed index, or we remove it altogether if there are no indexes
-  // of any type left in the design doc
-  const indexTypePropNames = FauxtonAPI.getIndexTypePropNames();
-  const hasRemainingIndex = _.some(indexTypePropNames, function (propName) {
-    return designDoc.get(propName) && _.keys(designDoc.get(propName)).length > 0;
-  });
-
-  let promise;
-  let deleteDesignDoc = false;
-  if (hasRemainingIndex) {
-    promise = designDoc.save();
-  } else {
-    promise = designDoc.destroy();
-    deleteDesignDoc = true;
-  }
-  return promise.then(function () {
-    if (deleteDesignDoc) {
-      designDocs.remove(designDoc.id);
-    }
-    opts.onSuccess();
-  }, opts.onError);
-};
-
-
-
-// ---- helpers ----
-
-const findDesignDoc = (designDocs, designDocName) => {
-  return designDocs.find(function (doc) {
-    return doc.id === designDocName;
-  }).dDocModel();
-};
-
-const getDesignDoc = (designDocs, targetDesignDocName, newDesignDocName, newDesignDocPartitioned, database, isDbPartitioned) => {
-  if (targetDesignDocName === 'new-doc') {
-    const doc = {
-      "_id": "_design/" + newDesignDocName,
-      "views": {},
-      "language": "javascript"
-    };
-    const dDoc = new Documents.Doc(doc, { database: database });
-    if (isDbPartitioned) {
-      dDoc.setDDocPartitionedOption(newDesignDocPartitioned);
-    }
-    return dDoc;
-  }
-
-  const foundDoc = designDocs.find(function (ddoc) {
-    return ddoc.id === targetDesignDocName;
-  });
-  return (!foundDoc) ? null : foundDoc.dDocModel();
-};
-
-
-export default {
-  helpers: {
-    findDesignDoc,
-    getDesignDoc
-  },
-  safeDeleteIndex,
-  selectReduceChanged,
-  changeViewName,
-  editIndex,
-  dispatchClearIndex,
-  dispatchFetchDesignDocsBeforeEdit,
-  shouldRemoveDdocView,
-  saveView,
-  addDesignDoc,
-  deleteView,
-  cloneView,
-  gotoEditViewPage,
-  updateMapCode,
-  updateReduceCode,
-  selectDesignDoc,
-  updateNewDesignDocName,
-  updateNewDesignDocPartitioned
-};
diff --git a/app/addons/documents/index-editor/actiontypes.js b/app/addons/documents/index-editor/actiontypes.js
deleted file mode 100644
index ef746df..0000000
--- a/app/addons/documents/index-editor/actiontypes.js
+++ /dev/null
@@ -1,28 +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.
-
-export default {
-  CLEAR_INDEX: 'CLEAR_INDEX',
-  EDIT_INDEX: 'EDIT_INDEX',
-  EDIT_NEW_INDEX: 'EDIT_NEW_INDEX',
-  SELECT_REDUCE_CHANGE: 'SELECT_REDUCE_CHANGE',
-  VIEW_SAVED: 'VIEW_SAVED',
-  VIEW_CREATED: 'VIEW_CREATED',
-  DESIGN_DOC_CHANGE: 'DESIGN_DOC_CHANGE',
-  DESIGN_DOC_NEW_NAME_UPDATED: 'DESIGN_DOC_NEW_NAME_UPDATED',
-  DESIGN_DOC_NEW_PARTITIONED_UPDATED: 'DESIGN_DOC_NEW_PARTITIONED_UPDATED',
-  NEW_DESIGN_DOC: 'NEW_DESIGN_DOC',
-  VIEW_NAME_CHANGE: 'VIEW_NAME_CHANGE',
-  VIEW_ADD_DESIGN_DOC: 'VIEW_ADD_DESIGN_DOC',
-  VIEW_UPDATE_MAP_CODE: 'VIEW_UPDATE_MAP_CODE',
-  VIEW_UPDATE_REDUCE_CODE: 'VIEW_UPDATE_REDUCE_CODE'
-};
diff --git a/app/addons/documents/index-editor/components.js b/app/addons/documents/index-editor/components.js
deleted file mode 100644
index 3cf69bd..0000000
--- a/app/addons/documents/index-editor/components.js
+++ /dev/null
@@ -1,27 +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.
-
-import ReactComponents from '../../components/react-components';
-import DesignDocSelector from './components/DesignDocSelector';
-import IndexEditor from './components/IndexEditor';
-import IndexEditorContainer from './components/IndexEditorContainer';
-import ReduceEditor from './components/ReduceEditor';
-
-const StyledSelect = ReactComponents.StyledSelect;
-
-export default {
-  IndexEditorContainer,
-  IndexEditor,
-  ReduceEditor,
-  DesignDocSelector,
-  StyledSelect
-};
diff --git a/app/addons/documents/index-editor/components/DesignDocSelector.js b/app/addons/documents/index-editor/components/DesignDocSelector.js
deleted file mode 100644
index a524c32..0000000
--- a/app/addons/documents/index-editor/components/DesignDocSelector.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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-
-const { StyledSelect } = ReactComponents;
-
-export default class DesignDocSelector extends Component {
-
-  constructor(props) {
-    super(props);
-    this.onTogglePartitioned = this.onTogglePartitioned.bind(this);
-  }
-
-  validate() {
-    if (this.props.selectedDesignDocName === 'new-doc' && this.props.newDesignDocName === '') {
-      FauxtonAPI.addNotification({
-        msg: 'Please name your design doc.',
-        type: 'error'
-      });
-      this.newDesignDocInput.focus();
-      return false;
-    }
-    return true;
-  }
-
-  getDocList() {
-    if (this.props.designDocList) {
-      return this.props.designDocList.map ((designDoc) => {
-        return (<option key={designDoc} value={designDoc}>{designDoc}</option>);
-      });
-    }
-    return [];
-
-  }
-
-  selectDesignDoc(e) {
-    this.props.onSelectDesignDoc(e.target.value);
-  }
-
-  updateDesignDocName(e) {
-    this.props.onChangeNewDesignDocName(e.target.value);
-  }
-
-  getNewDDocField() {
-    if (this.props.selectedDesignDocName !== 'new-doc') {
-      return;
-    }
-    return (
-      <div id="new-ddoc-section" className="span5">
-        <label className="control-label" htmlFor="new-ddoc">_design/</label>
-        <div className="controls">
-          <input type="text" id="new-ddoc" placeholder="newDesignDoc"
-            ref={(el) => { this.newDesignDocInput = el; }}
-            onChange={this.updateDesignDocName.bind(this)} />
-        </div>
-      </div>
-    );
-  }
-
-  getDocLink() {
-    if (!this.props.docLink) {
-      return null;
-    }
-    return (
-      <a className="help-link" data-bypass="true" href={this.props.docLink} target="_blank" rel="noopener noreferrer">
-        <i className="icon-question-sign" />
-      </a>
-    );
-  }
-
-  onTogglePartitioned() {
-    this.props.onChangeNewDesignDocPartitioned(!this.props.newDesignDocPartitioned);
-  }
-
-  getPartitionedCheckbox() {
-    if (!this.props.isDbPartitioned) {
-      return null;
-    }
-    const isExistingDDoc = this.props.selectedDesignDocName !== 'new-doc';
-    const checked = isExistingDDoc ?
-      this.props.selectedDesignDocPartitioned :
-      this.props.newDesignDocPartitioned;
-    const labelClass = isExistingDDoc ? 'check--disabled' : '';
-    const inputTitle = isExistingDDoc ?
-      (this.props.selectedDesignDocPartitioned ? 'Design document is partitioned' : 'Design document is not partitioned') :
-      (this.props.newDesignDocPartitioned ? 'New document will be partitioned' : 'New document will not be partitioned');
-    return (
-      <div className="ddoc-selector-partitioned">
-        <label className={labelClass} title={inputTitle}>
-          <input
-            id="js-ddoc-selector-partitioned"
-            type="checkbox"
-            title={inputTitle}
-            checked={checked}
-            onChange={this.onTogglePartitioned}
-            style={{margin: '0px 10px 0px 0px'}}
-            disabled={isExistingDDoc}/>
-          Partitioned
-        </label>
-      </div>
-    );
-  }
-
-  render() {
-    const selectContent =
-      <optgroup label="Select a document">
-        <option value="new-doc">New document</option>
-        {this.getDocList()}
-      </optgroup>;
-
-    return (
-      <div className="design-doc-group control-group">
-        <div className="span3">
-          <label htmlFor="ddoc">{this.props.designDocLabel}
-            {this.getDocLink()}
-          </label>
-          <StyledSelect
-            selectChange={this.selectDesignDoc.bind(this)}
-            selectValue={this.props.selectedDesignDocName}
-            selectId={"faux__edit-view__design-doc"}
-            selectContent={selectContent}
-          />
-        </div>
-        {this.getNewDDocField()}
-        {this.getPartitionedCheckbox()}
-      </div>
-    );
-  }
-}
-
-DesignDocSelector.defaultProps = {
-  designDocLabel: 'Design Document',
-  selectedDesignDocName: '',
-  newDesignDocName: ''
-};
-
-DesignDocSelector.propTypes = {
-  designDocList: PropTypes.array.isRequired,
-  onSelectDesignDoc: PropTypes.func.isRequired,
-  onChangeNewDesignDocName: PropTypes.func.isRequired,
-  selectedDesignDocName: PropTypes.string.isRequired,
-  selectedDesignDocPartitioned: PropTypes.bool.isRequired,
-  newDesignDocName: PropTypes.string.isRequired,
-  newDesignDocPartitioned: PropTypes.bool.isRequired,
-  designDocLabel: PropTypes.string,
-  docURL: PropTypes.string
-};
diff --git a/app/addons/documents/index-editor/components/IndexEditor.js b/app/addons/documents/index-editor/components/IndexEditor.js
deleted file mode 100644
index b2a14bf..0000000
--- a/app/addons/documents/index-editor/components/IndexEditor.js
+++ /dev/null
@@ -1,202 +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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import app from '../../../../app';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-import DesignDocSelector from './DesignDocSelector';
-import ReduceEditor from './ReduceEditor';
-
-const getDocUrl = app.helpers.getDocUrl;
-const {CodeEditorPanel, ConfirmButton, LoadLines} = ReactComponents;
-
-export default class IndexEditor extends Component {
-
-  constructor(props) {
-    super(props);
-    this.saveView = this.saveView.bind(this);
-    this.viewChange = this.viewChange.bind(this);
-    this.updateMapCode = this.updateMapCode.bind(this);
-  }
-
-  // the code editor is a standalone component, so if the user goes from one edit view page to another, we need to
-  // force an update of the editor panel
-  componentDidUpdate(prevProps) {
-    if (this.props.map !== prevProps.map && this.mapEditor) {
-      this.mapEditor.update();
-    }
-  }
-
-  isPartitionedView() {
-    if (this.props.designDocId === 'new-doc') {
-      return this.props.newDesignDocPartitioned;
-    }
-    return this.props.designDocPartitioned;
-  }
-
-  isCustomReduceSupported() {
-    if (this.props.isDbPartitioned && this.props.reduce && !this.props.reduce.startsWith('_')) {
-      const isDDocPartitioned = this.props.designDocId === 'new-doc' ? this.props.newDesignDocPartitioned : this.props.designDocPartitioned;
-      return isDDocPartitioned ? false : true;
-    }
-    return true;
-  }
-
-  saveView(el) {
-    el.preventDefault();
-
-    if (!this.designDocSelector.validate()) {
-      return;
-    }
-
-    if (!this.isCustomReduceSupported()) {
-      FauxtonAPI.addNotification({
-        msg: 'Partitioned views do not support custom reduce functions.',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-
-    const encodedPartKey = this.isPartitionedView() && this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const url = FauxtonAPI.urls('view', 'showView', this.props.database.safeID(), encodedPartKey,
-      this.props.saveDesignDoc.safeID(), encodeURIComponent(this.props.viewName));
-    this.props.saveView({
-      database: this.props.database,
-      isNewView: this.props.isNewView,
-      viewName: this.props.viewName,
-      designDoc: this.props.saveDesignDoc,
-      designDocId: this.props.designDocId,
-      isNewDesignDoc: this.props.isNewDesignDoc,
-      originalViewName: this.props.originalViewName,
-      originalDesignDocName: this.props.originalDesignDocName,
-      map: this.mapEditor.getValue(),
-      reduce: this.reduceEditor.getReduceValue(),
-      designDocs: this.props.designDocs
-    }, url);
-  }
-
-  viewChange(el) {
-    this.props.changeViewName(el.target.value);
-  }
-
-  updateMapCode(code) {
-    this.props.updateMapCode(code);
-  }
-
-  getCancelLink() {
-    const encodedDatabase = encodeURIComponent(this.props.database.id);
-    const encodedPartitionKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    if (this.props.designDocId === 'new-doc' || this.props.isNewView) {
-      return '#' + FauxtonAPI.urls('allDocs', 'app', encodedDatabase, encodedPartitionKey);
-    }
-    const encodedDDoc = this.props.designDocId.startsWith('_design/') ?
-      '_design/' + encodeURIComponent(this.props.designDocId.substring(8)) :
-      encodeURIComponent(this.props.designDocId);
-    const encodedView = encodeURIComponent(this.props.viewName);
-    return '#' + FauxtonAPI.urls('view', 'showView', encodedDatabase, encodedPartitionKey, encodedDDoc, encodedView);
-  }
-
-  render() {
-    if (this.props.isLoading) {
-      return (
-        <div className="define-view">
-          <LoadLines />
-        </div>
-      );
-    }
-
-    const pageHeader = (this.props.isNewView) ? 'New View' : 'Edit View';
-    const btnLabel = (this.props.isNewView) ? 'Create Document and then Build Index' : 'Save Document and then Build Index';
-    return (
-      <div className="define-view" >
-        <form className="form-horizontal view-query-save" onSubmit={this.saveView}>
-          <h3 className="simple-header">{pageHeader}</h3>
-
-          <div className="new-ddoc-section">
-            <DesignDocSelector
-              ref={(el) => { this.designDocSelector = el; }}
-              designDocList={this.props.designDocList}
-              isDbPartitioned={this.props.isDbPartitioned}
-              selectedDesignDocName={this.props.designDocId}
-              selectedDesignDocPartitioned={this.props.designDocPartitioned}
-              newDesignDocName={this.props.newDesignDocName}
-              newDesignDocPartitioned={this.props.newDesignDocPartitioned}
-              onSelectDesignDoc={this.props.selectDesignDoc}
-              onChangeNewDesignDocName={this.props.updateNewDesignDocName}
-              onChangeNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned}
-              docLink={getDocUrl('DESIGN_DOCS')} />
-          </div>
-
-          <div className="control-group">
-            <label htmlFor="index-name">
-              <span>Index name</span>
-              <a
-                className="help-link"
-                data-bypass="true"
-                href={getDocUrl('VIEW_FUNCS')}
-                target="_blank"
-                rel="noopener noreferrer">
-                <i className="icon-question-sign"></i>
-              </a>
-            </label>
-            <input
-              type="text"
-              id="index-name"
-              value={this.props.viewName}
-              onChange={this.viewChange}
-              placeholder="Index name" />
-          </div>
-          <CodeEditorPanel
-            id={'map-function'}
-            ref={(el) => { this.mapEditor = el; }}
-            title={"Map function"}
-            docLink={getDocUrl('MAP_FUNCS')}
-            blur={this.updateMapCode}
-            allowZenMode={false}
-            defaultCode={this.props.map} />
-          <ReduceEditor
-            ref={(el) => { this.reduceEditor = el; }}
-            customReducerSupported={this.isCustomReduceSupported()}
-            {...this.props} />
-          <div className="padded-box">
-            <div className="control-group">
-              <ConfirmButton id="save-view" text={btnLabel} />
-              <a href={this.getCancelLink()} className="index-cancel-link">Cancel</a>
-            </div>
-          </div>
-        </form>
-      </div>
-    );
-  }
-}
-
-IndexEditor.propTypes = {
-  isLoading:PropTypes.bool.isRequired,
-  isNewView: PropTypes.bool.isRequired,
-  database: PropTypes.object.isRequired,
-  isDbPartitioned: PropTypes.bool.isRequired,
-  designDocId: PropTypes.string.isRequired,
-  newDesignDocName: PropTypes.string.isRequired,
-  viewName: PropTypes.string.isRequired,
-  isNewDesignDoc: PropTypes.bool.isRequired,
-  originalViewName: PropTypes.string,
-  originalDesignDocName: PropTypes.string,
-  designDocs: PropTypes.object,
-  saveDesignDoc: PropTypes.object,
-  partitionKey: PropTypes.string,
-  updateNewDesignDocName: PropTypes.func.isRequired,
-  changeViewName: PropTypes.func.isRequired,
-  updateMapCode: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-editor/components/IndexEditorContainer.js b/app/addons/documents/index-editor/components/IndexEditorContainer.js
deleted file mode 100644
index 2e7a136..0000000
--- a/app/addons/documents/index-editor/components/IndexEditorContainer.js
+++ /dev/null
@@ -1,88 +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.
-
-import { connect } from 'react-redux';
-import IndexEditor from './IndexEditor';
-import Actions from '../actions';
-import { getSaveDesignDoc, getDesignDocList, reduceSelectedOption, hasCustomReduce,
-  getSelectedDesignDocPartitioned } from '../reducers';
-
-const mapStateToProps = ({ indexEditor, databases }, ownProps) => {
-  const isSelectedDDocPartitioned = getSelectedDesignDocPartitioned(indexEditor, databases.isDbPartitioned);
-  return {
-    database: indexEditor.database,
-    isNewView: indexEditor.isNewView,
-    viewName: indexEditor.viewName,
-    designDocs: indexEditor.designDocs,
-    designDocList: getDesignDocList(indexEditor),
-    originalViewName: indexEditor.originalViewName,
-    originalDesignDocName: indexEditor.originalDesignDocName,
-    isNewDesignDoc: indexEditor.isNewDesignDoc,
-    designDocId: indexEditor.designDocId,
-    designDocPartitioned: isSelectedDDocPartitioned,
-    newDesignDocName: indexEditor.newDesignDocName,
-    newDesignDocPartitioned: indexEditor.newDesignDocPartitioned,
-    saveDesignDoc: getSaveDesignDoc(indexEditor, databases.isDbPartitioned),
-    map: indexEditor.view.map,
-    isLoading: indexEditor.isLoading,
-    reduce: indexEditor.view.reduce,
-    reduceOptions: indexEditor.reduceOptions,
-    reduceSelectedOption: reduceSelectedOption(indexEditor),
-    hasCustomReduce: hasCustomReduce(indexEditor),
-    hasReduce: !!indexEditor.view.reduce,
-    isDbPartitioned: databases.isDbPartitioned,
-    partitionKey: ownProps.partitionKey
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    saveView: (viewInfo, navigateToURL) => {
-      dispatch(Actions.saveView(viewInfo, navigateToURL));
-    },
-
-    changeViewName: (name) => {
-      dispatch(Actions.changeViewName(name));
-    },
-
-    updateMapCode: (code) => {
-      dispatch(Actions.updateMapCode(code));
-    },
-
-    selectDesignDoc: (designDoc) => {
-      dispatch(Actions.selectDesignDoc(designDoc));
-    },
-
-    updateNewDesignDocName: (designDocName) => {
-      dispatch(Actions.updateNewDesignDocName(designDocName));
-    },
-
-    updateNewDesignDocPartitioned: (isPartitioned) => {
-      dispatch(Actions.updateNewDesignDocPartitioned(isPartitioned));
-    },
-
-    updateReduceCode: (code) => {
-      dispatch(Actions.updateReduceCode(code));
-    },
-
-    selectReduceChanged: (reduceOption) => {
-      dispatch(Actions.selectReduceChanged(reduceOption));
-    }
-  };
-};
-
-const IndexEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(IndexEditor);
-
-export default IndexEditorContainer;
diff --git a/app/addons/documents/index-editor/components/ReduceEditor.js b/app/addons/documents/index-editor/components/ReduceEditor.js
deleted file mode 100644
index 2520576..0000000
--- a/app/addons/documents/index-editor/components/ReduceEditor.js
+++ /dev/null
@@ -1,118 +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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import app from '../../../../app';
-import ReactComponents from '../../../components/react-components';
-
-const getDocUrl = app.helpers.getDocUrl;
-const {CodeEditorPanel, StyledSelect} = ReactComponents;
-
-export default class ReduceEditor extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  getOptionsList() {
-    return this.props.reduceOptions.map((reduce, i) => {
-      return <option key={i} value={reduce}>{reduce}</option>;
-    });
-  }
-
-  getReduceValue() {
-    if (!this.props.hasReduce) {
-      return null;
-    }
-
-    if (!this.props.hasCustomReduce) {
-      return this.props.reduce;
-    }
-
-    return this.reduceEditor.getValue();
-  }
-
-  getEditor() {
-    return this.reduceEditor.getEditor();
-  }
-
-  updateReduceCode(code) {
-    this.props.updateReduceCode(code);
-  }
-
-  selectChange(event) {
-    this.props.selectReduceChanged(event.target.value);
-  }
-
-  render() {
-    const reduceOptions = this.getOptionsList();
-    let customReduceSection;
-
-    if (this.props.hasCustomReduce && this.props.customReducerSupported) {
-      customReduceSection = <CodeEditorPanel
-        ref={node => this.reduceEditor = node}
-        id='reduce-function'
-        title={'Custom Reduce function'}
-        defaultCode={this.props.reduce}
-        allowZenMode={false}
-        blur={this.updateReduceCode.bind(this)}
-      />;
-    } else if (!this.props.customReducerSupported) {
-      customReduceSection = (
-        <div className="reduce-editor-warning">
-          <label>Partitioned views do not support custom reduce functions.</label>
-        </div>
-      );
-    }
-
-    return (
-      <div>
-        <div className="control-group">
-          <label htmlFor="reduce-function-selector">
-            <span>Reduce (optional)</span>
-            <a
-              className="help-link"
-              data-bypass="true"
-              href={getDocUrl('REDUCE_FUNCS')}
-              target="_blank"
-              rel="noopener noreferrer"
-            >
-              <i className="icon-question-sign"></i>
-            </a>
-          </label>
-          <StyledSelect
-            selectContent={reduceOptions}
-            selectChange={this.selectChange.bind(this)}
-            selectId="reduce-function-selector"
-            selectValue={this.props.reduceSelectedOption} />
-        </div>
-        {customReduceSection}
-      </div>
-    );
-  }
-}
-
-ReduceEditor.defaultProps = {
-  customReducerSupported: true
-};
-
-ReduceEditor.propTypes = {
-  reduceOptions: PropTypes.array.isRequired,
-  hasReduce: PropTypes.bool.isRequired,
-  hasCustomReduce: PropTypes.bool.isRequired,
-  customReducerSupported: PropTypes.bool,
-  reduce: PropTypes.string,
-  reduceSelectedOption: PropTypes.string.isRequired,
-  updateReduceCode: PropTypes.func.isRequired,
-  selectReduceChanged: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-editor/reducers.js b/app/addons/documents/index-editor/reducers.js
deleted file mode 100644
index 51988f6..0000000
--- a/app/addons/documents/index-editor/reducers.js
+++ /dev/null
@@ -1,219 +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.
-
-import ActionTypes from './actiontypes';
-import Resources from '../resources';
-import Helpers from '../helpers';
-
-const defaultMap = 'function (doc) {\n  emit(doc._id, 1);\n}';
-const defaultReduce = 'function (keys, values, rereduce) {\n  if (rereduce) {\n    return sum(values);\n  } else {\n    return values.length;\n  }\n}';
-const builtInReducers = ['_sum', '_count', '_stats', '_approx_count_distinct'];
-const allReducers = builtInReducers.concat(['CUSTOM', 'NONE']);
-
-const initialState = {
-  designDocs: new Backbone.Collection(),
-  isLoading: true,
-  view: { reduce: '', map: defaultMap },
-  database: { id: '0' },
-  designDocId: '',
-  isNewDesignDoc: false,
-  newDesignDocName: '',
-  newDesignDocPartitioned: true,
-  isNewView: false,
-  viewName: '',
-  originalViewName: '',
-  originalDesignDocName: '',
-  reduceOptions: allReducers
-};
-
-function editIndex(state, options) {
-  const newState = {
-    ...state,
-    isLoading: false,
-    newDesignDocName: '',
-    isNewView: options.isNewView,
-    viewName: options.viewName || 'viewName',
-    isNewDesignDoc: options.isNewDesignDoc || false,
-    designDocs: options.designDocs,
-    designDocId: options.designDocId,
-    originalDesignDocName: options.designDocId,
-    database: options.database
-  };
-  newState.originalViewName = newState.viewName;
-  newState.view = getView(newState);
-  return newState;
-}
-
-function getView(state) {
-  if (state.isNewView || state.isNewDesignDoc) {
-    return { reduce: '', map: defaultMap };
-  }
-
-  const designDoc = state.designDocs.find(ddoc => {
-    return state.designDocId == ddoc.id;
-  }).dDocModel();
-  return designDoc.get('views')[state.viewName];
-}
-
-export function getSelectedDesignDocPartitioned(state, isDbPartitioned) {
-  const designDoc = state.designDocs.find(ddoc => {
-    return state.designDocId === ddoc.id;
-  });
-  if (designDoc) {
-    return Helpers.isDDocPartitioned(designDoc.get('doc'), isDbPartitioned);
-  }
-  return false;
-}
-
-export function reduceSelectedOption(state) {
-  if (!state.view.reduce) {
-    return 'NONE';
-  }
-  if (hasCustomReduce(state)) {
-    return 'CUSTOM';
-  }
-  return state.view.reduce;
-}
-
-export function hasCustomReduce(state) {
-  if (state.view.reduce) {
-    return !builtInReducers.includes(state.view.reduce);
-  }
-  return false;
-}
-
-export function getSaveDesignDoc(state, isDbPartitioned) {
-  if (state.designDocId === 'new-doc') {
-    const doc = {
-      _id: '_design/' + state.newDesignDocName,
-      views: {},
-      language: 'javascript'
-    };
-    const dDoc = new Resources.Doc(doc, { database: state.database });
-    if (isDbPartitioned) {
-      dDoc.setDDocPartitionedOption(state.newDesignDocPartitioned);
-    }
-    return dDoc;
-  }
-
-  if (!state.designDocs) {
-    return null;
-  }
-
-  const foundDoc = state.designDocs.find(ddoc => {
-    return ddoc.id === state.designDocId;
-  });
-
-  return foundDoc ? foundDoc.dDocModel() : null;
-}
-
-// returns a simple array of design doc IDs. Omits mango docs
-export function getDesignDocList(state) {
-  if (!state.designDocs) {
-    return [];
-  }
-  return state.designDocs.filter(doc => {
-    return !doc.isMangoDoc();
-  }).map(doc => {
-    return doc.id;
-  });
-}
-
-export default function indexEditor(state = initialState, action) {
-  const { options } = action;
-  switch (action.type) {
-
-    case ActionTypes.CLEAR_INDEX:
-      return {
-        ...initialState
-      };
-
-    case ActionTypes.EDIT_INDEX:
-      return editIndex(state, options);
-
-    case ActionTypes.EDIT_NEW_INDEX:
-      return editIndex(state, options);
-
-    case ActionTypes.VIEW_NAME_CHANGE:
-      return {
-        ...state,
-        viewName: action.name
-      };
-
-    case ActionTypes.SELECT_REDUCE_CHANGE:
-      let newReduce = action.reduceSelectedOption;
-      if (newReduce === 'NONE') {
-        newReduce = '';
-      }
-      if (newReduce === 'CUSTOM') {
-        newReduce = defaultReduce;
-      }
-      return {
-        ...state,
-        view: {
-          ...state.view,
-          reduce: newReduce
-        }
-      };
-
-    case ActionTypes.DESIGN_DOC_CHANGE:
-      return {
-        ...state,
-        designDocId: options.value
-      };
-
-    case ActionTypes.VIEW_SAVED:
-      return state;
-
-    case ActionTypes.VIEW_CREATED:
-      return state;
-
-    case ActionTypes.VIEW_ADD_DESIGN_DOC:
-      return {
-        ...state,
-        designDocId: action.designDoc._id
-      };
-
-    case ActionTypes.VIEW_UPDATE_MAP_CODE:
-      return {
-        ...state,
-        view: {
-          ...state.view,
-          map: action.code
-        }
-      };
-
-    case ActionTypes.VIEW_UPDATE_REDUCE_CODE:
-      return {
-        ...state,
-        view: {
-          ...state.view,
-          reduce: action.code
-        }
-      };
-
-    case ActionTypes.DESIGN_DOC_NEW_NAME_UPDATED:
-      return {
-        ...state,
-        newDesignDocName: options.value
-      };
-
-    case ActionTypes.DESIGN_DOC_NEW_PARTITIONED_UPDATED:
-      return {
-        ...state,
-        newDesignDocPartitioned: options.value
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/index-results/actions/base.js b/app/addons/documents/index-results/actions/base.js
deleted file mode 100644
index c39f1f4..0000000
--- a/app/addons/documents/index-results/actions/base.js
+++ /dev/null
@@ -1,125 +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.
-
-import ActionTypes from '../actiontypes';
-import { getDocId, getDocRev, isJSONDocBulkDeletable } from "../helpers/shared-helpers";
-
-export const partitionParamNotSupported = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED
-  };
-};
-
-export const partitionParamIsMandatory = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY
-  };
-};
-
-export const nowLoading = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING
-  };
-};
-
-export const resetState = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE
-  };
-};
-
-export const newResultsAvailable = (docs, params, canShowNext, docType, executionStats, warning) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-    docs: docs,
-    params: params,
-    canShowNext: canShowNext,
-    docType: docType,
-    executionStats: executionStats,
-    warning: warning
-  };
-};
-
-export const newSelectedDocs = (selectedDocs = []) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-    selectedDocs: selectedDocs
-  };
-};
-
-export const selectDoc = (doc, selectedDocs) => {
-  // locate the doc in the selected docs array if it exists
-  const indexInSelectedDocs = selectedDocs.findIndex((selectedDoc) => {
-    return selectedDoc._id === doc._id;
-  });
-
-  // if the doc exists in the selectedDocs array, remove it. This occurs
-  // when a user has deselected or unchecked a doc from the list of results.
-  if (indexInSelectedDocs > -1) {
-    selectedDocs.splice(indexInSelectedDocs, 1);
-
-  // otherwise, add the _deleted: true flag and push it on to the array.
-  } else {
-    doc._deleted = true;
-    selectedDocs.push(doc);
-  }
-
-  return newSelectedDocs(selectedDocs);
-};
-
-export const bulkCheckOrUncheck = (docs, selectedDocs, allDocumentsSelected, docType) => {
-  docs.forEach((doc) => {
-    if (!isJSONDocBulkDeletable(doc, docType)) {
-      return;
-    }
-    // find the index of the doc in the selectedDocs array
-    const indexInSelectedDocs = selectedDocs.findIndex((selectedDoc) => {
-      return getDocId(doc, docType) === selectedDoc._id;
-    });
-
-    // remove the doc if we know all the documents are currently selected
-    if (allDocumentsSelected) {
-      selectedDocs.splice(indexInSelectedDocs, 1);
-    // otherwise, add the doc if it doesn't exist in the selectedDocs array
-    } else if (indexInSelectedDocs === -1) {
-      selectedDocs.push({
-        _id: getDocId(doc, docType),
-        _rev: getDocRev(doc, docType),
-        _deleted: true
-      });
-    }
-  });
-
-  return newSelectedDocs(selectedDocs);
-};
-
-export const changeLayout = (newLayout) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT,
-    layout: newLayout
-  };
-};
-
-export const changeTableHeaderAttribute = (newField, selectedFields) => {
-  selectedFields[newField.index] = newField.newSelectedRow;
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE,
-    selectedFieldsTableView: selectedFields
-  };
-};
-
-export const updateResultsStyle = (newStyle) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_SET_STYLE,
-    resultsStyle: newStyle
-  };
-};
diff --git a/app/addons/documents/index-results/actions/fetch.js b/app/addons/documents/index-results/actions/fetch.js
deleted file mode 100644
index 148ee43..0000000
--- a/app/addons/documents/index-results/actions/fetch.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.
-
-import FauxtonAPI from '../../../../core/api';
-import SidebarActions from '../../sidebar/actions';
-import Constants from '../../constants';
-import { errorReason } from '../helpers/shared-helpers';
-import * as IndexResultsAPI from '../api';
-import { nowLoading, newResultsAvailable, newSelectedDocs,
-  changeLayout, resetState, partitionParamNotSupported, partitionParamIsMandatory } from './base';
-
-const maxDocLimit = 10000;
-
-// This is a helper function to determine what params need to be sent to couch based
-// on what the user entered (i.e. queryOptionsParams) and what fauxton is using to
-// emulate pagination (i.e. fetchParams).
-export const mergeParams = (fetchParams, queryOptionsParams) => {
-  const params = {};
-
-  // determine the final "index" or "position" in the total result list based on the
-  // user's skip and limit inputs.  If queryOptionsParams.limit is empty,
-  // finalDocPosition will be NaN.  That's ok.
-  const finalDocPosition = (queryOptionsParams.skip || 0) + queryOptionsParams.limit;
-
-  // The skip value sent to couch will be the max of our current pagination skip
-  // (i.e. fetchParams.skip) and the user's original skip input (i.e. queryOptionsParams.skip).
-  // The limit will continue to be our pagination limit.
-  params.skip = Math.max(fetchParams.skip, queryOptionsParams.skip || 0);
-  params.limit = fetchParams.limit;
-  if (fetchParams.conflicts) {
-    params.conflicts = true;
-  }
-
-  // Determine the total number of documents remaining based on the user's skip and
-  // limit inputs.  Again, note that this will be NaN if queryOptionsParams.limit is
-  // empty.  That's ok.
-  const totalDocsRemaining = finalDocPosition - params.skip;
-
-  // return the merged params to send to couch and the num docs remaining.
-  return {
-    params: Object.assign({}, queryOptionsParams, params),
-    totalDocsRemaining: totalDocsRemaining
-  };
-};
-
-export const removeOverflowDocsAndCalculateHasNext = (docs, totalDocsRemaining, fetchLimit) => {
-  // Now is the time to determine if we have another page of results
-  // after this set of documents.  We also want to manipulate the array
-  // of docs because we always search with a limit larger than the desired
-  // number of results.  This is necessaary to emulate pagination.
-  let canShowNext = false;
-  if (totalDocsRemaining && docs.length > totalDocsRemaining) {
-    // We know the user manually entered a limit and we've reached the
-    // end of their desired results.  We need to remove any extra results
-    // that were returned because of our pagination emulation logic.
-    docs.splice(totalDocsRemaining);
-  } else if (docs.length === fetchLimit) {
-    // The number of docs returned is equal to our params.limit, which is
-    // one more than our perPage size.  We know that there is another
-    // page of results after this.
-    docs.splice(fetchLimit - 1);
-    canShowNext = true;
-  }
-
-  return {
-    finalDocList: docs,
-    canShowNext
-  };
-};
-
-// All the business logic for fetching docs from couch.
-// Arguments:
-// - queryDocs -> a function that fetches the docs. Accepts fetch params and returns a Promise of {docs[], docType}.
-// - fetchParams -> the internal params fauxton uses to emulate pagination
-// - queryOptionsParams -> manual query params entered by user
-export const fetchDocs = (queryDocs, fetchParams, queryOptionsParams) => {
-  const { params, totalDocsRemaining } = mergeParams(fetchParams, queryOptionsParams);
-  params.limit = Math.min(params.limit, maxDocLimit);
-
-  return (dispatch) => {
-    // first, tell app state that we're loading
-    dispatch(nowLoading());
-
-    // now fetch the results
-    return queryDocs(params).then(({ docs, docType, executionStats, warning, layout }) => {
-      const {
-        finalDocList,
-        canShowNext
-      } = removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, params.limit);
-
-      if (layout) {
-        dispatch(changeLayout(layout));
-      }
-      // dispatch that we're all done
-      dispatch(newResultsAvailable(finalDocList, params, canShowNext, docType, executionStats, warning));
-    }).catch((error) => {
-      if (error && error.message.includes('`partition` parameter is not supported')) {
-        dispatch(partitionParamNotSupported());
-      } else if (error && error.message.includes('`partition` parameter is mandatory')) {
-        dispatch(partitionParamIsMandatory());
-      } else {
-        FauxtonAPI.addNotification({
-          msg: 'Error running query. ' + errorReason(error),
-          type: 'error',
-          clear: true
-        });
-      }
-      dispatch(resetState());
-    });
-  };
-};
-
-
-export const deleteErrorMessage = (ids) => {
-  let msg = 'Failed to delete your document!';
-
-  if (ids) {
-    msg = 'Failed to delete: ' + ids.join(', ');
-  }
-
-  FauxtonAPI.addNotification({
-    msg: msg,
-    type: 'error',
-    clear:  true
-  });
-};
-
-export const validateBulkDelete = (docs) => {
-  const itemsLength = docs.length;
-
-  const msg = (itemsLength === 1) ? 'Are you sure you want to delete this doc?' :
-    'Are you sure you want to delete these ' + itemsLength + ' docs?';
-
-  if (itemsLength === 0) {
-    window.alert('Please select the document rows you want to delete.');
-    return false;
-  }
-
-  if (!window.confirm(msg)) {
-    return false;
-  }
-
-  return true;
-};
-
-export const bulkDeleteDocs = (databaseName, queryDocs, docs, designDocs, fetchParams, queryOptionsParams, docType) => {
-  if (!validateBulkDelete(docs)) {
-    return false;
-  }
-
-  return (dispatch) => {
-    let postPromise, payload;
-    if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-      payload = { docids: docs.map(doc => doc._id) };
-      postPromise = IndexResultsAPI.postToIndexBulkDelete(databaseName, payload);
-    } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-        || docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-      payload = { docs: docs };
-      postPromise = IndexResultsAPI.postToBulkDocs(databaseName, payload);
-    } else {
-      throw new Error('Invalid document type: ' + docType);
-    }
-    return postPromise.then((res) => {
-      if (res.error) {
-        deleteErrorMessage();
-        return;
-      }
-      processBulkDeleteResponse(res, docs, designDocs, docType);
-      dispatch(newSelectedDocs());
-      dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-    });
-  };
-};
-
-export const processBulkDeleteResponse = (res, deletedDocs, designDocs, docType) => {
-  FauxtonAPI.addNotification({
-    msg: 'Successfully deleted your docs',
-    clear:  true
-  });
-
-  let failedDocs = [];
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    if (res.fail) {
-      failedDocs = res.fail.map(doc => doc.id);
-    }
-  } else {
-    failedDocs = res.filter(doc => !!doc.error).map(doc => doc.id);
-  }
-
-  const hasDesignDocs = !!deletedDocs.map(d => d._id).find((_id) => /_design/.test(_id));
-
-  if (failedDocs.length > 0) {
-    deleteErrorMessage(failedDocs);
-  }
-
-  if (designDocs && hasDesignDocs) {
-    SidebarActions.dispatchUpdateDesignDocs(designDocs);
-  }
-};
diff --git a/app/addons/documents/index-results/actions/pagination.js b/app/addons/documents/index-results/actions/pagination.js
deleted file mode 100644
index 8843e20..0000000
--- a/app/addons/documents/index-results/actions/pagination.js
+++ /dev/null
@@ -1,88 +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.
-
-import FauxtonAPI from '../../../../core/api';
-import { fetchDocs } from './fetch';
-import ActionTypes from '../actiontypes';
-
-export const toggleShowAllColumns = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS
-  };
-};
-
-export const setPerPage = (amount) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE,
-    perPage: amount
-  };
-};
-
-export const resetFetchParamsBeforePerPageChange = (fetchParams, queryOptionsParams, amount) => {
-  return Object.assign({}, fetchParams, {
-    limit: amount + 1,
-    skip: queryOptionsParams.skip || 0
-  });
-};
-
-export const updatePerPageResults = (queryDocs, fetchParams, queryOptionsParams, amount) => {
-  // Set the query limit to the perPage + 1 so we know if there is
-  // a next page.  We also need to reset to the beginning of all
-  // possible pages since our logic to paginate backwards can't handle
-  // changing perPage amounts.
-  fetchParams = resetFetchParamsBeforePerPageChange(fetchParams, queryOptionsParams, amount);
-
-  return (dispatch) => {
-    dispatch(setPerPage(amount));
-    dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-  };
-};
-
-export const incrementSkipForPageNext = (fetchParams, perPage) => {
-  return Object.assign({}, fetchParams, {
-    skip: fetchParams.skip + perPage
-  });
-};
-
-export const paginateNext = (queryDocs, fetchParams, queryOptionsParams, perPage) => {
-  // add the perPage to the previous skip.
-  fetchParams = incrementSkipForPageNext(fetchParams, perPage);
-
-  return (dispatch) => {
-    dispatch({
-      type: ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT
-    });
-    dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-  };
-};
-
-export const decrementSkipForPagePrevious = (fetchParams, perPage) => {
-  return Object.assign({}, fetchParams, {
-    skip: Math.max(fetchParams.skip - perPage, 0)
-  });
-};
-
-export const paginatePrevious = (queryDocs, fetchParams, queryOptionsParams, perPage) => {
-  // subtract the perPage to the previous skip.
-  fetchParams = decrementSkipForPagePrevious(fetchParams, perPage);
-
-  return (dispatch) => {
-    dispatch({
-      type: ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS
-    });
-    dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-  };
-};
-
-export const resetPagination = (perPage = FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE) => {
-  return setPerPage(perPage);
-};
diff --git a/app/addons/documents/index-results/actions/queryoptions.js b/app/addons/documents/index-results/actions/queryoptions.js
deleted file mode 100644
index fc3c60a..0000000
--- a/app/addons/documents/index-results/actions/queryoptions.js
+++ /dev/null
@@ -1,141 +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.
-
-import ActionTypes from '../actiontypes';
-import { fetchDocs } from './fetch';
-
-const updateQueryOptions = (queryOptions) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-    options: queryOptions
-  };
-};
-
-export const resetFetchParamsBeforeExecute = (perPage) => {
-  return {
-    limit: perPage + 1,
-    skip: 0
-  };
-};
-
-export const queryOptionsExecute = (queryDocs, queryOptionsParams, perPage) => {
-  const fetchParams = resetFetchParamsBeforeExecute(perPage);
-  return fetchDocs(queryDocs, fetchParams, queryOptionsParams);
-};
-
-export const queryOptionsToggleVisibility = (newVisibility) => {
-  return updateQueryOptions({
-    isVisible: newVisibility
-  });
-};
-
-export const queryOptionsToggleReduce = (previousReduce) => {
-  if (previousReduce) {
-    return updateQueryOptions({
-      reduce: !previousReduce
-    });
-  }
-  // Disables includeDocs if reduce is changing to true
-  return updateQueryOptions({
-    reduce: !previousReduce,
-    includeDocs: false
-  });
-
-};
-
-export const queryOptionsUpdateGroupLevel = (newGroupLevel) => {
-  return updateQueryOptions({
-    groupLevel: newGroupLevel
-  });
-};
-
-export const queryOptionsToggleByKeys = (previousShowByKeys) => {
-  return updateQueryOptions({
-    showByKeys: !previousShowByKeys,
-    showBetweenKeys: !!previousShowByKeys
-  });
-};
-
-export const queryOptionsToggleBetweenKeys = (previousShowBetweenKeys) => {
-  return updateQueryOptions({
-    showBetweenKeys: !previousShowBetweenKeys,
-    showByKeys: !!previousShowBetweenKeys
-  });
-};
-
-export const queryOptionsUpdateBetweenKeys = (newBetweenKeys) => {
-  return updateQueryOptions({
-    betweenKeys: newBetweenKeys
-  });
-};
-
-export const queryOptionsUpdateByKeys = (newByKeys) => {
-  return updateQueryOptions({
-    byKeys: newByKeys
-  });
-};
-
-export const queryOptionsToggleDescending = (previousDescending) => {
-  return updateQueryOptions({
-    descending: !previousDescending
-  });
-};
-
-export const queryOptionsUpdateSkip = (newSkip) => {
-  return updateQueryOptions({
-    skip: newSkip
-  });
-};
-
-export const queryOptionsUpdateLimit = (newLimit) => {
-  return updateQueryOptions({
-    limit: newLimit
-  });
-};
-
-export const queryOptionsToggleIncludeDocs = (previousIncludeDocs) => {
-  return updateQueryOptions({
-    includeDocs: !previousIncludeDocs
-  });
-};
-
-export const queryOptionsFilterOnlyDdocs = () => {
-  return updateQueryOptions({
-    betweenKeys: {
-      include: false,
-      startkey: '"_design"',
-      endkey: '"_design0"'
-    },
-    showBetweenKeys: true,
-    showByKeys: false
-  });
-};
-
-export const queryOptionsRemoveFilterOnlyDdocs = () => {
-  return updateQueryOptions({
-    betweenKeys: {},
-    showBetweenKeys: false,
-    showByKeys: false
-  });
-};
-
-export const queryOptionsToggleStable = previous => {
-  return updateQueryOptions({
-    stable: !previous
-  });
-};
-
-export const queryOptionsChangeUpdate = value => {
-  return updateQueryOptions({
-    update: value.toString()
-  });
-};
diff --git a/app/addons/documents/index-results/actiontypes.js b/app/addons/documents/index-results/actiontypes.js
deleted file mode 100644
index fbd9aa2..0000000
--- a/app/addons/documents/index-results/actiontypes.js
+++ /dev/null
@@ -1,36 +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.
-
-export default {
-  INDEX_RESULTS_NEW_RESULTS: 'INDEX_RESULTS_NEW_RESULTS',
-  INDEX_RESULTS_RESET: 'INDEX_RESULTS_RESET',
-  INDEX_RESULTS_SELECT_DOC: 'INDEX_RESULTS_SELECT_DOC',
-  INDEX_RESULTS_CLEAR_RESULTS: 'INDEX_RESULTS_CLEAR_RESULTS',
-  INDEX_RESULTS_TOOGLE_SELECT_ALL_DOCUMENTS: 'INDEX_RESULTS_TOOGLE_SELECT_ALL_DOCUMENTS',
-  INDEX_RESULTS_SELECT_NEW_FIELD_IN_TABLE: 'INDEX_RESULTS_SELECT_NEW_FIELD_IN_TABLE',
-  INDEX_RESULTS_CLEAR_SELECTED_ITEMS: 'INDEX_RESULTS_CLEAR_SELECTED_ITEMS',
-  INDEX_RESULTS_TOGGLE_PRIORITIZED_TABLE_VIEW: 'INDEX_RESULTS_TOGGLE_PRIORITIZED_TABLE_VIEW',
-  INDEX_RESULTS_REDUX_NEW_RESULTS: 'INDEX_RESULTS_REDUX_NEW_RESULTS',
-  INDEX_RESULTS_REDUX_IS_LOADING: 'INDEX_RESULTS_REDUX_IS_LOADING',
-  INDEX_RESULTS_REDUX_CHANGE_LAYOUT: 'INDEX_RESULTS_REDUX_CHANGE_LAYOUT',
-  INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS: 'INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS',
-  INDEX_RESULTS_REDUX_SET_PER_PAGE: 'INDEX_RESULTS_REDUX_SET_PER_PAGE',
-  INDEX_RESULTS_REDUX_PAGINATE_NEXT: 'INDEX_RESULTS_REDUX_PAGINATE_NEXT',
-  INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS: 'INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS',
-  INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS: 'INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS',
-  INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE: 'INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE',
-  INDEX_RESULTS_REDUX_RESET_STATE: 'INDEX_RESULTS_REDUX_RESET_STATE',
-  INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS: 'INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS',
-  INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED: 'INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED',
-  INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY: 'INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY',
-  INDEX_RESULTS_SET_STYLE: 'INDEX_RESULTS_SET_STYLE'
-};
diff --git a/app/addons/documents/index-results/api.js b/app/addons/documents/index-results/api.js
deleted file mode 100644
index b8bcd8f..0000000
--- a/app/addons/documents/index-results/api.js
+++ /dev/null
@@ -1,74 +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.
-
-import '@webcomponents/url';
-import {get, post} from '../../../core/ajax';
-import app from '../../../app';
-import Constants from '../constants';
-import FauxtonAPI from '../../../core/api';
-
-export const queryAllDocs = (fetchUrl, partitionKey, params) => {
-  // Exclude params 'group', 'reduce' and 'group_level' if present since they not allowed for '_all_docs'
-  Object.assign(params, {reduce: undefined, group: undefined, group_level: undefined});
-  const query = app.utils.queryString(params);
-  const url = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${query}`;
-  return get(url).then(json => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return {
-      docs: json.rows,
-      docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-    };
-  });
-};
-
-export const queryMapReduceView = (fetchUrl, params) => {
-  // Adds the 'reduce' param in case it's not defined
-  if (params.reduce === undefined) {
-    params.reduce = false;
-  }
-  // reduce cannot be true when include_docs is true
-  if (params.include_docs && params.reduce) {
-    params.reduce = false;
-    params.group = undefined;
-    params.group_level = undefined;
-  }
-  // removes params not supported by partitioned views
-  const isPartitioned = fetchUrl.includes('/_partition/');
-  if (isPartitioned) {
-    params.stable = undefined;
-    params.conflicts = undefined;
-  }
-  const query = app.utils.queryString(params);
-  const url = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${query}`;
-  return get(url).then(json => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return {
-      docs: json.rows,
-      docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-      layout: undefined
-    };
-  });
-};
-
-export const postToBulkDocs = (databaseName, payload) => {
-  const url = FauxtonAPI.urls('bulk_docs', 'server', databaseName);
-  return post(url, payload);
-};
-
-export const postToIndexBulkDelete = (databaseName, payload) => {
-  const url = FauxtonAPI.urls('mango', 'index-server-bulk-delete', encodeURIComponent(databaseName));
-  return post(url, payload);
-};
diff --git a/app/addons/documents/index-results/components/pagination/PaginationFooter.js b/app/addons/documents/index-results/components/pagination/PaginationFooter.js
deleted file mode 100644
index 5f1c663..0000000
--- a/app/addons/documents/index-results/components/pagination/PaginationFooter.js
+++ /dev/null
@@ -1,92 +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.
-
-import React from 'react';
-import PagingControls from './PagingControls.js';
-import PerPageSelector from './PerPageSelector.js';
-import TableControls from './TableControls';
-
-export default class PaginationFooter extends React.Component {
-  constructor(props) {
-    super(props);
-  }
-
-  getPageNumberText () {
-    const { docs, pageStart, pageEnd } = this.props;
-
-    if (docs.length === 0) {
-      return <span>Showing 0 documents.</span>;
-    }
-
-    return <span>Showing document {pageStart} - {pageEnd}.</span>;
-  }
-
-  perPageChange (amount) {
-    const { updatePerPageResults, fetchParams, queryOptionsParams } = this.props;
-    updatePerPageResults(amount, fetchParams, queryOptionsParams);
-  }
-
-  nextClicked (event) {
-    event.preventDefault();
-
-    const { canShowNext, fetchParams, queryOptionsParams, paginateNext, perPage } = this.props;
-    if (canShowNext) {
-      paginateNext(fetchParams, queryOptionsParams, perPage);
-    }
-  }
-
-  previousClicked (event) {
-    event.preventDefault();
-
-    const { canShowPrevious, fetchParams, queryOptionsParams, paginatePrevious, perPage } = this.props;
-    if (canShowPrevious) {
-      paginatePrevious(fetchParams, queryOptionsParams, perPage);
-    }
-  }
-
-  render () {
-    const {
-      showPrioritizedEnabled,
-      hasResults,
-      prioritizedEnabled,
-      displayedFields,
-      perPage,
-      canShowNext,
-      canShowPrevious,
-      toggleShowAllColumns
-    } = this.props;
-
-    return (
-      <footer className="index-pagination pagination-footer">
-        <PagingControls
-          nextClicked={this.nextClicked.bind(this)}
-          previousClicked={this.previousClicked.bind(this)}
-          canShowNext={canShowNext}
-          canShowPrevious={canShowPrevious} />
-
-        <div className="footer-controls">
-          <div className="page-controls">
-            {showPrioritizedEnabled && hasResults ?
-              <TableControls
-                prioritizedEnabled={prioritizedEnabled}
-                displayedFields={displayedFields}
-                toggleShowAllColumns={toggleShowAllColumns} /> : null}
-          </div>
-          <PerPageSelector perPageChange={this.perPageChange.bind(this)} perPage={perPage} />
-          <div className="current-docs">
-            {this.getPageNumberText()}
-          </div>
-        </div>
-      </footer>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/pagination/PagingControls.js b/app/addons/documents/index-results/components/pagination/PagingControls.js
deleted file mode 100644
index 4be683e..0000000
--- a/app/addons/documents/index-results/components/pagination/PagingControls.js
+++ /dev/null
@@ -1,48 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default function PagingControls ({ nextClicked, previousClicked, canShowPrevious, canShowNext }) {
-  let canShowPreviousClassName = '';
-  let canShowNextClassName = '';
-
-  if (!canShowPrevious) {
-    canShowPreviousClassName = 'disabled';
-  }
-
-  if (!canShowNext) {
-    canShowNextClassName = 'disabled';
-  }
-
-  return (
-    <div className="documents-pagination">
-      <ul className="pagination">
-        <li className={canShowPreviousClassName} >
-          <a id="previous" onClick={previousClicked} className="icon fonticon-left-open" href="#" data-bypass="true"></a>
-        </li>
-        <li className={canShowNextClassName} >
-          <a id="next" onClick={nextClicked} className="icon fonticon-right-open" href="#" data-bypass="true"></a>
-        </li>
-      </ul>
-    </div>
-  );
-}
-
-PagingControls.propTypes = {
-  nextClicked: PropTypes.func.isRequired,
-  previousClicked: PropTypes.func.isRequired,
-  canShowPrevious: PropTypes.bool.isRequired,
-  canShowNext: PropTypes.bool.isRequired
-};
diff --git a/app/addons/documents/index-results/components/pagination/PerPageSelector.js b/app/addons/documents/index-results/components/pagination/PerPageSelector.js
deleted file mode 100644
index 97373f6..0000000
--- a/app/addons/documents/index-results/components/pagination/PerPageSelector.js
+++ /dev/null
@@ -1,58 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default class PerPageSelector extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  perPageChange (e) {
-    const perPage = parseInt(e.target.value, 10);
-    this.props.perPageChange(perPage);
-  }
-
-  getOptions () {
-    return _.map(this.props.options, (i) => {
-      return (<option value={i} key={i}>{i}</option>);
-    });
-  }
-
-  render () {
-    return (
-      <div id="per-page">
-        <label htmlFor="select-per-page" className="drop-down inline">
-          {this.props.label} &nbsp;
-          <select id="select-per-page" onChange={this.perPageChange.bind(this)} value={this.props.perPage.toString()} className="input-small">
-            {this.getOptions()}
-          </select>
-        </label>
-      </div>
-    );
-  }
-
-}
-
-PerPageSelector.defaultProps = {
-  label: 'Documents per page: ',
-  options: [5, 10, 20, 30, 50, 100]
-};
-
-PerPageSelector.propTypes = {
-  perPage: PropTypes.number.isRequired,
-  perPageChange: PropTypes.func.isRequired,
-  label: PropTypes.string,
-  options: PropTypes.array
-};
diff --git a/app/addons/documents/index-results/components/pagination/TableControls.js b/app/addons/documents/index-results/components/pagination/TableControls.js
deleted file mode 100644
index 58a5740..0000000
--- a/app/addons/documents/index-results/components/pagination/TableControls.js
+++ /dev/null
@@ -1,66 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default class TableControls extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  getAmountShownFields () {
-    const fields = this.props.displayedFields;
-
-    if (fields.shown === fields.allFieldCount) {
-      return (
-        <div className="pull-left shown-fields">
-          Showing {fields.shown} columns.
-        </div>
-      );
-    }
-
-    return (
-      <div className="pull-left shown-fields">
-        Showing {fields.shown} of {fields.allFieldCount} columns.
-      </div>
-    );
-  }
-
-  render () {
-    const { prioritizedEnabled, toggleShowAllColumns } = this.props;
-
-    return (
-      <div className="footer-table-control">
-        {this.getAmountShownFields()}
-        <div className="footer-doc-control-prioritized-wrapper pull-left">
-          <label htmlFor="footer-doc-control-prioritized">
-            <input
-              id="footer-doc-control-prioritized"
-              checked={prioritizedEnabled}
-              onChange={toggleShowAllColumns}
-              type="checkbox">
-            </input>
-            Show all columns.
-          </label>
-        </div>
-      </div>
-    );
-  }
-}
-
-TableControls.propTypes = {
-  prioritizedEnabled: PropTypes.bool.isRequired,
-  displayedFields: PropTypes.object.isRequired,
-  toggleShowAllColumns: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/components/queryoptions/AdditionalParams.js b/app/addons/documents/index-results/components/queryoptions/AdditionalParams.js
deleted file mode 100644
index 48f09b9..0000000
--- a/app/addons/documents/index-results/components/queryoptions/AdditionalParams.js
+++ /dev/null
@@ -1,78 +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.
-
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-
-export default class AdditionalParams extends React.Component {
-  updateSkip (e) {
-    e.preventDefault();
-    let val = e.target.value;
-
-    //check skip is only numbers
-    if (!/^\d*$/.test(val)) {
-      FauxtonAPI.addNotification({
-        msg: 'Skip can only be a number',
-        type: 'error'
-      });
-      val = this.props.skip;
-    }
-
-    this.props.updateSkip(val);
-  }
-
-  updateLimit (e) {
-    e.preventDefault();
-    this.props.updateLimit(e.target.value);
-  }
-
-  toggleDescending () {
-    this.props.toggleDescending(this.props.descending);
-  }
-
-  render () {
-    return (
-      <div className="query-group" id="query-options-additional-params">
-        <div className="add-on additionalParams">Additional Parameters</div>
-        <div className="row-fluid fieldsets">
-          <div className="dropdown inline">
-            <label className="drop-down">
-              Limit
-              <select id="qoLimit" onChange={this.updateLimit.bind(this)} name="limit" value={this.props.limit} className="input-small">
-                <option value="none">None</option>
-                <option value={5}>5</option>
-                <option value={10}>10</option>
-                <option value={20}>20</option>
-                <option value={30}>30</option>
-                <option value={50}>50</option>
-                <option value={100}>100</option>
-                <option value={500}>500</option>
-              </select>
-            </label>
-          </div>
-        </div>
-        <div className="row-fluid fieldsets">
-          <div className="checkbox inline">
-            <input id="qoDescending" type="checkbox" onChange={this.toggleDescending.bind(this)} checked={this.props.descending} />
-            <label htmlFor="qoDescending">Descending</label>
-          </div>
-          <div className="dropdown inline">
-            <label htmlFor="qoSkip" className="drop-down">
-              Skip
-              <input value={this.props.skip} onChange={this.updateSkip.bind(this)} className="input-small" type="number" id="qoSkip" placeholder="# of rows" />
-            </label>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/queryoptions/KeySearchFields.js b/app/addons/documents/index-results/components/queryoptions/KeySearchFields.js
deleted file mode 100644
index 1fb2f90..0000000
--- a/app/addons/documents/index-results/components/queryoptions/KeySearchFields.js
+++ /dev/null
@@ -1,127 +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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-export default class KeySearchFields extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  toggleByKeys () {
-    this.props.toggleByKeys();
-  }
-
-  toggleBetweenKeys () {
-    this.props.toggleBetweenKeys();
-  }
-
-  updateBetweenKeys () {
-    this.props.updateBetweenKeys({
-      startkey: this.startkey.value,
-      endkey: this.endkey.value,
-      include: this.props.betweenKeys.include
-    });
-  }
-
-  updateInclusiveEnd () {
-    this.props.updateBetweenKeys({
-      include: !this.props.betweenKeys.include,
-      startkey: this.props.betweenKeys.startkey,
-      endkey: this.props.betweenKeys.endkey
-    });
-  }
-
-  updateByKeys (e) {
-    this.props.updateByKeys(e.target.value);
-  }
-
-  render () {
-    let keysGroupClass = 'controls-group well js-query-keys-wrapper ';
-    let byKeysClass = 'row-fluid js-keys-section ';
-    let betweenKeysClass = byKeysClass;
-    let byKeysButtonClass = 'drop-down btn ';
-    let betweenKeysButtonClass = byKeysButtonClass;
-
-    if (!this.props.showByKeys && !this.props.showBetweenKeys) {
-      keysGroupClass += 'hide';
-    }
-
-    if (!this.props.showByKeys) {
-      byKeysClass += 'hide';
-    } else {
-      byKeysButtonClass += 'active';
-    }
-
-    if (!this.props.showBetweenKeys) {
-      betweenKeysClass += 'hide';
-    } else {
-      betweenKeysButtonClass += 'active';
-    }
-
-    return (
-      <div className="query-group" id="query-options-key-search">
-        <div className="add-on">Keys</div>
-        <div className="btn-group toggle-btns row-fluid">
-          <label style={{width: '101px'}} id="byKeys" onClick={this.toggleByKeys.bind(this)} className={byKeysButtonClass}>By Key(s)</label>
-          <label style={{width: '101px'}} id="betweenKeys" onClick={this.toggleBetweenKeys.bind(this)} className={betweenKeysButtonClass}>Between Keys</label>
-        </div>
-
-        <div className={keysGroupClass}>
-          <div className={byKeysClass} id="js-showKeys">
-            <div className="controls controls-row">
-              <label htmlFor="keys-input" className="drop-down">A key, or an array of keys.</label>
-              <textarea value={this.props.byKeys} onChange={this.updateByKeys.bind(this)} id="keys-input" className="input-xxlarge" rows="5" type="text"
-                placeholder='Enter either a single key ["123"] or an array of keys ["123", "456"]. A key value is the first parameter emitted in a map function. For example emit("123", 1) the key is "123".'></textarea>
-              <div id="keys-error" className="inline-block js-keys-error"></div>
-            </div>
-          </div>
-
-          <div className={betweenKeysClass} id="js-showStartEnd">
-            <div className="controls controls-row">
-              <div>
-                <label htmlFor="startkey" className="drop-down">Start key</label>
-                <input
-                  id="startkey"
-                  ref={node => this.startkey = node}
-                  type="text"
-                  onChange={this.updateBetweenKeys.bind(this)}
-                  value={this.props.betweenKeys.startkey}
-                  placeholder='e.g., "1234"' />
-              </div>
-              <div>
-                <label htmlFor="endkey" className="drop-down">End key</label>
-                <input
-                  id="endkey"
-                  ref={node => this.endkey = node}
-                  onChange={this.updateBetweenKeys.bind(this)}
-                  value={this.props.betweenKeys.endkey}
-                  type="text"
-                  placeholder='e.g., "1234"'/>
-                <div className="controls include-end-key-row checkbox controls-row inline">
-                  <input
-                    id="qoIncludeEndKeyInResults"
-                    type="checkbox"
-                    onChange={this.updateInclusiveEnd.bind(this)}
-                    checked={this.props.betweenKeys.include}/>
-                  <label htmlFor="qoIncludeEndKeyInResults">Include End Key in results</label>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/queryoptions/MainFieldsView.js b/app/addons/documents/index-results/components/queryoptions/MainFieldsView.js
deleted file mode 100644
index 179acf7..0000000
--- a/app/addons/documents/index-results/components/queryoptions/MainFieldsView.js
+++ /dev/null
@@ -1,176 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class MainFieldsView extends React.Component {
-  constructor(props) {
-    super(props);
-    this.toggleStable = this.toggleStable.bind(this);
-    this.onUpdateChange = this.onUpdateChange.bind(this);
-    this.toggleIncludeDocs = this.toggleIncludeDocs.bind(this);
-
-    this.updateOptions = [
-      {value: 'true', label: 'true'},
-      {value: 'lazy', label: 'lazy'},
-      {value: 'false', label: 'false'}
-    ];
-  }
-
-  toggleIncludeDocs() {
-    this.props.toggleIncludeDocs(this.props.includeDocs);
-  }
-
-  onUpdateChange(e) {
-    this.props.changeUpdateField(e.target.value);
-  }
-
-  groupLevelChange(e) {
-    this.props.updateGroupLevel(e.target.value);
-  }
-
-  groupLevel() {
-    if (!this.props.reduce) {
-      return null;
-    }
-
-    return (
-      <label className="drop-down inline" id="qoGroupLevelGroup">
-          Group Level
-        <select onChange={this.groupLevelChange.bind(this)} id="qoGroupLevel" value={this.props.groupLevel}
-          name="group_level" className="input-small">
-          <option value="0">None</option>
-          <option value="1">1</option>
-          <option value="2">2</option>
-          <option value="3">3</option>
-          <option value="4">4</option>
-          <option value="5">5</option>
-          <option value="6">6</option>
-          <option value="7">7</option>
-          <option value="8">8</option>
-          <option value="9">9</option>
-          <option value="exact">Exact</option>
-        </select>
-      </label>
-    );
-  }
-
-  toggleReduce() {
-    this.props.toggleReduce(this.props.reduce);
-  }
-
-  toggleStable() {
-    this.props.toggleStable(this.props.stable);
-  }
-
-  includeDocsOption() {
-    const {includeDocs, reduce} = this.props;
-    return (
-      <div className="checkbox inline">
-        <input disabled={reduce} onChange={this.toggleIncludeDocs} id="qoIncludeDocs"
-          name="include_docs" type="checkbox" checked={includeDocs}/>
-        <label className={reduce ? 'disabled' : ''} htmlFor="qoIncludeDocs" id="qoIncludeDocsLabel">Include
-            Docs</label>
-      </div>
-    );
-  }
-
-  reduceOption() {
-    const {showReduce, reduce} = this.props;
-    if (!showReduce) {
-      return null;
-    }
-
-    return (
-      <span>
-        <div className="checkbox inline">
-          <input id="qoReduce" name="reduce" onChange={this.toggleReduce.bind(this)} type="checkbox"
-            checked={reduce}/>
-          <label htmlFor="qoReduce">Reduce</label>
-        </div>
-        {this.groupLevel()}
-      </span>
-    );
-  }
-
-  stableOption() {
-    let {enableStable, stable} = this.props;
-
-    if (!enableStable) {
-      // makes sure Stable option always appears unchecked when disabled
-      stable = false;
-    }
-
-    return (
-      <div className="checkbox inline">
-        <input onChange={this.toggleStable} id="qoStable" name="stable"
-          type="checkbox" checked={stable} disabled={!enableStable}/>
-        <label className={enableStable ? '' : 'disabled'} htmlFor="qoStable" id="qoStableLabel">Stable</label>
-      </div>
-    );
-  }
-
-  updateOption() {
-    const { update } = this.props;
-    const selectOptions = this.updateOptions.map(option => {
-      return <option key={option.value} value={option.value}>{option.label}</option>;
-    });
-    return (
-      <div className="dropdown inline">
-        <label className="drop-down">
-          Update
-          <select className="input-small" id="qoUpdate" value={update} onChange={this.onUpdateChange}>
-            {selectOptions}
-          </select>
-        </label>
-      </div>
-    );
-  }
-
-  render() {
-    return (
-      <div className="query-group" id="query-options-main-fields">
-        <span className="add-on">
-          Query Options
-          <a className="help-link" href={this.props.docURL} target="_blank" rel="noopener noreferrer" data-bypass="true">
-            <i className="icon-question-sign"/>
-          </a>
-        </span>
-        <div className="row-fluid fieldsets">
-          {this.includeDocsOption()}
-          {this.reduceOption()}
-        </div>
-        <div className="row-fluid fieldsets">
-          {this.stableOption()}
-          {this.updateOption()}
-        </div>
-      </div>
-    );
-  }
-
-}
-
-MainFieldsView.propTypes = {
-  toggleIncludeDocs: PropTypes.func.isRequired,
-  includeDocs: PropTypes.bool.isRequired,
-  reduce: PropTypes.bool.isRequired,
-  toggleReduce: PropTypes.func,
-  updateGroupLevel: PropTypes.func,
-  docURL: PropTypes.string.isRequired,
-  stable: PropTypes.bool.isRequired,
-  toggleStable: PropTypes.func.isRequired,
-  update: PropTypes.string.isRequired,
-  changeUpdateField: PropTypes.func.isRequired,
-  showReduce: PropTypes.bool.isRequired,
-  enableStable: PropTypes.bool.isRequired
-};
diff --git a/app/addons/documents/index-results/components/queryoptions/QueryButtons.js b/app/addons/documents/index-results/components/queryoptions/QueryButtons.js
deleted file mode 100644
index 712f79a..0000000
--- a/app/addons/documents/index-results/components/queryoptions/QueryButtons.js
+++ /dev/null
@@ -1,40 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default class QueryButtons extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  hideTray () {
-    this.props.onCancel();
-  }
-
-  render () {
-    return (
-      <div className="controls-group query-group">
-        <div id="button-options" className="controls controls-row">
-          <button type="submit" className="btn btn-secondary">Run Query</button>
-          <a onClick={this.hideTray.bind(this)} className="btn btn-cancelDark">Cancel</a>
-        </div>
-      </div>
-    );
-  }
-}
-
-QueryButtons.propTypes = {
-  onCancel: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/components/queryoptions/QueryOptions.js b/app/addons/documents/index-results/components/queryoptions/QueryOptions.js
deleted file mode 100644
index 3c63c92..0000000
--- a/app/addons/documents/index-results/components/queryoptions/QueryOptions.js
+++ /dev/null
@@ -1,187 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-import GeneralComponents from '../../../../components/react-components';
-import Constants from '../../../constants';
-import MainFieldsView from './MainFieldsView';
-import KeySearchFields from './KeySearchFields';
-import AdditionalParams from './AdditionalParams';
-import QueryButtons from './QueryButtons';
-
-const { ToggleHeaderButton, TrayContents } = GeneralComponents;
-
-export default class QueryOptions extends React.Component {
-  constructor(props) {
-    super(props);
-    const {
-      ddocsOnly,
-      queryOptionsApplyFilterOnlyDdocs
-    } = props;
-
-    if (ddocsOnly) {
-      queryOptionsApplyFilterOnlyDdocs();
-    }
-  }
-
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    const {
-      ddocsOnly,
-      queryOptionsApplyFilterOnlyDdocs,
-      queryOptionsRemoveFilterOnlyDdocs,
-    } = this.props;
-
-    if (!ddocsOnly && nextProps.ddocsOnly) {
-      queryOptionsApplyFilterOnlyDdocs();
-    } else if (ddocsOnly && !nextProps.ddocsOnly) {
-      queryOptionsRemoveFilterOnlyDdocs();
-    }
-  }
-
-  componentWillUnmount() {
-    const {
-      ddocsOnly,
-      queryOptionsRemoveFilterOnlyDdocs
-    } = this.props;
-    if (ddocsOnly) {
-      // Remove filter it was set before
-      queryOptionsRemoveFilterOnlyDdocs();
-    }
-  }
-
-  executeQuery (e) {
-    if (e) { e.preventDefault(); }
-    this.closeTray();
-
-    const {
-      queryOptionsExecute,
-      queryOptionsParams,
-      perPage,
-      resetPagination,
-      selectedLayout,
-      changeLayout
-    } = this.props;
-
-    // reset pagination back to the beginning but hold on to the current perPage
-    resetPagination(perPage);
-
-    // We may have to change the layout based on include_docs.
-    const isMetadata = selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA;
-    if (isMetadata && queryOptionsParams.include_docs) {
-      changeLayout(Constants.LAYOUT_ORIENTATION.TABLE);
-    } else if (!isMetadata && !queryOptionsParams.include_docs) {
-      changeLayout(Constants.LAYOUT_ORIENTATION.METADATA);
-    }
-
-    // finally, run the query
-    queryOptionsExecute(queryOptionsParams, perPage);
-  }
-
-  toggleTrayVisibility () {
-    this.props.queryOptionsToggleVisibility(!this.props.contentVisible);
-  }
-
-  closeTray () {
-    this.props.queryOptionsToggleVisibility(false);
-  }
-
-  getTray () {
-    return (
-      <TrayContents closeTray={this.closeTray.bind(this)} contentVisible={this.props.contentVisible}
-        className="query-options" id="query-options-tray"
-        container={this}>
-
-        <form onSubmit={this.executeQuery.bind(this)} className="js-view-query-update custom-inputs">
-          <MainFieldsView
-            includeDocs={this.props.includeDocs}
-            toggleIncludeDocs={this.props.queryOptionsToggleIncludeDocs}
-            showReduce={this.props.showReduce}
-            reduce={this.props.reduce}
-            toggleReduce={this.props.queryOptionsToggleReduce}
-            groupLevel={this.props.groupLevel}
-            updateGroupLevel={this.props.queryOptionsUpdateGroupLevel}
-            docURL={FauxtonAPI.constants.DOC_URLS.GENERAL}
-            enableStable={this.props.enableStable}
-            stable={this.props.stable}
-            toggleStable={this.props.queryOptionsToggleStable}
-            update={this.props.update}
-            changeUpdateField={this.props.queryOptionsChangeUpdate}
-          />
-          <KeySearchFields
-            key={1}
-            showByKeys={this.props.showByKeys}
-            showBetweenKeys={this.props.showBetweenKeys}
-            toggleByKeys={this.props.queryOptionsToggleByKeys}
-            toggleBetweenKeys={this.props.queryOptionsToggleBetweenKeys}
-            betweenKeys={this.props.betweenKeys}
-            updateBetweenKeys={this.props.queryOptionsUpdateBetweenKeys}
-            byKeys={this.props.byKeys}
-            updateByKeys={this.props.queryOptionsUpdateByKeys} />
-          <AdditionalParams
-            descending={this.props.descending}
-            toggleDescending={this.props.queryOptionsToggleDescending}
-            skip={this.props.skip}
-            updateSkip={this.props.queryOptionsUpdateSkip}
-            updateLimit={this.props.queryOptionsUpdateLimit}
-            limit={this.props.limit} />
-          <QueryButtons onCancel={this.closeTray.bind(this)} />
-        </form>
-      </TrayContents>
-    );
-  }
-
-  showAsActive() {
-    const { reduce, betweenKeys, byKeys, descending, skip, limit, stable, update } = this.props;
-    return !!((betweenKeys && betweenKeys.startkey) ||
-      byKeys || (limit && limit != 'none') || skip || reduce || descending || stable || update !== 'true');
-  }
-
-  render () {
-
-    return (
-      <div id="header-query-options">
-        <div id="query-options">
-          <div>
-            <ToggleHeaderButton
-              toggleCallback={this.toggleTrayVisibility.bind(this)}
-              containerClasses="header-control-box control-toggle-queryoptions"
-              title="Query Options"
-              fonticon="fonticon-gears"
-              text="Options"
-              active={this.showAsActive()} />
-            {this.getTray()}
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-QueryOptions.propTypes = {
-  contentVisible: PropTypes.bool.isRequired,
-  queryOptionsApplyFilterOnlyDdocs: PropTypes.func.isRequired,
-  queryOptionsRemoveFilterOnlyDdocs: PropTypes.func.isRequired,
-  queryOptionsExecute: PropTypes.func.isRequired,
-  queryOptionsParams: PropTypes.object.isRequired,
-  perPage: PropTypes.number.isRequired,
-  resetPagination: PropTypes.func.isRequired,
-  selectedLayout: PropTypes.string.isRequired,
-  changeLayout: PropTypes.func.isRequired,
-  queryOptionsToggleVisibility: PropTypes.func.isRequired,
-  queryOptionsToggleStable: PropTypes.func.isRequired,
-  queryOptionsChangeUpdate: PropTypes.func.isRequired,
-  stable: PropTypes.bool.isRequired,
-  update: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/index-results/components/results/IndexResults.js b/app/addons/documents/index-results/components/results/IndexResults.js
deleted file mode 100644
index 01982fa..0000000
--- a/app/addons/documents/index-results/components/results/IndexResults.js
+++ /dev/null
@@ -1,120 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ResultsScreen from './ResultsScreen';
-
-export default class IndexResults extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidMount () {
-    const {
-      fetchDocs,
-      fetchParams,
-      queryOptionsParams,
-      fetchAtStartup
-    } = this.props;
-
-    // Fetch docs if requested
-    if (fetchAtStartup) {
-      fetchDocs(fetchParams, queryOptionsParams);
-    }
-  }
-
-  UNSAFE_componentWillUpdate (nextProps) {
-    const {
-      fetchDocs,
-      fetchParams,
-      queryOptionsParams,
-      ddocsOnly,
-      fetchUrl,
-      resetState,
-      partitionKey
-    } = nextProps;
-
-    // Indicates the selected sidebar item has changed, so it needs to fetch the new list of docs
-    if (this.props.ddocsOnly !== ddocsOnly || this.props.fetchUrl !== fetchUrl || this.props.partitionKey !== partitionKey) {
-      resetState();
-      // Need to reset skip and reduce here because 'resetState()'
-      // won't change props until the next update cycle
-      fetchDocs({...fetchParams, skip: 0},
-        {...queryOptionsParams, reduce: undefined, group: undefined, group_level: undefined});
-    }
-  }
-
-  componentWillUnmount () {
-    const { resetState } = this.props;
-    resetState();
-  }
-
-  deleteSelectedDocs () {
-    const { bulkDeleteDocs, fetchParams, selectedDocs, queryOptionsParams } = this.props;
-    bulkDeleteDocs(selectedDocs, fetchParams, queryOptionsParams);
-  }
-
-  isSelected (id) {
-    const { selectedDocs } = this.props;
-    // check whether this id exists in our array of selected docs
-    return selectedDocs.findIndex((doc) => {
-      return id === doc._id;
-    }) > -1;
-  }
-
-  docChecked (_id, _rev) {
-    if (!_id) {
-      return;
-    }
-    const { selectDoc, selectedDocs } = this.props;
-
-    // dispatch an action to push this doc on to the array of selected docs
-    const doc = {
-      _id: _id,
-      _rev: _rev
-    };
-
-    selectDoc(doc, selectedDocs);
-  }
-
-  toggleSelectAll () {
-    const {
-      docs,
-      selectedDocs,
-      allDocumentsSelected,
-      bulkCheckOrUncheck
-    } = this.props;
-
-    bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected);
-  }
-
-  render () {
-    const { results } = this.props;
-
-    return (
-      <ResultsScreen
-        removeItem={this.deleteSelectedDocs.bind(this)}
-        isSelected={this.isSelected.bind(this)}
-        docChecked={this.docChecked.bind(this)}
-        isListDeletable={results.hasBulkDeletableDoc}
-        toggleSelectAll={this.toggleSelectAll.bind(this)}
-        {...this.props} />
-    );
-  }
-}
-
-IndexResults.propTypes = {
-  fetchAtStartup: PropTypes.bool.isRequired,
-  fetchDocs: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/components/results/NoResultsScreen.js b/app/addons/documents/index-results/components/results/NoResultsScreen.js
deleted file mode 100644
index c01fb01..0000000
--- a/app/addons/documents/index-results/components/results/NoResultsScreen.js
+++ /dev/null
@@ -1,35 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default function NoResultsScreen ({ text, isWarning }) {
-  const warningMsg = (
-    <div className='no-results-screen-warning'>
-      <i className='fonticon-attention-circled'></i>
-      {text}
-    </div>
-  );
-  return (
-    <div className="no-results-screen">
-      {isWarning ? warningMsg : null}
-      <div className="watermark-logo"></div>
-      {!isWarning ? <h3>{text}</h3> :  null}
-    </div>
-  );
-}
-
-NoResultsScreen.propTypes = {
-  text: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/index-results/components/results/ResultsScreen.js b/app/addons/documents/index-results/components/results/ResultsScreen.js
deleted file mode 100644
index d5220cb..0000000
--- a/app/addons/documents/index-results/components/results/ResultsScreen.js
+++ /dev/null
@@ -1,154 +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.
-
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-import Constants from '../../../constants';
-import Components from '../../../../components/react-components';
-import { ResultsToolBar } from '../../../components/results-toolbar';
-import NoResultsScreen from './NoResultsScreen';
-import TableView from './TableView';
-
-const { LoadLines, Document } = Components;
-
-export default class ResultsScreen extends React.Component {
-  constructor(props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    prettyPrint();
-  }
-
-  componentDidUpdate() {
-    prettyPrint();
-  }
-
-  onClick(id, doc) {
-    if (doc.url) {
-      FauxtonAPI.navigate(doc.url);
-    }
-  }
-
-  getUrlFragment(url) {
-    if (!this.props.isEditable) {
-      return null;
-    }
-
-    return (
-      <a href={url}>
-        <i className="fonticon-pencil"></i>
-      </a>
-    );
-  }
-
-  getDocumentList() {
-    const noop = () => { };
-    const data = this.props.results.results;
-    return _.map(data, (doc, i) => {
-      return (
-        <Document
-          key={doc.id + i}
-          doc={doc}
-          onClick={this.props.isEditable ? this.onClick : noop}
-          keylabel={doc.keylabel}
-          docContent={doc.content}
-          docType={this.props.docType}
-          checked={this.props.isSelected(doc.id)}
-          header={doc.header}
-          docChecked={this.props.docChecked}
-          isDeletable={doc.isDeletable}
-          docIdentifier={doc.id}
-          resultsStyle={this.props.resultsStyle}
-        >
-          {doc.url ? this.getUrlFragment(`#${doc.url}`) : doc.url}
-        </Document>
-      );
-    });
-  }
-
-  getDocumentStyleView() {
-    let classNames = 'view';
-
-    if (this.props.isListDeletable) {
-      classNames = `${classNames} show-select`;
-    }
-
-    return (
-      <div className={classNames}>
-        <div id="doc-list">{this.getDocumentList()}</div>
-      </div>
-    );
-  }
-
-  getTableStyleView() {
-    return (
-      <div>
-        <TableView
-          onClick={this.onClick}
-          docChecked={this.props.docChecked}
-          isSelected={this.props.isSelected}
-          isListDeletable={this.props.isListDeletable}
-          data={this.props.results}
-          isLoading={this.props.isLoading}
-          removeItem={this.props.removeItem}
-          isChecked={this.props.allDocumentsSelected}
-          hasSelectedItem={this.props.hasSelectedItem}
-          toggleSelect={this.toggleSelectAll}
-          changeField={this.props.changeTableHeaderAttribute}
-          resultsStyle={this.props.resultsStyle}
-          title="Select all docs that can be..."
-        />
-      </div>
-    );
-  }
-
-  getMainView() {
-    if (this.props.isLoading) {
-      return (
-        <div className="loading-lines-wrapper">
-          <LoadLines />
-        </div>
-      );
-    } else if (!this.props.noResultsWarning && this.props.hasResults) {
-      if (this.props.selectedLayout === Constants.LAYOUT_ORIENTATION.JSON) {
-        return this.getDocumentStyleView();
-      }
-      return this.getTableStyleView();
-    }
-  }
-
-  getNoResultScreen() {
-    if (!this.props.isLoading) {
-      if (this.props.noResultsWarning) {
-        return (
-          <NoResultsScreen
-            text={this.props.noResultsWarning}
-            isWarning={true}
-          />
-        );
-      } else if (!this.props.hasResults) {
-        return <NoResultsScreen text={this.props.textEmptyIndex} />;
-      }
-    }
-  }
-
-  render() {
-    return (
-      <div className="document-result-screen">
-        {this.getNoResultScreen()}
-        <ResultsToolBar {...this.props} />
-        {this.getMainView()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/results/TableRow.js b/app/addons/documents/index-results/components/results/TableRow.js
deleted file mode 100644
index 32614fe..0000000
--- a/app/addons/documents/index-results/components/results/TableRow.js
+++ /dev/null
@@ -1,163 +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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-import Components from '../../../../components/react-components';
-import Constants from '../../../constants';
-import uuid from 'uuid';
-
-const { Copy } = Components;
-
-export default class TableRow extends React.Component {
-  static defaultProps = {
-    textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED
-  };
-
-  constructor (props) {
-    super(props);
-    this.state = {
-      checked: this.props.isSelected
-    };
-  }
-
-  onChange () {
-    this.props.docChecked(this.props.el.id, this.props.el._rev);
-  }
-
-  getRowContents (element, rowNumber) {
-    const el = element.content;
-
-    const row = this.props.data.selectedFields.map(function (k, i) {
-
-      const key = 'tableview-data-cell-' + rowNumber + k + i + el[k];
-      const stringified = ['object', 'boolean'].includes(typeof el[k]) ?
-        JSON.stringify(el[k], null, '  ') : el[k];
-
-      const classNames = classnames({
-        'showall': this.props.textOverflow === Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL,
-        'small-font': this.props.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL,
-        'large-font': this.props.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE
-      });
-
-      return (
-        <td key={key} title={stringified} className={classNames} onClick={this.onClick.bind(this)}>
-          {stringified}
-        </td>
-      );
-    }.bind(this));
-
-    return row;
-  }
-
-  maybeGetCheckboxCell (el, i) {
-    return (
-      <td className="tableview-checkbox-cell" key={"tableview-checkbox-cell-" + i}>
-        {el.isDeletable ? <input
-          id={"checkbox-" + this.props.docIdentifier}
-          checked={this.props.isSelected}
-          type="checkbox"
-          onChange={this.onChange.bind(this)} /> : null}
-      </td>
-    );
-  }
-
-  getAdditionalInfoRow (el) {
-    const attachmentCount = Object.keys(el._attachments || {}).length;
-    let attachmentIndicator = null;
-    let textAttachments = null;
-
-    const conflictCount = Object.keys(el._conflicts || {}).length;
-    let conflictIndicator = null;
-    let textConflicts = null;
-
-
-    if (attachmentCount) {
-      textAttachments = attachmentCount === 1 ? attachmentCount + ' Attachment' : attachmentCount + ' Attachments';
-      attachmentIndicator = (
-        <div style={{display: 'inline', marginLeft: '5px'}} title={textAttachments}>
-          <i className="icon fonticon-paperclip"></i>{attachmentCount}
-        </div>
-      );
-    }
-
-    if (conflictCount) {
-      textConflicts = conflictCount === 1 ? conflictCount + ' Conflict' : conflictCount + ' Conflicts';
-      conflictIndicator = (
-        <div className="tableview-conflict" data-conflicts-indicator style={{display: 'inline'}} title={textConflicts}>
-          <i
-            style={{fontSize: '17px'}}
-            className="icon icon-code-fork"></i>{conflictCount}
-        </div>
-      );
-    }
-
-    return (
-      <td className="tableview-el-last" onClick={this.onClick.bind(this)}>
-        {conflictIndicator}
-        {attachmentIndicator}
-      </td>
-    );
-  }
-
-  getCopyButton (el) {
-    const text = JSON.stringify(el, null, '  ');
-    return (
-      <td title={text} className="tableview-el-copy">
-        <Copy
-          title={text}
-          text={text}
-          uniqueKey={uuid.v4()}
-          onClipboardClick={this.showCopiedMessage} />
-      </td>
-    );
-  }
-
-  showCopiedMessage () {
-    FauxtonAPI.addNotification({
-      msg: 'The document content has been copied to the clipboard.',
-      type: 'success',
-      clear: true
-    });
-  }
-
-  onClick (e) {
-    this.props.onClick(this.props.el._id, this.props.el, e);
-  }
-
-  render () {
-    const i = this.props.index;
-    const docContent = this.props.el.content;
-    const el = this.props.el;
-
-    return (
-      <tr key={"tableview-content-row-" + i}>
-        {this.maybeGetCheckboxCell(el, i)}
-        {this.getCopyButton(docContent)}
-        {this.getRowContents(el, i)}
-        {this.getAdditionalInfoRow(docContent)}
-      </tr>
-    );
-  }
-}
-
-TableRow.propTypes = {
-  docIdentifier: PropTypes.string.isRequired,
-  docChecked: PropTypes.func.isRequired,
-  isSelected: PropTypes.bool.isRequired,
-  index: PropTypes.number.isRequired,
-  data: PropTypes.object.isRequired,
-  onClick: PropTypes.func.isRequired,
-  textOverflow: PropTypes.string
-};
diff --git a/app/addons/documents/index-results/components/results/TableView.js b/app/addons/documents/index-results/components/results/TableView.js
deleted file mode 100644
index 3197839..0000000
--- a/app/addons/documents/index-results/components/results/TableView.js
+++ /dev/null
@@ -1,106 +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.
-
-import React from 'react';
-import TableRow from './TableRow';
-import WrappedAutocomplete from './WrappedAutocomplete';
-
-export default class TableView extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  getContentRows () {
-    const data = this.props.data.results;
-    const { textOverflow, fontSize } = this.props.resultsStyle;
-    return data.map(function (el, i) {
-      return (
-        <TableRow
-          onClick={this.props.onClick}
-          key={"tableview-row-component-" + i}
-          index={i}
-          el={el}
-          docIdentifier={el.id || "tableview-row-component-" + i}
-          docChecked={this.props.docChecked}
-          isSelected={this.props.isSelected(el.id)}
-          data={this.props.data}
-          textOverflow={textOverflow}
-          fontSize={fontSize} />
-      );
-    }.bind(this));
-  }
-
-  getOptionFieldRows (filtered) {
-    const notSelectedFields = this.props.data.notSelectedFields;
-
-    if (!notSelectedFields) {
-      return filtered.map(function (el, i) {
-        return <th key={'header-el-' + i}>{el}</th>;
-      });
-    }
-
-    return filtered.map(function (el, i) {
-      return (
-        <th key={'header-el-' + i}>
-          {this.getDropdown(
-            el,
-            this.props.data.schema,
-            i,
-            this.props.changeField,
-            this.props.data.selectedFields
-          )}
-        </th>
-      );
-    }.bind(this));
-  }
-
-  getDropdown (selectedField, notSelectedFields, i, changeField, selectedFields) {
-
-    return (
-      <WrappedAutocomplete
-        selectedField={selectedField}
-        notSelectedFields={notSelectedFields}
-        index={i}
-        changeField={changeField}
-        selectedFields={selectedFields} />
-    );
-  }
-
-  getHeader () {
-    const selectedFields = this.props.data.selectedFields;
-    const row = this.getOptionFieldRows(selectedFields);
-
-    return (
-      <tr key="tableview-content-row-header">
-        <th className="tableview-header-el-checkbox"></th>
-        <th className="tableview-el-copy"></th>
-        {row}
-        <th className="tableview-el-last"></th>
-      </tr>
-    );
-  }
-
-  render () {
-    return (
-      <div className="table-view-docs">
-        <table className="table table-striped">
-          <thead>
-            {this.getHeader()}
-          </thead>
-          <tbody>
-            {this.getContentRows()}
-          </tbody>
-        </table>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/results/WrappedAutocomplete.js b/app/addons/documents/index-results/components/results/WrappedAutocomplete.js
deleted file mode 100644
index 17c9814..0000000
--- a/app/addons/documents/index-results/components/results/WrappedAutocomplete.js
+++ /dev/null
@@ -1,41 +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.
-
-import React from 'react';
-import ReactSelect from "react-select";
-
-export default function WrappedAutocomplete ({
-  selectedField,
-  notSelectedFields,
-  index,
-  changeField,
-  selectedFields
-}) {
-  const options = notSelectedFields.map((el) => {
-    return {value: el, label: el};
-  });
-
-  return (
-    <div className="table-container-autocomplete">
-      <div className="table-select-wrapper">
-        <ReactSelect
-          value={selectedField}
-          options={options}
-          clearable={false}
-          onChange={(el) => {
-            changeField({newSelectedRow: el.value, index: index}, selectedFields);
-          }}
-        />
-      </div>
-    </div>
-  );
-}
diff --git a/app/addons/documents/index-results/containers/ApiBarContainer.js b/app/addons/documents/index-results/containers/ApiBarContainer.js
deleted file mode 100644
index 72e3065..0000000
--- a/app/addons/documents/index-results/containers/ApiBarContainer.js
+++ /dev/null
@@ -1,45 +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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import app from '../../../../app';
-import { ApiBarWrapper } from '../../../components/layouts';
-import { getQueryOptionsParams } from '../reducers';
-import FauxtonAPI from '../../../../core/api';
-
-const mapStateToProps = ({indexResults}, {docUrl, endpoint, endpointAddQueryOptions}) => {
-  if (!docUrl) {
-    docUrl = FauxtonAPI.constants.DOC_URLS.GENERAL;
-  }
-
-  if (endpoint && endpointAddQueryOptions) {
-    const query = app.utils.queryString(getQueryOptionsParams(indexResults));
-    if (query) {
-      endpoint = endpoint.indexOf('?') == -1 ? `${endpoint}?${query}` : `${endpoint}&${query}`;
-    }
-  }
-  return { docUrl, endpoint };
-};
-
-const ApiBarContainer = connect (
-  mapStateToProps
-)(ApiBarWrapper);
-
-export default ApiBarContainer;
-
-ApiBarContainer.propTypes = {
-  databaseName: PropTypes.string,
-  docUrl: PropTypes.string,
-  endpoint: PropTypes.string,
-  endpointAddQueryOptions: PropTypes.bool
-};
diff --git a/app/addons/documents/index-results/containers/IndexResultsContainer.js b/app/addons/documents/index-results/containers/IndexResultsContainer.js
deleted file mode 100644
index f0eca76..0000000
--- a/app/addons/documents/index-results/containers/IndexResultsContainer.js
+++ /dev/null
@@ -1,115 +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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import IndexResults from '../components/results/IndexResults';
-import { fetchDocs, bulkDeleteDocs } from '../actions/fetch';
-import { queryOptionsToggleIncludeDocs } from '../actions/queryoptions';
-import {
-  selectDoc,
-  changeLayout,
-  bulkCheckOrUncheck,
-  changeTableHeaderAttribute,
-  resetState,
-  updateResultsStyle
-} from '../actions/base';
-import {
-  getDocs,
-  getSelectedDocs,
-  getIsLoading,
-  getHasResults,
-  getDataForRendering,
-  getIsEditable,
-  getSelectedLayout,
-  getAllDocsSelected,
-  getHasDocsSelected,
-  getNumDocsSelected,
-  getTextEmptyIndex,
-  getDocType,
-  getFetchParams,
-  getQueryOptionsParams,
-  getResultsStyle
-} from '../reducers';
-
-
-const mapStateToProps = ({indexResults}, ownProps) => {
-  return {
-    noResultsWarning: indexResults.noResultsWarning,
-    docs: getDocs(indexResults),
-    selectedDocs: getSelectedDocs(indexResults),
-    isLoading: getIsLoading(indexResults),
-    hasResults: getHasResults(indexResults),
-    results: getDataForRendering(indexResults, ownProps.databaseName, ownProps.deleteEnabled),
-    isEditable: getIsEditable(indexResults),
-    selectedLayout: getSelectedLayout(indexResults),
-    allDocumentsSelected: getAllDocsSelected(indexResults),
-    hasSelectedItem: getHasDocsSelected(indexResults),
-    numDocsSelected: getNumDocsSelected(indexResults),
-    textEmptyIndex: getTextEmptyIndex(indexResults),
-    docType: getDocType(indexResults),
-    fetchParams: getFetchParams(indexResults),
-    queryOptionsParams: getQueryOptionsParams(indexResults),
-    partitionKey: ownProps.partitionKey,
-    resultsStyle: getResultsStyle(indexResults)
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    fetchDocs: (fetchParams, queryOptionsParams) => {
-      dispatch(fetchDocs(ownProps.queryDocs, fetchParams, queryOptionsParams));
-    },
-    selectDoc: (doc, selectedDocs) => {
-      dispatch(selectDoc(doc, selectedDocs));
-    },
-    bulkDeleteDocs: (docs, fetchParams, queryOptionsParams) => {
-      dispatch(bulkDeleteDocs(ownProps.databaseName,
-        ownProps.queryDocs,
-        docs,
-        ownProps.designDocs,
-        fetchParams,
-        queryOptionsParams,
-        ownProps.docType));
-    },
-    changeLayout: (newLayout) => {
-      dispatch(changeLayout(newLayout));
-    },
-    bulkCheckOrUncheck: (docs, selectedDocs, allDocumentsSelected) => {
-      dispatch(bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected, ownProps.docType));
-    },
-    changeTableHeaderAttribute: (newField, selectedFields) => {
-      dispatch(changeTableHeaderAttribute(newField, selectedFields));
-    },
-    resetState: () => {
-      dispatch(resetState());
-    },
-    queryOptionsToggleIncludeDocs: (previousIncludeDocs) => {
-      dispatch(queryOptionsToggleIncludeDocs(previousIncludeDocs));
-    },
-    updateResultsStyle: (newStyle) => {
-      dispatch(updateResultsStyle(newStyle));
-    }
-  };
-};
-
-const IndexResultsContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(IndexResults);
-
-export default IndexResultsContainer;
-
-IndexResultsContainer.propTypes = {
-  queryDocs: PropTypes.func.isRequired,
-  docType: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/index-results/containers/PaginationContainer.js b/app/addons/documents/index-results/containers/PaginationContainer.js
deleted file mode 100644
index 5221d99..0000000
--- a/app/addons/documents/index-results/containers/PaginationContainer.js
+++ /dev/null
@@ -1,83 +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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import PaginationFooter from '../components/pagination/PaginationFooter';
-import {
-  toggleShowAllColumns,
-  updatePerPageResults,
-  paginateNext,
-  paginatePrevious
-} from '../actions/pagination';
-import {
-  getDocs,
-  getSelectedDocs,
-  getHasResults,
-  getFetchParams,
-  getPageStart,
-  getPageEnd,
-  getPerPage,
-  getPrioritizedEnabled,
-  getShowPrioritizedEnabled,
-  getDisplayedFields,
-  getCanShowNext,
-  getCanShowPrevious,
-  getQueryOptionsParams
-} from '../reducers';
-
-
-const mapStateToProps = ({indexResults}, ownProps) => {
-  return {
-    docs: getDocs(indexResults),
-    selectedDocs: getSelectedDocs(indexResults),
-    hasResults: getHasResults(indexResults),
-    pageStart: getPageStart(indexResults),
-    pageEnd: getPageEnd(indexResults),
-    perPage: getPerPage(indexResults),
-    prioritizedEnabled: getPrioritizedEnabled(indexResults),
-    showPrioritizedEnabled: getShowPrioritizedEnabled(indexResults),
-    displayedFields: getDisplayedFields(indexResults, ownProps.databaseName),
-    canShowNext: getCanShowNext(indexResults),
-    canShowPrevious: getCanShowPrevious(indexResults),
-    fetchParams: getFetchParams(indexResults),
-    queryOptionsParams: getQueryOptionsParams(indexResults)
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    toggleShowAllColumns: () => {
-      dispatch(toggleShowAllColumns());
-    },
-    updatePerPageResults: (amount, fetchParams, queryOptionsParams) => {
-      dispatch(updatePerPageResults(ownProps.queryDocs, fetchParams, queryOptionsParams, amount));
-    },
-    paginateNext: (fetchParams, queryOptionsParams, perPage) => {
-      dispatch(paginateNext(ownProps.queryDocs, fetchParams, queryOptionsParams, perPage));
-    },
-    paginatePrevious: (fetchParams, queryOptionsParams, perPage) => {
-      dispatch(paginatePrevious(ownProps.queryDocs, fetchParams, queryOptionsParams, perPage));
-    }
-  };
-};
-
-const PaginationFooterContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(PaginationFooter);
-
-export default PaginationFooterContainer;
-
-PaginationFooterContainer.propTypes = {
-  queryDocs: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/containers/QueryOptionsContainer.js b/app/addons/documents/index-results/containers/QueryOptionsContainer.js
deleted file mode 100644
index 2c1d4fa..0000000
--- a/app/addons/documents/index-results/containers/QueryOptionsContainer.js
+++ /dev/null
@@ -1,156 +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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import DocHelpers from '../../helpers';
-import QueryOptions from '../components/queryoptions/QueryOptions';
-import { changeLayout, resetState } from '../actions/base';
-import { resetPagination } from '../actions/pagination';
-import {
-  queryOptionsExecute,
-  queryOptionsToggleReduce,
-  queryOptionsUpdateGroupLevel,
-  queryOptionsToggleByKeys,
-  queryOptionsToggleBetweenKeys,
-  queryOptionsUpdateBetweenKeys,
-  queryOptionsUpdateByKeys,
-  queryOptionsToggleDescending,
-  queryOptionsUpdateSkip,
-  queryOptionsUpdateLimit,
-  queryOptionsToggleIncludeDocs,
-  queryOptionsToggleVisibility,
-  queryOptionsFilterOnlyDdocs,
-  queryOptionsRemoveFilterOnlyDdocs,
-  queryOptionsToggleStable,
-  queryOptionsChangeUpdate,
-} from '../actions/queryoptions';
-import {
-  getQueryOptionsPanel,
-  getFetchParams,
-  getQueryOptionsParams,
-  getPerPage,
-  getSelectedLayout
-} from '../reducers';
-
-const showReduce = (designDocs, selectedNavItem) => {
-  return DocHelpers.selectedViewContainsReduceFunction(designDocs, selectedNavItem);
-};
-
-const enableStable = (designDocs, selectedNavItem, isDbPartitioned) => {
-  if (DocHelpers.isViewSelected(selectedNavItem)) {
-    const enableStable = !DocHelpers.selectedItemIsPartitionedView(designDocs, selectedNavItem, isDbPartitioned);
-    return enableStable;
-  }
-  return true;
-};
-
-const mapStateToProps = ({indexResults, sidebar, databases}, ownProps) => {
-  const queryOptionsPanel = getQueryOptionsPanel(indexResults);
-  return {
-    contentVisible: queryOptionsPanel.isVisible,
-    includeDocs: queryOptionsPanel.includeDocs,
-    showReduce: showReduce(sidebar.designDocList, ownProps.selectedNavItem),
-    reduce: queryOptionsPanel.reduce,
-    groupLevel: queryOptionsPanel.groupLevel,
-    showByKeys: queryOptionsPanel.showByKeys,
-    showBetweenKeys: queryOptionsPanel.showBetweenKeys,
-    betweenKeys: queryOptionsPanel.betweenKeys,
-    byKeys: queryOptionsPanel.byKeys,
-    descending: queryOptionsPanel.descending,
-    skip: queryOptionsPanel.skip,
-    limit: queryOptionsPanel.limit,
-    enableStable: enableStable(sidebar.designDocList, ownProps.selectedNavItem, databases.isDbPartitioned),
-    stable: queryOptionsPanel.stable,
-    update: queryOptionsPanel.update,
-    fetchParams: getFetchParams(indexResults),
-    queryOptionsParams: getQueryOptionsParams(indexResults),
-    perPage: getPerPage(indexResults),
-    selectedLayout: getSelectedLayout(indexResults),
-    ddocsOnly: ownProps.ddocsOnly
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    resetPagination: (perPage) => {
-      dispatch(resetPagination(perPage));
-    },
-    queryOptionsToggleReduce: (previousReduce) => {
-      dispatch(queryOptionsToggleReduce(previousReduce));
-    },
-    queryOptionsUpdateGroupLevel: (newGroupLevel) => {
-      dispatch(queryOptionsUpdateGroupLevel(newGroupLevel));
-    },
-    queryOptionsToggleByKeys: (previousShowByKeys) => {
-      dispatch(queryOptionsToggleByKeys(previousShowByKeys));
-    },
-    queryOptionsToggleBetweenKeys: (previousShowBetweenKeys) => {
-      dispatch(queryOptionsToggleBetweenKeys(previousShowBetweenKeys));
-    },
-    queryOptionsUpdateBetweenKeys: (newBetweenKeys) => {
-      dispatch(queryOptionsUpdateBetweenKeys(newBetweenKeys));
-    },
-    queryOptionsUpdateByKeys: (newByKeys) => {
-      dispatch(queryOptionsUpdateByKeys(newByKeys));
-    },
-    queryOptionsToggleDescending: (previousDescending) => {
-      dispatch(queryOptionsToggleDescending(previousDescending));
-    },
-    queryOptionsUpdateSkip: (newSkip) => {
-      dispatch(queryOptionsUpdateSkip(newSkip));
-    },
-    queryOptionsUpdateLimit: (newLimit) => {
-      dispatch(queryOptionsUpdateLimit(newLimit));
-    },
-    queryOptionsToggleIncludeDocs: (previousIncludeDocs) => {
-      dispatch(queryOptionsToggleIncludeDocs(previousIncludeDocs));
-    },
-    queryOptionsToggleVisibility: (newVisibility) => {
-      dispatch(queryOptionsToggleVisibility(newVisibility));
-    },
-    queryOptionsExecute: (queryOptionsParams, perPage) => {
-      dispatch(queryOptionsExecute(ownProps.queryDocs, queryOptionsParams, perPage));
-    },
-    queryOptionsApplyFilterOnlyDdocs: () => {
-      dispatch(queryOptionsFilterOnlyDdocs());
-    },
-    queryOptionsRemoveFilterOnlyDdocs: () => {
-      dispatch(queryOptionsRemoveFilterOnlyDdocs());
-    },
-
-    queryOptionsToggleStable: previous =>{
-      dispatch(queryOptionsToggleStable(previous));
-    },
-
-    queryOptionsChangeUpdate: stale => {
-      dispatch(queryOptionsChangeUpdate(stale));
-    },
-    changeLayout: (newLayout) => {
-      dispatch(changeLayout(newLayout));
-    },
-    resetState: () => {
-      dispatch(resetState());
-    }
-  };
-};
-
-const QueryOptionsContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(QueryOptions);
-
-export default QueryOptionsContainer;
-
-QueryOptionsContainer.propTypes = {
-  queryDocs: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/helpers/json-view.js b/app/addons/documents/index-results/helpers/json-view.js
deleted file mode 100644
index 3d1f858..0000000
--- a/app/addons/documents/index-results/helpers/json-view.js
+++ /dev/null
@@ -1,49 +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.
-
-import { hasBulkDeletableDoc, getDocUrl, getDocId, getDocRev } from "./shared-helpers";
-import MangoHelper from "../../mango/mango.helper";
-
-export const getJsonViewData = (docs, { databaseName, docType, deleteEnabled = true }) => {
-
-  // expand on this when refactoring views to use redux
-  const stagedResults = docs.map((doc) => {
-    if (docType === "MangoIndex") {
-      return {
-        header: MangoHelper.getIndexName(doc),
-        content: MangoHelper.getIndexContent(doc),
-        id: doc.type === 'special' ? '_all_docs' : doc.ddoc,
-        keylabel: '',
-        url: doc.id ? getDocUrl('app', doc.id, databaseName) : null,
-        isDeletable: deleteEnabled ? doc.type !== 'special' : false,
-        isEditable: false
-      };
-    }
-    const docID = getDocId(doc, docType);
-    return {
-      header: docID,
-      content: JSON.stringify(doc, null, ' '),
-      id: docID || (doc.key && doc.key.toString()),
-      _rev: getDocRev(doc, docType),
-      keylabel: 'id',
-      url: docID ? getDocUrl('app', docID, databaseName) : null,
-      isDeletable: deleteEnabled,
-      isEditable: true
-    };
-  });
-
-  return {
-    displayedFields: null,
-    hasBulkDeletableDoc: hasBulkDeletableDoc(docs, docType),
-    results: stagedResults
-  };
-};
diff --git a/app/addons/documents/index-results/helpers/shared-helpers.js b/app/addons/documents/index-results/helpers/shared-helpers.js
deleted file mode 100644
index 86d139b..0000000
--- a/app/addons/documents/index-results/helpers/shared-helpers.js
+++ /dev/null
@@ -1,125 +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.
-
-import app from "../../../../app";
-import FauxtonAPI from "../../../../core/api";
-import Constants from '../../constants';
-
-const getDocUrl = (context, id, databaseName) => {
-  if (context === undefined) {
-    context = 'server';
-  }
-
-  // new without id make a POST to the DB and not a PUT on a DB
-  let safeId = app.utils.getSafeIdForDoc(id);
-  if (!safeId) {
-    safeId = '';
-  }
-  const safeDatabaseName = encodeURIComponent(databaseName);
-
-  return FauxtonAPI.urls('document', context, safeDatabaseName, safeId, '?conflicts=true');
-};
-
-const isJSONDocEditable = (doc, docType) => {
-
-  if (!doc) {
-    return;
-  }
-
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return false;
-  }
-
-  if (!Object.keys(doc).length) {
-    return false;
-  }
-
-  if (!doc._id) {
-    return false;
-  }
-
-  return true;
-};
-
-const isJSONDocBulkDeletable = (doc, docType) => {
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return doc.type !== 'special';
-  }
-  const result = (doc._id || doc.id) && (doc._rev || (doc.value && doc.value.rev));
-  return !!result;
-};
-
-const hasBulkDeletableDoc = (docs, docType) => {
-  const doc = docs.find((doc) => {
-    return isJSONDocBulkDeletable(doc, docType);
-  });
-
-  return !!doc;
-};
-
-// if we've previously set the perPage in local storage, default to that.
-const getDefaultPerPage = () => {
-  if (window.localStorage) {
-    const storedPerPage = app.utils.localStorageGet('fauxton:perpageredux');
-    if (storedPerPage) {
-      return parseInt(storedPerPage, 10);
-    }
-  }
-  return FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE;
-};
-
-const isGhostDoc = (doc) => {
-  // ghost docs are empty results where all properties were
-  // filtered away by mango
-  return !doc || !doc.attributes || !Object.keys(doc.attributes).length;
-};
-
-const getDocId = (doc, docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW) => {
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) {
-    return doc.id || doc._id;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return doc.type === 'special' ? '_all_docs' : doc.ddoc;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-    return doc._id;
-  }
-  return doc.id || doc._id;
-};
-
-const getDocRev = (doc, docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW) => {
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) {
-    if (doc.value) {
-      return doc.value.rev;
-    }
-    return doc._rev;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return undefined;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-    return doc._rev;
-  }
-  return undefined;
-};
-
-const errorReason = (error) => {
-  return 'Reason: ' + ((error && error.message) || 'n/a');
-};
-
-export {
-  getDocUrl,
-  isGhostDoc,
-  isJSONDocEditable,
-  isJSONDocBulkDeletable,
-  hasBulkDeletableDoc,
-  getDefaultPerPage,
-  getDocId,
-  getDocRev,
-  errorReason
-};
diff --git a/app/addons/documents/index-results/helpers/table-view.js b/app/addons/documents/index-results/helpers/table-view.js
deleted file mode 100644
index bb735ce..0000000
--- a/app/addons/documents/index-results/helpers/table-view.js
+++ /dev/null
@@ -1,181 +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.
-
-import Constants from "../../constants";
-import {
-  isJSONDocBulkDeletable,
-  isJSONDocEditable,
-  hasBulkDeletableDoc,
-  getDocUrl,
-  getDocId,
-  getDocRev
-} from "./shared-helpers";
-
-export const getPseudoSchema = (docs) => {
-  let cache = [];
-
-  docs.forEach((doc) => {
-    Object.keys(doc).forEach(function (k) {
-      cache.push(k);
-    });
-  });
-
-  cache = _.uniq(cache);
-
-  // always begin with _id
-  let i = cache.indexOf('_id');
-  if (i !== -1) {
-    cache.splice(i, 1);
-    cache.unshift('_id');
-  }
-
-  return cache;
-};
-
-export const getPrioritizedFields = (docs, max) => {
-  let res = docs.reduce((acc, el) => {
-    acc = acc.concat(Object.keys(el));
-    return acc;
-  }, []);
-
-  res = _.countBy(res, (el) => {
-    return el;
-  });
-
-  delete res.id;
-  delete res._rev;
-
-  res = Object.keys(res).reduce((acc, el) => {
-    acc.push([res[el], el]);
-    return acc;
-  }, []);
-
-  res = sortByTwoFields(res);
-  res = res.slice(0, max);
-
-  return res.reduce((acc, el) => {
-    acc.push(el[1]);
-    return acc;
-  }, []);
-};
-
-export const sortByTwoFields = (elements) => {
-  // given:
-  // var a = [[2, "b"], [3, "z"], [1, "a"], [3, "a"]]
-  // it sorts to:
-  // [[3, "a"], [3, "z"], [2, "b"], [1, "a"]]
-  // note that the arrays with 3 got the first two arrays
-  // _and_ that the second values in the array with 3 are also sorted
-
-  const _recursiveSort = (a, b, index) => {
-    if (a[index] === b[index]) {
-      return index < 2 ? _recursiveSort(a, b, index + 1) : 0;
-    }
-
-    // second elements asc
-    if (index === 1) {
-      return (a[index] < b[index]) ? -1 : 1;
-    }
-
-    // first elements desc
-    return (a[index] < b[index]) ? 1 : -1;
-  };
-
-  return elements.sort((a, b) => {
-    return _recursiveSort(a, b, 0);
-  });
-};
-
-export const getNotSelectedFields = (selectedFields, allFields) => {
-  const without = _.without.bind(this, allFields);
-  return without.apply(this, selectedFields);
-};
-
-export const getFullTableViewData = (docs, options) => {
-  let notSelectedFieldsTableView = null,
-      selectedFieldsTableView = options.selectedFieldsTableView,
-      showAllFieldsTableView = options.showAllFieldsTableView,
-      schema;  // array containing the unique attr keys in the results.  always begins with _id.
-
-  // only use the "doc" attribute as this resulted from an include_docs fetch
-  const normalizedDocs = docs.map((doc) => { return doc.doc || doc; });
-  // build the schema container based on the normalized data
-  schema = getPseudoSchema(normalizedDocs);
-
-  // if we don't know what attr/columns to display, build the list
-  if (selectedFieldsTableView && selectedFieldsTableView.length === 0) {
-    selectedFieldsTableView = getPrioritizedFields(normalizedDocs, 5);
-  }
-
-  // set the notSelectedFields to the subset excluding meta and selected attributes
-  const schemaWithoutMetaDataFields = _.without(schema, '_attachments');
-  notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
-
-  // if we're showing all attr/columns, we revert the notSelectedFields to null and set
-  // the selected fields to everything excluding meta.
-  if (showAllFieldsTableView) {
-    notSelectedFieldsTableView = null;
-    selectedFieldsTableView = schemaWithoutMetaDataFields;
-  }
-
-  return {
-    schema,
-    normalizedDocs,
-    selectedFieldsTableView,
-    notSelectedFieldsTableView
-  };
-};
-
-export const getMetaDataTableView = (docs) => {
-  const schema = getPseudoSchema(docs);
-  return {
-    schema,
-    normalizedDocs: docs,  // no need to massage the docs for metadata
-    selectedFieldsTableView: schema,
-    notSelectedFieldsTableView: null
-  };
-};
-
-export const getTableViewData = (docs, options) => {
-  const isMetaData = Constants.LAYOUT_ORIENTATION.METADATA === options.selectedLayout;
-  const {
-    schema,
-    normalizedDocs,
-    selectedFieldsTableView,
-    notSelectedFieldsTableView
-  } = isMetaData ? getMetaDataTableView(docs) : getFullTableViewData(docs, options);
-
-  const res = normalizedDocs.map(function (doc) {
-    return {
-      content: doc,
-      id: getDocId(doc, options.docType),
-      _rev: getDocRev(doc, options.docType),
-      header: '',
-      keylabel: '',
-      url: doc._id || doc.id ? getDocUrl('app', doc._id || doc.id, options.databaseName) : null,
-      isDeletable: options.deleteEnabled ? isJSONDocBulkDeletable(doc, options.docType) : false,
-      isEditable: isJSONDocEditable(doc, options.docType)
-    };
-  });
-
-  return {
-    notSelectedFields: notSelectedFieldsTableView,
-    selectedFields: selectedFieldsTableView,
-    hasBulkDeletableDoc: options.deleteEnabled ? hasBulkDeletableDoc(normalizedDocs, options.docType) : false,
-    schema: schema,
-    results: res,
-    displayedFields: isMetaData ? null : {
-      shown: _.uniq(selectedFieldsTableView).length,
-      allFieldCount: _.without(schema, '_attachments').length
-    }
-  };
-};
diff --git a/app/addons/documents/index-results/reducers.js b/app/addons/documents/index-results/reducers.js
deleted file mode 100644
index 817ae6e..0000000
--- a/app/addons/documents/index-results/reducers.js
+++ /dev/null
@@ -1,404 +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.
-
-import app from "../../../app";
-import ActionTypes from './actiontypes';
-import Constants from '../constants';
-import {getJsonViewData} from './helpers/json-view';
-import {getTableViewData} from './helpers/table-view';
-import {getDefaultPerPage, getDocId, isJSONDocBulkDeletable} from './helpers/shared-helpers';
-
-const initialState = {
-  noResultsWarning: '',
-  docs: [],  // raw documents returned from couch
-  selectedDocs: [],  // documents selected for manipulation
-  isLoading: false,
-  tableView: {
-    selectedFieldsTableView: [],  // current columns to display
-    showAllFieldsTableView: false, // do we show all possible columns?
-  },
-  isEditable: true,  // can the user manipulate the results returned?
-  selectedLayout: Constants.LAYOUT_ORIENTATION.METADATA,
-  textEmptyIndex: 'No Documents Found',
-  docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-  resultsStyle: loadStyle(),
-  fetchParams: {
-    limit: getDefaultPerPage() + 1,
-    skip: 0
-  },
-  pagination: {
-    pageStart: 1,  // index of first doc in this page of results
-    currentPage: 1,  // what page of results are we showing?
-    perPage: getDefaultPerPage(),
-    canShowNext: false  // flag indicating if we can show a next page
-  },
-  queryOptionsPanel: {
-    isVisible: false,
-    showByKeys: false,
-    showBetweenKeys: false,
-    includeDocs: false,
-    betweenKeys: {
-      include: true,
-      startkey: '',
-      endkey: ''
-    },
-    byKeys: '',
-    descending: false,
-    skip: '',
-    limit: 'none',
-    reduce: false,
-    groupLevel: 'exact',
-    showReduce: false,
-    stable: false,
-    update: 'true'
-  }
-};
-
-function loadStyle() {
-  let style = app.utils.localStorageGet('fauxton:results_style');
-  if (!style) {
-    style = {
-      textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED,
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    };
-  }
-  return style;
-}
-
-function storeStyle(style) {
-  app.utils.localStorageSet('fauxton:results_style', style);
-}
-
-export default function resultsState(state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.INDEX_RESULTS_SET_STYLE:
-      const newStyle = {
-        ...state.resultsStyle,
-        ...action.resultsStyle
-      };
-      storeStyle(newStyle);
-      return {
-        ...state,
-        resultsStyle: newStyle
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE:
-      return {
-        ...initialState,
-        noResultsWarning: state.noResultsWarning,
-        selectedLayout: state.selectedLayout,
-        selectedDocs: [],
-        fetchParams: {
-          limit: getDefaultPerPage() + 1,
-          skip: 0
-        },
-        pagination: Object.assign({}, initialState.pagination, {
-          perPage: state.pagination.perPage
-        }),
-        queryOptionsPanel: Object.assign({}, initialState.queryOptionsPanel,
-          state.queryOptionsPanel, {reduce: false, groupLevel: 'exact', showReduce: false}),
-        isLoading: false,
-        resultsStyle: state.resultsStyle
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING:
-      return {
-        ...state,
-        isLoading: true
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED:
-      return Object.assign({}, state, {
-        noResultsWarning: 'The selected index does not support partitions. Switch back to global mode.'
-      });
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY:
-      return Object.assign({}, state, {
-        noResultsWarning: 'The selected index requires a partition key. Use the selector at the top to enter a partition key.'
-      });
-
-    case ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS:
-      return {
-        ...state,
-        selectedDocs: action.selectedDocs
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS:
-      let selectedLayout = state.selectedLayout;
-      // Change layout if it's set to METADATA because this option is not available for Mango queries
-      if (action.docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-        if (state.selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA) {
-          selectedLayout = Constants.LAYOUT_ORIENTATION.TABLE;
-        }
-      }
-      return {
-        ...state,
-        docs: action.docs,
-        isLoading: false,
-        noResultsWarning: '',
-        isEditable: true, //TODO: determine logic for this
-        fetchParams: Object.assign({}, state.fetchParams, action.params),
-        pagination: Object.assign({}, state.pagination, {
-          canShowNext: action.canShowNext
-        }),
-        docType: action.docType,
-        selectedLayout: selectedLayout,
-        executionStats: action.executionStats,
-        warning: action.warning
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT:
-      return {
-        ...state,
-        selectedLayout: action.layout
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS:
-      return {
-        ...state,
-        tableView: Object.assign({}, state.tableView, {
-          showAllFieldsTableView: !state.tableView.showAllFieldsTableView,
-          cachedFieldsTableView: state.tableView.selectedFieldsTableView
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE:
-      return {
-        ...state,
-        tableView: Object.assign({}, state.tableView, {
-          selectedFieldsTableView: action.selectedFieldsTableView
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE:
-      app.utils.localStorageSet('fauxton:perpageredux', action.perPage);
-      return {
-        ...state,
-        pagination: Object.assign({}, initialState.pagination, {
-          perPage: action.perPage
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT:
-      return {
-        ...state,
-        pagination: Object.assign({}, state.pagination, {
-          pageStart: state.pagination.pageStart + state.pagination.perPage,
-          currentPage: state.pagination.currentPage + 1
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS:
-      return {
-        ...state,
-        pagination: Object.assign({}, state.pagination, {
-          pageStart: state.pagination.pageStart - state.pagination.perPage,
-          currentPage: state.pagination.currentPage - 1
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS:
-      // includeDocs or reduce should be mutually exclusive
-      if (action.options.includeDocs && action.options.reduce) {
-        // includeDocs has precedence if both are set at the same time
-        action.options.reduce = false;
-      } else if (action.options.includeDocs && state.queryOptionsPanel.reduce) {
-        // Switch off reduce when includeDocs is being set to true
-        action.options.reduce = false;
-      } else if (action.options.reduce && state.queryOptionsPanel.includeDocs) {
-        // Switch off includeDocs when reduce is being set to true
-        action.options.includeDocs = false;
-      }
-      return {
-        ...state,
-        queryOptionsPanel: Object.assign({}, state.queryOptionsPanel, action.options)
-      };
-
-    default:
-      return state;
-  }
-}
-
-// we don't want to muddy the waters with autogenerated mango docs
-export const removeGeneratedMangoDocs = (doc) => {
-  return doc.language !== 'query';
-};
-
-// transform the docs in to a state ready for rendering on the page
-export const getDataForRendering = (state, databaseName, deleteEnabled = true) => {
-  const {docs} = state;
-  const options = {
-    databaseName: databaseName,
-    selectedLayout: state.selectedLayout,
-    selectedFieldsTableView: state.tableView.selectedFieldsTableView,
-    showAllFieldsTableView: state.tableView.showAllFieldsTableView,
-    docType: state.docType,
-    deleteEnabled: deleteEnabled
-  };
-
-  const docsWithoutGeneratedMangoDocs = docs.filter(removeGeneratedMangoDocs);
-
-  if (Constants.LAYOUT_ORIENTATION.JSON === options.selectedLayout) {
-    return getJsonViewData(docsWithoutGeneratedMangoDocs, options);
-  }
-  return getTableViewData(docsWithoutGeneratedMangoDocs, options);
-
-};
-
-// Should we show the input checkbox where the user can elect to display
-// all possible columns in the table view?
-export const getShowPrioritizedEnabled = (state) => {
-  return state.selectedLayout === Constants.LAYOUT_ORIENTATION.TABLE;
-};
-
-// returns the index of the last result in the total possible results.
-export const getPageEnd = (state) => {
-  if (!getHasResults(state)) {
-    return false;
-  }
-  return state.pagination.pageStart + state.docs.length - 1;
-};
-
-// do we have any docs in the state tree currently?
-export const getHasResults = (state) => {
-  return !state.isLoading && state.docs.length > 0;
-};
-
-// helper function to determine if all selectable docs on the current page are selected.
-export const getAllDocsSelected = (state) => {
-  if (state.docs.length === 0 || state.selectedDocs.length === 0) {
-    return false;
-  }
-
-  // Iterate over the results and determine if each one is included
-  // in the selectedDocs array.
-  //
-  // This is O(n^2) which makes me unhappy.  We know
-  // that the number of docs will never be that large due to the
-  // per page limitations we force on the user.
-  //
-  // We need to use a for loop here instead of a forEach since there
-  // is no way to short circuit Array.prototype.forEach.
-
-  for (let i = 0; i < state.docs.length; i++) {
-    const doc = state.docs[i];
-    if (!isJSONDocBulkDeletable(doc, state.docType)) {
-      //Only check selectable docs
-      continue;
-    }
-    // Helper function for finding index of a doc in the current
-    // selected docs list.
-    const exists = (selectedDoc) => {
-      return getDocId(doc, state.docType) === selectedDoc._id;
-    };
-
-    if (!state.selectedDocs.some(exists)) {
-      return false;
-    }
-  }
-  return true;
-};
-
-// are there any documents selected in the state tree?
-export const getHasDocsSelected = (state) => {
-  return state.selectedDocs.length > 0;
-};
-
-// how many documents are selected in the state tree?
-export const getNumDocsSelected = (state) => {
-  return state.selectedDocs.length;
-};
-
-// is there a previous page of results?  We only care if the current page
-// of results is greater than 1 (i.e. the first page of results).
-export const getCanShowPrevious = (state) => {
-  return state.pagination.currentPage > 1;
-};
-
-export const getDisplayedFields = (state, databaseName) => {
-  return getDataForRendering(state, databaseName).displayedFields || {};
-};
-
-export const getQueryOptionsParams = (state) => {
-  const {queryOptionsPanel} = state;
-  const params = {};
-
-  if (queryOptionsPanel.includeDocs) {
-    params.include_docs = queryOptionsPanel.includeDocs;
-  }
-
-  if (queryOptionsPanel.showBetweenKeys) {
-    const betweenKeys = queryOptionsPanel.betweenKeys;
-    params.inclusive_end = betweenKeys.include;
-    if (betweenKeys.startkey && betweenKeys.startkey != '') {
-      params.start_key = betweenKeys.startkey;
-    }
-    if (betweenKeys.endkey && betweenKeys.endkey != '') {
-      params.end_key = betweenKeys.endkey;
-    }
-  } else if (queryOptionsPanel.showByKeys) {
-    if (queryOptionsPanel.byKeys.trim()) {
-      params.keys = queryOptionsPanel.byKeys.replace(/\r?\n/g, '');
-    }
-  }
-
-  if (queryOptionsPanel.limit !== 'none') {
-    params.limit = parseInt(queryOptionsPanel.limit, 10);
-  }
-
-  if (queryOptionsPanel.skip) {
-    params.skip = parseInt(queryOptionsPanel.skip, 10);
-  }
-
-  if (queryOptionsPanel.descending) {
-    params.descending = queryOptionsPanel.descending;
-  }
-
-  if (queryOptionsPanel.reduce) {
-    params.reduce = true;
-
-    if (queryOptionsPanel.groupLevel === 'exact') {
-      params.group = true;
-    } else {
-      params.group_level = queryOptionsPanel.groupLevel;
-    }
-  }
-
-  // Only add UPDATE and STABLE parameters when different than
-  // their respective default values. This prevent errors in
-  // older CouchDB versions that don't support these parameters.
-  if (queryOptionsPanel.update !== undefined && queryOptionsPanel.update !== 'true') {
-    params.update = queryOptionsPanel.update;
-  }
-  if (queryOptionsPanel.stable === true) {
-    params.stable = queryOptionsPanel.stable;
-  }
-
-  return params;
-};
-
-// Here be simple getters
-export const getDocs = state => state.docs;
-export const getSelectedDocs = state => state.selectedDocs;
-export const getIsLoading = state => state.isLoading;
-export const getIsEditable = state => state.isEditable;
-export const getSelectedLayout = state => state.selectedLayout;
-export const getTextEmptyIndex = state => state.textEmptyIndex;
-export const getDocType = state => state.docType;
-export const getPageStart = state => state.pagination.pageStart;
-export const getPrioritizedEnabled = state => state.tableView.showAllFieldsTableView;
-export const getCanShowNext = state => state.pagination.canShowNext;
-export const getQueryOptionsPanel = state => state.queryOptionsPanel;
-export const getPerPage = state => state.pagination.perPage;
-export const getFetchParams = state => state.fetchParams;
-export const getResultsStyle = state => state.resultsStyle;
diff --git a/app/addons/documents/layouts.js b/app/addons/documents/layouts.js
deleted file mode 100644
index 9c39f13..0000000
--- a/app/addons/documents/layouts.js
+++ /dev/null
@@ -1,290 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import SidebarControllerContainer from "./sidebar/SidebarControllerContainer";
-import HeaderDocsLeft from './components/header-docs-left';
-import ChangesContainer from './changes/components/ChangesContainer';
-import ChangesTabContentContainer from './changes/components/ChangesTabContentContainer';
-import IndexEditorComponents from "./index-editor/components";
-import DesignDocInfoContainer from './designdocinfo/components/DesignDocInfoContainer';
-import RightAllDocsHeader from './components/header-docs-right';
-import IndexResultsContainer from './index-results/containers/IndexResultsContainer';
-import PaginationContainer from './index-results/containers/PaginationContainer';
-import ApiBarContainer from './index-results/containers/ApiBarContainer';
-import { queryAllDocs, queryMapReduceView } from './index-results/api';
-import PartitionKeySelectorContainer from './partition-key/container';
-import Constants from './constants';
-import Helpers from './helpers';
-
-export const TabsSidebarHeader = ({
-  hideQueryOptions,
-  hideJumpToDoc,
-  database,
-  dbName,
-  dropDownLinks,
-  docURL,
-  endpoint,
-  endpointAddQueryOptions,
-  fetchUrl,
-  ddocsOnly,
-  queryDocs,
-  selectedNavItem,
-  showPartitionKeySelector,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  let partKeySelector = null;
-  if (showPartitionKeySelector) {
-    partKeySelector = (<PartitionKeySelectorContainer
-      databaseName={dbName}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={onPartitionKeySelected}
-      onGlobalModeSelected={onGlobalModeSelected}
-      globalMode={globalMode}/>
-    );
-  }
-
-  return (
-    <header className="two-panel-header">
-      <div className="flex-layout flex-row">
-        <div id="header-docs-left">
-          <HeaderDocsLeft
-            dbName={dbName}
-            partitionKey={partitionKey}
-            dropDownLinks={dropDownLinks}
-          />
-        </div>
-        <div className="right-header-wrapper flex-layout flex-row flex-body">
-          <div style={{flex:1, padding: '18px 6px 12px 12px'}}>
-            {partKeySelector}
-          </div>
-          <div id="right-header" className="flex-fill">
-            <RightAllDocsHeader
-              hideQueryOptions={hideQueryOptions}
-              hideJumpToDoc={hideJumpToDoc}
-              database={database}
-              fetchUrl={fetchUrl}
-              ddocsOnly={ddocsOnly}
-              queryDocs={queryDocs}
-              partitionKey={partitionKey}
-              selectedNavItem={selectedNavItem} />
-          </div>
-          <ApiBarContainer docURL={docURL} endpoint={endpoint} endpointAddQueryOptions={endpointAddQueryOptions} />
-          <div id="notification-center-btn" className="flex-fill">
-            <NotificationCenterButton />
-          </div>
-        </div>
-      </div>
-    </header>
-  );
-};
-
-TabsSidebarHeader.propTypes = {
-  dbName: PropTypes.string.isRequired,
-  dropDownLinks: PropTypes.array.isRequired,
-  docURL: PropTypes.string,
-  endpoint: PropTypes.string,
-  showIncludeAllDocs: PropTypes.bool,
-  hideQueryOptions: PropTypes.bool,
-  hideJumpToDoc: PropTypes.bool,
-  database: PropTypes.object.isRequired,
-  queryDocs: PropTypes.func,
-  selectedNavItem: PropTypes.object,
-  showPartitionKeySelector: PropTypes.bool.isRequired,
-  partitionKey: PropTypes.string,
-  onPartitionKeySelected: PropTypes.func,
-  onGlobalModeSelected: PropTypes.func,
-  globalMode: PropTypes.bool
-};
-
-TabsSidebarHeader.defaultProps = {
-  hideHeaderBar: false,
-  showPartitionKeySelector: false
-};
-
-export const TabsSidebarContent = ({
-  hideFooter,
-  lowerContent,
-  upperContent,
-  fetchUrl,
-  databaseName,
-  queryDocs,
-  selectedNavItem,
-  partitionKey
-}) => {
-  return (
-    <div className="with-sidebar tabs-with-sidebar content-area">
-      <aside id="sidebar-content" className="scrollable">
-        <SidebarControllerContainer selectedNavItem={selectedNavItem} selectedPartitionKey={partitionKey}/>
-      </aside>
-      <section id="dashboard-content" className="flex-layout flex-col">
-        <div id="dashboard-upper-content">
-          {upperContent}
-        </div>
-        <div id="dashboard-lower-content" className="flex-body">
-          {lowerContent}
-        </div>
-        <div id="footer">
-          {!hideFooter ? <PaginationContainer
-            databaseName={databaseName}
-            fetchUrl={fetchUrl}
-            queryDocs={queryDocs} /> : null}
-        </div>
-      </section>
-    </div>
-  );
-};
-TabsSidebarContent.defaultProps = {
-  hideFooter: false
-};
-
-TabsSidebarContent.propTypes = {
-  hideFooter: PropTypes.bool,
-  lowerContent: PropTypes.object,
-  upperContent: PropTypes.object,
-  selectedNavItem: PropTypes.object
-};
-
-export const DocsTabsSidebarLayout = ({
-  database,
-  designDocs,
-  docURL,
-  endpoint,
-  dbName,
-  dropDownLinks,
-  fetchUrl,
-  ddocsOnly,
-  deleteEnabled = true,
-  selectedNavItem,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  const partitionFilter = selectedNavItem.navItem === 'all-docs' && partitionKey ? partitionKey : '';
-  let queryDocs = (params) => { return queryAllDocs(fetchUrl, partitionFilter, params); };
-  if (Helpers.isViewSelected(selectedNavItem)) {
-    queryDocs = (params) => { return queryMapReduceView(fetchUrl, params); };
-  }
-  const lowerContent = <IndexResultsContainer
-    fetchUrl={fetchUrl}
-    designDocs={designDocs}
-    ddocsOnly={ddocsOnly}
-    databaseName={dbName}
-    fetchAtStartup={true}
-    queryDocs={queryDocs}
-    docType={Constants.INDEX_RESULTS_DOC_TYPE.VIEW}
-    deleteEnabled={deleteEnabled}
-    partitionKey={partitionKey} />;
-
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        endpointAddQueryOptions={true}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        fetchUrl={fetchUrl}
-        ddocsOnly={ddocsOnly}
-        queryDocs={queryDocs}
-        selectedNavItem={selectedNavItem}
-        showPartitionKeySelector={!ddocsOnly}
-        partitionKey={partitionKey}
-        onPartitionKeySelected={onPartitionKeySelected}
-        onGlobalModeSelected={onGlobalModeSelected}
-        globalMode={globalMode}
-      />
-      <TabsSidebarContent
-        lowerContent={lowerContent}
-        fetchUrl={fetchUrl}
-        databaseName={dbName}
-        queryDocs={queryDocs}
-        selectedNavItem={selectedNavItem}
-        partitionKey={partitionKey}
-      />
-    </div>
-  );
-};
-
-export const ChangesSidebarLayout = ({ docURL, database, endpoint, dbName, dropDownLinks, selectedNavItem, partitionKey }) => {
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        hideQueryOptions={true}
-      />
-      <TabsSidebarContent
-        upperContent={<ChangesTabContentContainer />}
-        lowerContent={<ChangesContainer databaseName={dbName}/>}
-        hideFooter={true}
-        selectedNavItem={selectedNavItem}
-        partitionKey={partitionKey}
-      />
-    </div>
-  );
-};
-
-export const ViewsTabsSidebarLayout = ({showEditView, database, docURL, endpoint,
-  dbName, dropDownLinks, selectedNavItem, designDocInfo, partitionKey }) => {
-
-  const content = showEditView ?
-    <IndexEditorComponents.IndexEditorContainer partitionKey={partitionKey}/> :
-    <DesignDocInfoContainer
-      designDocInfo={designDocInfo}
-      designDocName={selectedNavItem.designDocName}/>;
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        endpoint={endpoint}
-        docURL={docURL}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        partitionKey={partitionKey}
-        queryDocs={() => { }}
-        hideQueryOptions={true}
-        hideJumpToDoc={true}
-      />
-      <TabsSidebarContent
-        lowerContent={content}
-        hideFooter={true}
-        selectedNavItem={selectedNavItem}
-        partitionKey={partitionKey}
-      />
-    </div>
-  );
-};
-
-ViewsTabsSidebarLayout.defaultProps = {
-  showEditView: true
-};
-
-ViewsTabsSidebarLayout.propTypes = {
-  showEditView: PropTypes.bool,
-  docURL: PropTypes.string.isRequired,
-  endpoint: PropTypes.string,
-  dbName: PropTypes.string.isRequired,
-  dropDownLinks: PropTypes.array.isRequired,
-  designDocInfo: PropTypes.object
-};
diff --git a/app/addons/documents/mango/__tests__/mango.api.test.js b/app/addons/documents/mango/__tests__/mango.api.test.js
deleted file mode 100644
index 000235e..0000000
--- a/app/addons/documents/mango/__tests__/mango.api.test.js
+++ /dev/null
@@ -1,139 +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.
-
-import fetchMock from 'fetch-mock';
-import Constants from '../../constants';
-import * as MangoAPI from '../mango.api';
-import '../../base';
-
-describe('Mango API', () => {
-
-  const paginationLimit = 6;
-
-  afterEach(() => {
-    fetchMock.reset();
-  });
-
-  describe('mangoQueryDocs', () => {
-    it('returns document type INDEX_RESULTS_DOC_TYPE.MANGO_QUERY', () => {
-      fetchMock.mock("*", { times: 2 });
-      return MangoAPI.mangoQueryDocs('myDB', '', {}, {}).then((res) => {
-        expect(res.docType).toBe(Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY);
-      });
-    });
-  });
-
-  describe('mangoQuery', () => {
-    it('adds partition key to the query URL when one is set', () => {
-      fetchMock.postOnce('./myDB/_partition/part1/_find', {
-        status: 200,
-        body: { ok: true }
-      }).catch({
-        status: 500,
-        body: { ok: false }
-      });
-      return MangoAPI.mangoQuery('myDB', 'part1', {}, {}).then(() => {
-        expect(fetchMock.done()).toBe(true);
-      });
-    });
-
-    it('does not add partition key to the query URL when one is set', () => {
-      fetchMock.postOnce('./myDB/_find', {
-        status: 200,
-        body: { ok: true }
-      }).catch({
-        status: 500,
-        body: { ok: false }
-      });
-      return MangoAPI.mangoQuery('myDB', '', {}, {}).then(() => {
-        expect(fetchMock.done()).toBe(true);
-      });
-    });
-  });
-
-  describe('mergeFetchParams', () => {
-    it('adjusts the query "skip" field based on pagination fetch params', () => {
-      // 1st page and query's skip is zero
-      let mergedParams = MangoAPI.mergeFetchParams({skip: 0}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(0);
-
-      // 1st page and query's skip is non-zero
-      mergedParams = MangoAPI.mergeFetchParams({skip: 3}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(3);
-
-      // non-1st page and query's skip is zero
-      mergedParams = MangoAPI.mergeFetchParams({skip: 0}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(5);
-
-      // non-1st page and query's skip is non-zero
-      mergedParams = MangoAPI.mergeFetchParams({skip: 3}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(8);
-
-    });
-
-    it('uses ZERO when query limit is ZERO', () => {
-      const mergedParams = MangoAPI.mergeFetchParams({limit: 0}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(0);
-    });
-
-    it('uses pagination limit when query limit is not provided', () => {
-      const mergedParams = MangoAPI.mergeFetchParams({}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(paginationLimit);
-    });
-
-    it('uses pagination limit if query limit has not been reached', () => {
-      let mergedParams = MangoAPI.mergeFetchParams({limit: 50}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(paginationLimit);
-
-      mergedParams = MangoAPI.mergeFetchParams({limit: 50}, {skip: 15, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(paginationLimit);
-    });
-
-    it('respects query limit when value is lower than docs per page', () => {
-      const mergedParams = MangoAPI.mergeFetchParams({limit: 3}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(3);
-    });
-
-    it('respects query limit when value is greater than docs per page', () => {
-      // Simulates loading of 3rd page
-      const mergedParams = MangoAPI.mergeFetchParams({limit: 17}, {skip: 15, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(2);
-    });
-
-    it('respects query limit when value is a multipe of docs per page', () => {
-      // 1st page
-      let mergedParams = MangoAPI.mergeFetchParams({limit: 5}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(5);
-
-      // non-1st page
-      mergedParams = MangoAPI.mergeFetchParams({limit: 15}, {skip: 10, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(5);
-    });
-
-    it('works correctly with both skip and limit query params', () => {
-      // Simulates loading of 3rd page
-      const mergedParams = MangoAPI.mergeFetchParams({skip:10, limit: 17}, {skip: 15, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(2);
-      expect(mergedParams.skip).toBe(25);
-    });
-
-  });
-
-  describe('fetchIndexes', () => {
-    it('returns document type INDEX_RESULTS_DOC_TYPE.MANGO_INDEX', () => {
-      fetchMock.once("*", {});
-      return MangoAPI.fetchIndexes('myDB', {}).then((res) => {
-        expect(res.docType).toBe(Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX);
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/mango/__tests__/mango.components.test.js b/app/addons/documents/mango/__tests__/mango.components.test.js
deleted file mode 100644
index 738add6..0000000
--- a/app/addons/documents/mango/__tests__/mango.components.test.js
+++ /dev/null
@@ -1,246 +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.
-
-import { mount, shallow } from 'enzyme';
-import React from 'react';
-import { Provider } from 'react-redux';
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import thunk from 'redux-thunk';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../../core/api';
-import utils from '../../../../../test/mocha/testUtils';
-import databasesReducer from '../../../databases/reducers';
-import indexResultsReducer from '../../index-results/reducers';
-import Views from '../mango.components';
-import MangoQueryEditor from '../components/MangoQueryEditor';
-import MangoIndexEditor from '../components/MangoIndexEditor';
-import mangoReducer from '../mango.reducers';
-import '../../base';
-
-const restore = utils.restore;
-const databaseName = 'testdb';
-
-describe('MangoIndexEditorContainer', function () {
-
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({
-      mangoQuery: mangoReducer,
-      indexResults: indexResultsReducer,
-      databases: databasesReducer
-    }),
-    applyMiddleware(...middlewares)
-  );
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').withArgs('mango').returns('mock-url');
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.urls);
-  });
-
-  it('has a default index definition', function () {
-    const wrapper = mount(
-      <Provider store={store}>
-        <Views.MangoIndexEditorContainer
-          description="foo"
-          databaseName={databaseName} />
-      </Provider>
-    );
-
-    const indexEditor = wrapper.find(MangoIndexEditor);
-    expect(indexEditor.exists()).toBe(true);
-    if (indexEditor.exists()) {
-      const json = JSON.parse(indexEditor.props().queryIndexCode);
-      expect(json.index.fields[0]).toBe('foo');
-    }
-  });
-
-  it('shows partitioned option only for partitioned databases', function () {
-    const wrapper = mount(
-      <Provider store={store}>
-        <Views.MangoIndexEditorContainer
-          description="foo"
-          databaseName={databaseName} />
-      </Provider>
-    );
-    const indexEditor = wrapper.find(MangoIndexEditor);
-    expect(indexEditor.exists()).toBe(true);
-    if (indexEditor.exists()) {
-      const json = JSON.parse(indexEditor.props().queryIndexCode);
-      expect(json.index.fields[0]).toBe('foo');
-    }
-  });
-
-});
-
-describe('MangoIndexEditor', function () {
-  const defaultProps = {
-    isLoading: false,
-    databaseName: 'db1',
-    isDbPartitioned: false,
-    saveIndex: () => {},
-    queryIndexCode: '{ "selector": {} }',
-    partitionKey: '',
-    loadIndexTemplates: () => {},
-    clearResults: () => {},
-    loadIndexList: () => {}
-  };
-
-  it('shows partitioned option only for partitioned databases', function () {
-    const wrapperNotPartitioned = shallow(
-      <MangoIndexEditor
-        {...defaultProps}
-      />
-    );
-    expect(wrapperNotPartitioned.find('#js-partitioned-index').exists()).toBe(false);
-
-    const wrapperPartitioned = shallow(
-      <MangoIndexEditor
-        {...defaultProps}
-        isDbPartitioned={true}
-      />
-    );
-    expect(wrapperPartitioned.find('#js-partitioned-index').exists()).toBe(true);
-  });
-
-  it('does not add "partitioned" field for non-partitioned dbs', function () {
-    const saveIndexStub = sinon.stub();
-    const wrapper = mount(
-      <MangoIndexEditor
-        {...defaultProps}
-        saveIndex={saveIndexStub}
-      />
-    );
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(saveIndexStub);
-    const { indexCode } = saveIndexStub.firstCall.args[0];
-    expect(indexCode.length).toBeGreaterThan(0);
-    expect(indexCode).not.toMatch('"partitioned":');
-  });
-
-  it('adds "partitioned: true" field when creating a partitioned index', function () {
-    const saveIndexStub = sinon.stub();
-    const wrapper = mount(
-      <MangoIndexEditor
-        {...defaultProps}
-        isDbPartitioned={true}
-        saveIndex={saveIndexStub}
-      />
-    );
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(saveIndexStub);
-    const { indexCode } = saveIndexStub.firstCall.args[0];
-    expect(indexCode.length).toBeGreaterThan(0);
-    expect(indexCode).toMatch('"partitioned":true');
-  });
-
-  it('adds "partitioned: false" field when creating a global index', function () {
-    const saveIndexStub = sinon.stub();
-    const wrapper = mount(
-      <MangoIndexEditor
-        {...defaultProps}
-        isDbPartitioned={true}
-        saveIndex={saveIndexStub}
-      />
-    );
-    wrapper.find('#js-partitioned-index').simulate('change');
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(saveIndexStub);
-    const { indexCode } = saveIndexStub.firstCall.args[0];
-    expect(indexCode.length).toBeGreaterThan(0);
-    expect(indexCode).toMatch('"partitioned":false');
-  });
-});
-
-describe('MangoQueryEditorContainer', function () {
-
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({ mangoQuery: mangoReducer, indexResults: indexResultsReducer }),
-    applyMiddleware(...middlewares)
-  );
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').returns('mock-url');
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.urls);
-  });
-
-  it('has a default query', function () {
-    const wrapper = mount(
-      <Provider store={store}>
-        <Views.MangoQueryEditorContainer
-          description="foo"
-          editorTitle="mock-title"
-          databaseName={databaseName} />
-      </Provider>
-    );
-    const queryEditor = wrapper.find(MangoQueryEditor);
-    expect(queryEditor.exists()).toBe(true);
-    if (queryEditor.exists()) {
-      const query = JSON.parse(queryEditor.props().queryFindCode);
-      expect(query.selector).toHaveProperty('_id');
-    }
-  });
-});
-
-describe('MangoQueryEditor', function () {
-  const defaultProps = {
-    description: 'desc',
-    editorTitle: 'title',
-    queryFindCode: '{}',
-    queryFindCodeChanged: false,
-    databaseName: 'db1',
-    partitionKey: '',
-    runExplainQuery: () => {},
-    runQuery: () => {},
-    manageIndexes: () => {},
-    loadQueryHistory: () => {},
-    clearResults: () => {}
-  };
-
-  it('runs explain query with partition when one is set', function () {
-    const runExplainQueryStub = sinon.stub();
-    const wrapper = mount(
-      <MangoQueryEditor
-        {...defaultProps}
-        partitionKey='part1'
-        runExplainQuery={runExplainQueryStub}
-      />
-    );
-
-    wrapper.find('#explain-btn').simulate('click', { preventDefault: () => {} });
-    sinon.assert.called(runExplainQueryStub);
-    const { partitionKey } = runExplainQueryStub.firstCall.args[0];
-    expect(partitionKey).toBe('part1');
-  });
-
-  it('runs explain query with partition when one is set', function () {
-    const runQueryStub = sinon.stub();
-    const wrapper = mount(
-      <MangoQueryEditor
-        {...defaultProps}
-        partitionKey='part1'
-        runQuery={runQueryStub}
-      />
-    );
-
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(runQueryStub);
-    const { partitionKey } = runQueryStub.firstCall.args[0];
-    expect(partitionKey).toBe('part1');
-  });
-});
diff --git a/app/addons/documents/mango/components/ExecutionStats.js b/app/addons/documents/mango/components/ExecutionStats.js
deleted file mode 100644
index 48b815a..0000000
--- a/app/addons/documents/mango/components/ExecutionStats.js
+++ /dev/null
@@ -1,127 +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.
-import React from 'react';
-import PropTypes from 'prop-types';
-import { Popover, OverlayTrigger } from 'react-bootstrap';
-
-export default class ExecutionStats extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  humanizeDuration(milliseconds) {
-    if (milliseconds < 1000) {
-      return Math.round(milliseconds) + ' ms';
-    }
-    let seconds = milliseconds / 1000;
-    if (seconds < 60) {
-      return Math.floor(seconds) + ' seconds';
-    }
-    const minutes = Math.floor(seconds / 60);
-    seconds = Math.floor(seconds - (minutes * 60));
-
-    const minuteText = minutes > 1 ? 'minutes' : 'minute';
-    const secondsText = seconds > 1 ? 'seconds' : 'second';
-
-    return [minutes, ' ', minuteText, ', ', seconds, ' ', secondsText].join('');
-  }
-
-  getWarning(warnings) {
-    if (warnings) {
-      const lines = warnings.split('\n').map((warnText, i) => {
-        return <React.Fragment key={i}>{warnText}<br/></React.Fragment>;
-      });
-      return <span>{lines}</span>;
-    }
-  }
-
-  warningPopupComponent(warningText) {
-    if (warningText) {
-      return (<div className="warning">
-        <i className="fonticon-attention-circled"></i> {warningText}
-      </div>);
-    }
-  }
-
-  executionStatsLine(title, value, alwaysShow = false, units = "") {
-    if (typeof value === 'number') {
-      const hasValue = value === 0 && !alwaysShow ? "false" : "true";
-      return <div data-status={hasValue}>{title + ": "}<span className="value">{value.toLocaleString()} {units}</span></div>;
-    }
-    return null;
-  }
-
-  executionStatsPopupComponent(executionStats) {
-    if (!executionStats) return null;
-    return (
-      <div className="execution-stats-popup-component">
-        {/* keys examined always 0 so hide it for now */}
-        {/* {this.executionStatsLine("keys examined", executionStats.total_keys_examined)} */}
-        {this.executionStatsLine("documents examined", executionStats.total_docs_examined)}
-        {this.executionStatsLine("documents examined (quorum)", executionStats.total_quorum_docs_examined)}
-        {this.executionStatsLine("results returned", executionStats.results_returned, true)}
-        {this.executionStatsLine("execution time", Math.round(executionStats.execution_time_ms), false, "ms")}
-      </div>
-    );
-  }
-
-  popup(executionStats, warningText) {
-    return (
-      <Popover id="popover-execution-stats" title="Execution Statistics">
-        <div className="execution-stats-popup">
-          {this.executionStatsPopupComponent(executionStats)}
-          {this.warningPopupComponent(warningText)}
-        </div>
-      </Popover>
-    );
-  }
-
-  render() {
-    const {
-      executionStats,
-      warning
-    } = this.props;
-
-    const warningText = this.getWarning(warning);
-
-    let warningComponent = null;
-    if (warningText) {
-      warningComponent = <i className="fonticon-attention-circled"></i>;
-    }
-
-    let executionStatsComponent = null;
-    if (executionStats) {
-      executionStatsComponent = (
-        <span className="execution-stats-component">Executed in {this.humanizeDuration(executionStats.execution_time_ms)}</span>
-      );
-    } else if (warningText) {
-      executionStatsComponent = (
-        <span className="execution-stats-component">Warning</span>
-      );
-    }
-
-    const popup = this.popup(executionStats, warningText);
-    return (
-      <OverlayTrigger trigger={['hover', 'focus', 'click']} placement="right" overlay={popup}>
-        <span className="execution-stats">
-          {warningComponent}
-          {executionStatsComponent}
-        </span>
-      </OverlayTrigger>
-    );
-  }
-}
-
-ExecutionStats.propTypes = {
-  executionStats: PropTypes.object,
-  warning: PropTypes.string
-};
diff --git a/app/addons/documents/mango/components/ExplainPage.js b/app/addons/documents/mango/components/ExplainPage.js
deleted file mode 100644
index cf44918..0000000
--- a/app/addons/documents/mango/components/ExplainPage.js
+++ /dev/null
@@ -1,37 +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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from "react";
-
-export default class ExplainPage extends Component {
-  componentDidMount () {
-    prettyPrint();
-  }
-
-  componentDidUpdate () {
-    prettyPrint();
-  }
-
-  render () {
-    return (
-      <div>
-        <pre className="prettyprint">{JSON.stringify(this.props.explainPlan, null, ' ')}</pre>
-      </div>
-    );
-  }
-}
-
-ExplainPage.propTypes = {
-  explainPlan: PropTypes.object.isRequired
-};
diff --git a/app/addons/documents/mango/components/MangoIndexEditor.js b/app/addons/documents/mango/components/MangoIndexEditor.js
deleted file mode 100644
index 28ba57d..0000000
--- a/app/addons/documents/mango/components/MangoIndexEditor.js
+++ /dev/null
@@ -1,192 +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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import ReactSelect from 'react-select';
-import '../../../../../assets/js/plugins/prettify';
-import app from '../../../../app';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-
-const PaddedBorderedBox = ReactComponents.PaddedBorderedBox;
-const CodeEditorPanel = ReactComponents.CodeEditorPanel;
-const ConfirmButton = ReactComponents.ConfirmButton;
-const LoadLines = ReactComponents.LoadLines;
-const getDocUrl = app.helpers.getDocUrl;
-
-export default class MangoIndexEditor extends Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      partitionedSelected: true
-    };
-    this.onTemplateSelected = this.onTemplateSelected.bind(this);
-    this.onTogglePartitioned = this.onTogglePartitioned.bind(this);
-    this.saveIndex = this.saveIndex.bind(this);
-  }
-
-  componentDidMount() {
-    prettyPrint();
-    this.props.loadIndexTemplates();
-    this.props.clearResults();
-    this.props.loadIndexList({
-      fetchParams: { ...this.props.fetchParams, skip: 0 }
-    });
-  }
-
-  componentDidUpdate(prevProps) {
-    prettyPrint();
-    if (prevProps.templates != this.props.templates) {
-      // Explicitly set value because updating 'CodeEditorPanel.defaultCode' won't change the editor once it's already loaded.
-      this.setEditorValue(this.props.templates[0].value);
-    }
-  }
-
-  setEditorValue(newValue = '') {
-    if (this.codeEditor) {
-      return this.codeEditor.getEditor().setValue(newValue);
-    }
-  }
-
-  getEditorValue() {
-    return this.codeEditor.getValue();
-  }
-
-  editorHasErrors() {
-    return this.codeEditor.getEditor().hasErrors();
-  }
-
-  onTemplateSelected(selectedItem) {
-    this.setEditorValue(selectedItem.value);
-  }
-
-  onTogglePartitioned() {
-    this.setState({partitionedSelected: !this.state.partitionedSelected});
-  }
-
-  partitionedCheckobx() {
-    if (!this.props.isDbPartitioned) {
-      return null;
-    }
-    return (
-      <label>
-        <input
-          id="js-partitioned-index"
-          type="checkbox"
-          checked={this.state.partitionedSelected}
-          onChange={this.onTogglePartitioned}
-          style={{margin: '0px 10px 0px 0px'}} />
-        Partitioned
-      </label>
-    );
-  }
-
-  editor() {
-    const encodedPartKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const editQueryURL = '#' + FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(this.props.databaseName), encodedPartKey);
-    return (
-      <div className="mango-editor-wrapper">
-        <form className="form-horizontal" onSubmit={this.saveIndex}>
-          <div className="padded-box">
-            <ReactSelect
-              className="mango-select"
-              options={this.props.templates}
-              ref={node => this.templates = node}
-              placeholder="Examples"
-              searchable={false}
-              clearable={false}
-              autosize={false}
-              onChange={this.onTemplateSelected}
-            />
-          </div>
-          <PaddedBorderedBox>
-            <CodeEditorPanel
-              id="query-field"
-              ref={node => this.codeEditor = node}
-              title="Index"
-              docLink={getDocUrl('MANGO_INDEX')}
-              defaultCode={this.props.queryIndexCode} />
-            {this.partitionedCheckobx()}
-          </PaddedBorderedBox>
-          <div className="padded-box">
-            <div className="control-group">
-              <ConfirmButton text="Create index" id="create-index-btn" showIcon={false} />
-              <a className="edit-link" href={editQueryURL}>edit query</a>
-            </div>
-          </div>
-        </form>
-      </div>
-    );
-  }
-
-  render() {
-    if (this.props.isLoading) {
-      return <LoadLines />;
-    }
-    return this.editor();
-  }
-
-  saveIndex(event) {
-    event.preventDefault();
-
-    const showInvalidCodeMsg = () => {
-      FauxtonAPI.addNotification({
-        msg: 'Please fix the Javascript errors and try again.',
-        type: 'error',
-        clear: true
-      });
-    };
-    if (this.editorHasErrors()) {
-      showInvalidCodeMsg();
-      return;
-    }
-
-    let indexCode = this.getEditorValue();
-    if (this.props.isDbPartitioned) {
-      // Set the partitioned property if not yet set
-      try {
-        const json = JSON.parse(indexCode);
-        if (json.partitioned !== true && json.partitioned !== false) {
-          json.partitioned = this.state.partitionedSelected;
-        }
-        indexCode = JSON.stringify(json);
-      } catch (err) {
-        showInvalidCodeMsg();
-      }
-    }
-
-    this.props.saveIndex({
-      databaseName: this.props.databaseName,
-      indexCode: indexCode,
-      fetchParams: this.props.fetchParams
-    });
-  }
-}
-
-MangoIndexEditor.propTypes = {
-  isLoading: PropTypes.bool.isRequired,
-  databaseName: PropTypes.string.isRequired,
-  isDbPartitioned: PropTypes.bool.isRequired,
-  saveIndex: PropTypes.func.isRequired,
-  queryIndexCode: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string,
-  loadIndexTemplates: PropTypes.func.isRequired,
-  clearResults: PropTypes.func.isRequired,
-  loadIndexList: PropTypes.func.isRequired
-};
-
-MangoIndexEditor.defaultProps = {
-  isLoading: true,
-  isDbPartitioned: false
-};
diff --git a/app/addons/documents/mango/components/MangoIndexEditorContainer.js b/app/addons/documents/mango/components/MangoIndexEditorContainer.js
deleted file mode 100644
index 79ca587..0000000
--- a/app/addons/documents/mango/components/MangoIndexEditorContainer.js
+++ /dev/null
@@ -1,57 +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.
-
-import { connect } from 'react-redux';
-import * as IndexResultActions from '../../index-results/actions/fetch';
-import * as IndexResultBaseActions from '../../index-results/actions/base';
-import MangoIndexEditor from './MangoIndexEditor';
-import Helpers from '../mango.helper';
-import Actions from '../mango.actions';
-import * as MangoAPI from '../mango.api';
-
-const mapStateToProps = ({ mangoQuery, indexResults, databases }, ownProps) => {
-  return {
-    description: ownProps.description,
-    databaseName: ownProps.databaseName,
-    queryIndexCode: Helpers.formatCode(mangoQuery.queryIndexCode),
-    templates: mangoQuery.queryIndexTemplates,
-    fetchParams: indexResults.fetchParams,
-    partitionKey: ownProps.partitionKey,
-    isLoading: databases.isLoadingDbInfo,
-    isDbPartitioned: databases.isDbPartitioned
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    saveIndex: (options) => {
-      dispatch(Actions.saveIndex(options));
-    },
-    loadIndexList: (options) => {
-      const queryIndexes = (params) => { return MangoAPI.fetchIndexes(ownProps.databaseName, params); };
-      dispatch(IndexResultActions.fetchDocs(queryIndexes, options.fetchParams, {}));
-    },
-    clearResults: () => {
-      dispatch(IndexResultBaseActions.resetState());
-    },
-    loadIndexTemplates: () => {
-      dispatch(Actions.loadIndexTemplates());
-    }
-  };
-};
-
-const MangoIndexEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(MangoIndexEditor);
-
-export default MangoIndexEditorContainer;
diff --git a/app/addons/documents/mango/components/MangoQueryEditor.js b/app/addons/documents/mango/components/MangoQueryEditor.js
deleted file mode 100644
index a702955..0000000
--- a/app/addons/documents/mango/components/MangoQueryEditor.js
+++ /dev/null
@@ -1,196 +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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from "react";
-import ReactSelect from "react-select";
-import "../../../../../assets/js/plugins/prettify";
-import app from "../../../../app";
-import FauxtonAPI from "../../../../core/api";
-import ReactComponents from "../../../components/react-components";
-import ExecutionStats from './ExecutionStats';
-
-const PaddedBorderedBox = ReactComponents.PaddedBorderedBox;
-const CodeEditorPanel = ReactComponents.CodeEditorPanel;
-const getDocUrl = app.helpers.getDocUrl;
-
-export default class MangoQueryEditor extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    prettyPrint();
-    this.props.loadQueryHistory({ databaseName: this.props.databaseName });
-    // Clear results list in case it was populated by other pages
-    this.props.clearResults();
-
-    // Add key binding to run query when doing Ctrl-Enter
-    const editor = this.codeEditor.codeEditor.editor;
-    const runQueryCmdName = "runQuery";
-    if (!editor.commands.byName[runQueryCmdName]) {
-      editor.commands.addCommand({
-        name: runQueryCmdName,
-        bindKey: {win: 'Ctrl-Enter', mac: 'Command-Option-Enter'},
-        exec: () => {
-          this.runQuery({preventDefault: () => {}});
-        },
-        readOnly: true
-      });
-    }
-  }
-
-  componentDidUpdate (prevProps) {
-    prettyPrint();
-    if (prevProps.history != this.props.history) {
-      // Explicitly set value because updating 'CodeEditorPanel.defaultCode' won't change the editor once it's already loaded.
-      this.setEditorValue(this.props.history[0].value);
-    }
-  }
-
-  setEditorValue (newValue = '') {
-    return this.codeEditor.getEditor().setValue(newValue);
-  }
-
-  getEditorValue () {
-    return this.codeEditor.getValue();
-  }
-
-  editorHasErrors () {
-    return this.codeEditor.getEditor().hasErrors();
-  }
-
-  onHistorySelected(selectedItem) {
-    this.setEditorValue(selectedItem.value);
-  }
-
-  editor() {
-    return (
-      <div className="mango-editor-wrapper">
-        <form className="form-horizontal" onSubmit={(ev) => {this.runQuery(ev);}}>
-          <div className="padded-box">
-            <ReactSelect
-              className="mango-select"
-              options={this.props.history}
-              ref={node => this.history = node}
-              placeholder="Query history"
-              searchable={false}
-              clearable={false}
-              autosize={false}
-              onChange={(elem) => {this.onHistorySelected(elem);}}
-            />
-          </div>
-          <PaddedBorderedBox>
-            <CodeEditorPanel
-              id="query-field"
-              ref={node => this.codeEditor = node}
-              title={this.props.editorTitle}
-              docLink={getDocUrl('MANGO_SEARCH')}
-              defaultCode={this.props.queryFindCode} />
-          </PaddedBorderedBox>
-          <div className="padded-box">
-            <div className="control-group">
-              <button type="submit" id="create-index-btn" className="btn btn-primary btn-space">Run Query</button>
-              <button type="button" id="explain-btn" className="btn btn-secondary btn-space"
-                onClick={(ev) => {this.runExplain(ev);} }>Explain</button>
-              <a className="edit-link" style={{} } onClick={(ev) => {this.manageIndexes(ev);}}>manage indexes</a>
-            </div>
-            <div>
-              <ExecutionStats {...this.props} />
-            </div>
-          </div>
-        </form>
-      </div>
-    );
-  }
-
-  render () {
-    if (this.props.isLoading) {
-      return (
-        <div className="mango-editor-wrapper">
-          <ReactComponents.LoadLines />
-        </div>
-      );
-    }
-
-    return this.editor();
-  }
-
-  notifyOnQueryError() {
-    if (this.editorHasErrors()) {
-      FauxtonAPI.addNotification({
-        msg:  'Please fix the Javascript errors and try again.',
-        type: 'error',
-        clear: true
-      });
-
-      return true;
-    }
-    return false;
-  }
-
-  manageIndexes(event) {
-    event.preventDefault();
-
-    this.props.manageIndexes();
-
-    const encodedPartKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const manageIndexURL = '#' + FauxtonAPI.urls('mango', 'index-app',
-      encodeURIComponent(this.props.databaseName), encodedPartKey);
-    FauxtonAPI.navigate(manageIndexURL);
-  }
-
-  runExplain(event) {
-    event.preventDefault();
-
-    if (this.notifyOnQueryError()) {
-      return;
-    }
-
-    this.props.runExplainQuery({
-      databaseName: this.props.databaseName,
-      partitionKey: this.props.partitionKey,
-      queryCode: this.getEditorValue()
-    });
-  }
-
-  runQuery (event) {
-    event.preventDefault();
-
-    if (this.notifyOnQueryError()) {
-      return;
-    }
-    this.props.clearResults();
-    this.props.runQuery({
-      databaseName: this.props.databaseName,
-      partitionKey: this.props.partitionKey,
-      queryCode: JSON.parse(this.getEditorValue()),
-      fetchParams: {...this.props.fetchParams, skip: 0}
-    });
-  }
-}
-
-MangoQueryEditor.propTypes = {
-  description: PropTypes.string.isRequired,
-  editorTitle: PropTypes.string.isRequired,
-  queryFindCode: PropTypes.string.isRequired,
-  queryFindCodeChanged: PropTypes.bool,
-  databaseName: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string,
-  runExplainQuery: PropTypes.func.isRequired,
-  runQuery: PropTypes.func.isRequired,
-  manageIndexes: PropTypes.func.isRequired,
-  loadQueryHistory: PropTypes.func.isRequired,
-  clearResults: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/mango/components/MangoQueryEditorContainer.js b/app/addons/documents/mango/components/MangoQueryEditorContainer.js
deleted file mode 100644
index ede0e56..0000000
--- a/app/addons/documents/mango/components/MangoQueryEditorContainer.js
+++ /dev/null
@@ -1,103 +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.
-
-import { connect } from 'react-redux';
-import FauxtonAPI from "../../../../core/api";
-import * as IndexResultActions from '../../index-results/actions/fetch';
-import * as IndexResultBaseActions from '../../index-results/actions/base';
-import MangoQueryEditor from './MangoQueryEditor';
-import Helpers from '../mango.helper';
-import Actions from '../mango.actions';
-import * as MangoAPI from '../mango.api';
-
-const getAvailableQueryIndexes = ({ availableIndexes }) => {
-  if (!availableIndexes) {
-    return [];
-  }
-  return availableIndexes.filter(({ type }) => {
-    return ['json', 'special'].includes(type);
-  });
-};
-
-const getAvailableAdditionalIndexes = ({ additionalIndexes }) => {
-  if (!additionalIndexes) {
-    return [];
-  }
-  const indexes = FauxtonAPI.getExtensions('mango:additionalIndexes')[0];
-  if (!indexes) {
-    return;
-  }
-
-  return additionalIndexes.filter((el) => {
-    return el.get('type').indexOf(indexes.type) !== -1;
-  });
-};
-
-const mapStateToProps = (state, ownProps) => {
-  const mangoQuery = state.mangoQuery;
-  const indexResults = state.indexResults;
-
-  return {
-    databaseName: ownProps.databaseName,
-    queryFindCode: Helpers.formatCode(mangoQuery.queryFindCode),
-    queryFindCodeChanged: mangoQuery.queryFindCodeChanged,
-    availableIndexes: getAvailableQueryIndexes(mangoQuery),
-    additionalIndexes: getAvailableAdditionalIndexes(mangoQuery),
-    isLoading: mangoQuery.isLoading,
-    history: mangoQuery.history,
-    description: ownProps.description,
-    editorTitle: ownProps.editorTitle,
-    additionalIndexesText: ownProps.additionalIndexesText,
-    fetchParams: indexResults.fetchParams,
-    executionStats: indexResults.executionStats,
-    warning: indexResults.warning,
-    partitionKey: ownProps.partitionKey
-  };
-};
-
-const mapDispatchToProps = (dispatch/*, ownProps*/) => {
-  return {
-    loadQueryHistory: (options) => {
-      dispatch(Actions.loadQueryHistory(options));
-    },
-
-    runExplainQuery: (options) => {
-      dispatch(Actions.runExplainQuery(options));
-    },
-
-    runQuery: (options) => {
-      const queryDocs = (params) => {
-        return MangoAPI.mangoQueryDocs(options.databaseName, options.partitionKey, options.queryCode, params);
-      };
-
-      dispatch(Actions.hideQueryExplain());
-      dispatch(Actions.newQueryFindCode(options));
-      dispatch(IndexResultActions.fetchDocs(queryDocs, options.fetchParams, {}));
-    },
-
-    clearResults: () => {
-      dispatch(IndexResultBaseActions.resetState());
-    },
-
-    manageIndexes: () => {
-      dispatch(Actions.hideQueryExplain());
-    }
-
-  };
-};
-
-const MangoQueryEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(MangoQueryEditor);
-
-export default MangoQueryEditorContainer;
diff --git a/app/addons/documents/mango/mango.actions.js b/app/addons/documents/mango/mango.actions.js
deleted file mode 100644
index be79bd4..0000000
--- a/app/addons/documents/mango/mango.actions.js
+++ /dev/null
@@ -1,123 +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.
-
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./mango.actiontypes";
-import * as IndexResultActions from "../index-results/actions/fetch";
-import * as MangoAPI from "./mango.api";
-
-export default {
-
-  loadQueryHistory: function (options) {
-    return {
-      type: ActionTypes.MANGO_LOAD_QUERY_HISTORY,
-      options: options
-    };
-  },
-
-  newQueryFindCode: function (options) {
-    return {
-      type: ActionTypes.MANGO_NEW_QUERY_FIND_CODE,
-      options: options
-    };
-  },
-
-  showQueryExplain: function (options) {
-    return {
-      type: ActionTypes.MANGO_SHOW_EXPLAIN_RESULTS,
-      options: options
-    };
-  },
-
-  hideQueryExplain: function () {
-    return {
-      type: ActionTypes.MANGO_HIDE_EXPLAIN_RESULTS
-    };
-  },
-
-  newQueryCreateIndexTemplate: function (options) {
-    return {
-      type: ActionTypes.MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE,
-      options: options
-    };
-  },
-
-  loadIndexTemplates: function (options) {
-    return {
-      type: ActionTypes.MANGO_LOAD_INDEX_TEMPLATES,
-      options: options
-    };
-  },
-
-  requestSaveIndex: function () {
-    return {
-      type: ActionTypes.MANGO_SAVE_INDEX_REQUEST
-    };
-  },
-
-  saveIndex: function ({ databaseName, indexCode, fetchParams }) {
-    FauxtonAPI.addNotification({
-      msg: 'Saving index for query...',
-      type: 'info',
-      clear: true
-    });
-
-    return (dispatch) => {
-      // Notifies index save operation was requested
-      dispatch(this.requestSaveIndex());
-
-      return MangoAPI.createIndex(databaseName, indexCode)
-        .then(() => {
-          const runQueryURL = '#' + FauxtonAPI.urls('mango', 'query-app',
-            app.utils.safeURLName(databaseName), '');
-
-          const queryIndexes = (params) => { return MangoAPI.fetchIndexes(databaseName, params); };
-          dispatch(IndexResultActions.fetchDocs(queryIndexes, fetchParams, {}));
-
-          FauxtonAPI.addNotification({
-            msg: 'Index is ready for querying. <a href="' + runQueryURL + '">Run a Query.</a>',
-            type: 'success',
-            clear: true,
-            escape: false
-          });
-        })
-        .catch((error) => {
-          FauxtonAPI.addNotification({
-            msg: 'Failed to create index. ' + this.errorReason(error),
-            type: 'error',
-            clear: true
-          });
-        });
-    };
-  },
-
-  errorReason: function (error) {
-    return 'Reason: ' + ((error && error.message) || 'n/a');
-  },
-
-  runExplainQuery: function ({ databaseName, partitionKey, queryCode }) {
-    return (dispatch) => {
-      return MangoAPI.fetchQueryExplain(databaseName, partitionKey, queryCode)
-        .then((explainPlan) => {
-          dispatch(this.showQueryExplain({ explainPlan }));
-        }).catch(() => {
-          FauxtonAPI.addNotification({
-            msg: 'There was an error fetching the query plan.',
-            type: 'error',
-            clear: true
-          });
-        });
-    };
-  }
-
-};
diff --git a/app/addons/documents/mango/mango.actiontypes.js b/app/addons/documents/mango/mango.actiontypes.js
deleted file mode 100644
index 12d9343..0000000
--- a/app/addons/documents/mango/mango.actiontypes.js
+++ /dev/null
@@ -1,21 +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.
-
-export default {
-  MANGO_NEW_QUERY_FIND_CODE: 'MANGO_NEW_QUERY_FIND_CODE',
-  MANGO_LOAD_QUERY_HISTORY: 'MANGO_LOAD_QUERY_HISTORY',
-  MANGO_LOAD_INDEX_TEMPLATES: 'MANGO_LOAD_INDEX_TEMPLATES',
-  MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE: 'MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE',
-  MANGO_SAVE_INDEX_REQUEST: 'MANGO_SAVE_INDEX_REQUEST',
-  MANGO_SHOW_EXPLAIN_RESULTS: 'MANGO_SHOW_EXPLAIN_RESULTS',
-  MANGO_HIDE_EXPLAIN_RESULTS: 'MANGO_HIDE_EXPLAIN_RESULTS',
-};
diff --git a/app/addons/documents/mango/mango.api.js b/app/addons/documents/mango/mango.api.js
deleted file mode 100644
index 59cbebf..0000000
--- a/app/addons/documents/mango/mango.api.js
+++ /dev/null
@@ -1,128 +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.
-
-import app from "../../../app";
-import {post, get} from '../../../core/ajax';
-import FauxtonAPI from "../../../core/api";
-import Constants from '../constants';
-
-export const fetchQueryExplain = (databaseName, partitionKey, queryCode) => {
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  const url = FauxtonAPI.urls('mango', 'explain-server', encodeURIComponent(databaseName), encodedPartKey);
-
-  return post(url, queryCode, {rawBody: true}).then((json) => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return json;
-  });
-};
-
-export const createIndex = (databaseName, indexCode) => {
-  const url = FauxtonAPI.urls('mango', 'index-server',
-    app.utils.safeURLName(databaseName));
-
-  return post(url, indexCode, {rawBody: true}).then((json) => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return json;
-  });
-};
-
-export const fetchIndexes = (databaseName, params) => {
-  const query = app.utils.queryString(params);
-  let url = FauxtonAPI.urls('mango', 'index-server', app.utils.safeURLName(databaseName));
-  url = `${url}${url.includes('?') ? '&' : '?'}${query}`;
-
-  return get(url).then((json) => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return {
-      docs: json.indexes,
-      docType: Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX,
-      layout: Constants.LAYOUT_ORIENTATION.JSON
-    };
-  });
-};
-
-// assume all databases being accessed are on the same
-// host / CouchDB version
-let supportsExecutionStatsCache = null;
-const supportsExecutionStats = (databaseName) => {
-  if (supportsExecutionStatsCache === null) {
-    return new FauxtonAPI.Promise((resolve) => {
-      mangoQuery(databaseName, '', {
-        selector: {
-          "_id": {"$gt": "a" }
-        },
-        execution_stats: true
-      }, {limit: 1})
-        .then(resp => {
-          supportsExecutionStatsCache = resp.status == 200;
-          resolve(supportsExecutionStatsCache);
-        });
-    });
-  }
-  return Promise.resolve(supportsExecutionStatsCache);
-};
-
-// Determines what params need to be sent to couch based on the Mango query entered
-// by the user and what fauxton is using to emulate pagination (fetchParams).
-export const mergeFetchParams = (queryCode, fetchParams) => {
-  // Since Fauxton pagination's 'limit' is always (docs-per-page + 1), this ensures
-  // (page-number * docs-per-page) doesn't exceed the query's 'limit' value.
-  let limit = fetchParams.limit;
-  const docsPerPage = fetchParams.limit - 1;
-  const pageNumber = Math.floor(fetchParams.skip / docsPerPage) + 1;
-  const docsOverLimit = (pageNumber * docsPerPage) - queryCode.limit;
-  if (docsOverLimit >= 0) {
-    limit = docsPerPage - docsOverLimit;
-  }
-
-  return {
-    ...queryCode,
-    limit: limit,
-    skip: queryCode.skip ? (fetchParams.skip + queryCode.skip) : fetchParams.skip
-  };
-};
-
-export const mangoQuery = (databaseName, partitionKey, queryCode, fetchParams) => {
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  const url = FauxtonAPI.urls('mango', 'query-server', encodeURIComponent(databaseName), encodedPartKey);
-  const modifiedQuery = mergeFetchParams(queryCode, fetchParams);
-  return post(url, modifiedQuery, {raw: true});
-};
-
-export const mangoQueryDocs = (databaseName, partitionKey, queryCode, fetchParams) => {
-  // we can only add the execution_stats field if it is supported by the server
-  // otherwise Couch throws an error
-  return supportsExecutionStats(databaseName).then((shouldFetchExecutionStats) => {
-    if (shouldFetchExecutionStats) {
-      queryCode.execution_stats = true;
-    }
-    return mangoQuery(databaseName, partitionKey, queryCode, fetchParams)
-      .then((res) => res.json())
-      .then((json) => {
-        if (json.error) {
-          throw new Error('(' + json.error + ') ' + json.reason);
-        }
-        return {
-          docs: json.docs,
-          docType: Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY,
-          executionStats: json.execution_stats,
-          warning: json.warning
-        };
-      });
-  });
-};
diff --git a/app/addons/documents/mango/mango.components.js b/app/addons/documents/mango/mango.components.js
deleted file mode 100644
index 94dce28..0000000
--- a/app/addons/documents/mango/mango.components.js
+++ /dev/null
@@ -1,21 +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.
-
-import MangoQueryEditorContainer from "./components/MangoQueryEditorContainer";
-import MangoIndexEditorContainer from "./components/MangoIndexEditorContainer";
-import ExplainPage from "./components/ExplainPage";
-
-export default {
-  MangoIndexEditorContainer,
-  MangoQueryEditorContainer,
-  ExplainPage
-};
diff --git a/app/addons/documents/mango/mango.constants.js b/app/addons/documents/mango/mango.constants.js
deleted file mode 100644
index b212092..0000000
--- a/app/addons/documents/mango/mango.constants.js
+++ /dev/null
@@ -1,21 +0,0 @@
-export default {
-  INDEX_TEMPLATES: [{
-    label: 'Single field (json)',
-    code: {
-      "index": {
-        "fields": ["foo"]
-      },
-      "name": "foo-json-index",
-      "type" : "json"
-    }
-  }, {
-    label: 'Multiple fields (json)',
-    code: {
-      "index": {
-        "fields": ["foo", "bar"]
-      },
-      "name": "foo-bar-json-index",
-      "type" : "json"
-    }
-  }]
-};
diff --git a/app/addons/documents/mango/mango.helper.js b/app/addons/documents/mango/mango.helper.js
deleted file mode 100644
index 09586c0..0000000
--- a/app/addons/documents/mango/mango.helper.js
+++ /dev/null
@@ -1,60 +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.
-
-import FauxtonAPI from "../../../core/api";
-
-const getIndexName = ({def, type}) => {
-  let nameArray = [],
-      indexes;
-
-  nameArray = def.fields.reduce(function (acc, el, i) {
-    if (i === 0) {
-      acc.push(type + ': ' + Object.keys(el)[0]);
-    } else {
-      acc.push(Object.keys(el)[0]);
-    }
-
-    return acc;
-  }, []);
-
-  if (!nameArray.length) {
-    indexes = FauxtonAPI.getExtensions('mango:additionalIndexes')[0];
-    if (indexes) {
-      nameArray = indexes.createHeader({def, type});
-    } else {
-      nameArray = [type + ': ' + (def.selector ? JSON.stringify(def.selector) : '{}')];
-    }
-  }
-
-  return nameArray.join(', ');
-};
-
-const formatCode = (code) => {
-  return JSON.stringify(code, null, 3);
-};
-
-const getIndexContent = (doc) => {
-  const content = {
-    ...doc
-  };
-
-  delete content.ddoc;
-  delete content.name;
-
-  return JSON.stringify(content, null, ' ');
-};
-
-export default {
-  getIndexName,
-  formatCode,
-  getIndexContent
-};
diff --git a/app/addons/documents/mango/mango.reducers.js b/app/addons/documents/mango/mango.reducers.js
deleted file mode 100644
index 8e4cd80..0000000
--- a/app/addons/documents/mango/mango.reducers.js
+++ /dev/null
@@ -1,205 +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.
-
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./mango.actiontypes";
-import MangoHelper from "./mango.helper";
-import constants from "./mango.constants";
-
-const defaultQueryIndexCode = {
-  "index": {
-    "fields": ["_id"]
-  },
-  "type": "json"
-};
-
-const defaultQueryFindCode = {
-  "selector": {
-    "_id": { "$gt": null }
-  }
-};
-
-const createSelectItem = (code) => {
-  // ensure we're working with a deserialized query object
-  const object = typeof code === "string" ? JSON.parse(code) : code;
-
-  const singleLineValue = JSON.stringify(object);
-  const multiLineValue = MangoHelper.formatCode(object);
-
-  return {
-    label: singleLineValue,
-    value: multiLineValue,
-    className: 'mango-select-entry'
-  };
-};
-
-const getDefaultHistory = () => {
-  return [createSelectItem(defaultQueryFindCode)];
-};
-
-const getDefaultQueryIndexTemplates = () => {
-  return constants.INDEX_TEMPLATES.map((el) => {
-    const item = createSelectItem(el.code);
-    item.label = el.label || item.label;
-    return item;
-  });
-};
-
-const loadIndexTemplates = () => {
-  const extTemplates = FauxtonAPI.getExtensions('mango:indexTemplates')[0];
-  if (extTemplates) {
-    return extTemplates.filter((elem) => {
-      return !!elem.code;
-    }).map((elem) => {
-      const item = createSelectItem(elem.code);
-      item.label = elem.label || item.label;
-      return item;
-    });
-  }
-
-  return getDefaultQueryIndexTemplates();
-};
-
-const HISTORY_LIMIT = 5;
-
-const initialState = {
-  queryFindCode: defaultQueryFindCode,
-  queryIndexCode: defaultQueryIndexCode,
-  queryFindCodeChanged: false,
-  explainPlan: undefined,
-  history: getDefaultHistory(),
-  historyKey: 'default',
-  queryIndexTemplates: getDefaultQueryIndexTemplates()
-};
-
-const loadQueryHistory = (databaseName) => {
-  const historyKey = databaseName + '_queryhistory';
-  let history = app.utils.localStorageGet(historyKey);
-  if (history) {
-    return history;
-  }
-
-  history = FauxtonAPI.getExtensions('mango:queryHistory')[0];
-  if (history) {
-    return history.filter((elem) => {
-      return !!elem.code;
-    }).map((elem) => {
-      const item = createSelectItem(elem.code);
-      item.label = elem.label || item.label;
-      return item;
-    });
-  }
-
-  return getDefaultHistory();
-};
-
-const updateQueryHistory = ({ historyKey, history }, queryCode, label) => {
-  const newHistory = history.slice();
-
-  const historyEntry = createSelectItem(queryCode);
-  historyEntry.label = label || historyEntry.label;
-
-  // remove existing entry if it exists
-  const indexOfExisting = newHistory.findIndex(el => el.value === historyEntry.value);
-  if (indexOfExisting > -1) {
-    newHistory.splice(indexOfExisting, 1);
-  }
-
-  // insert item at head of array
-  newHistory.unshift(historyEntry);
-
-  // limit array length
-  if (newHistory.length > HISTORY_LIMIT) {
-    newHistory.splice(HISTORY_LIMIT, 1);
-  }
-
-  app.utils.localStorageSet(historyKey, newHistory);
-
-  return newHistory;
-};
-
-const updateQueryIndexTemplates = ({ queryIndexTemplates }, value, label) => {
-  const newTemplates = queryIndexTemplates.slice();
-  const templateItem = createSelectItem(value);
-  templateItem.label = label || templateItem.label;
-
-  const existing = newTemplates.find(i => i.value === templateItem.value);
-  if (!existing) {
-    newTemplates.push(templateItem);
-  }
-};
-
-export default function mangoquery(state = initialState, action) {
-  const { options } = action;
-  switch (action.type) {
-
-    case ActionTypes.MANGO_SET_DB:
-      return {
-        ...state,
-        database: options.database,
-        historyKey: options.database ? options.database.id : 'default'
-      };
-
-    case ActionTypes.MANGO_LOAD_QUERY_HISTORY:
-      const hist = loadQueryHistory(options.databaseName);
-      return {
-        ...state,
-        history: hist,
-        historyKey: options.databaseName + '_queryhistory',
-        queryFindCode: JSON.parse(hist[0].value),
-      };
-
-    case ActionTypes.MANGO_NEW_QUERY_FIND_CODE:
-      return {
-        ...state,
-        queryFindCode: options.queryCode,
-        history: updateQueryHistory(state, options.queryCode)
-      };
-
-    case ActionTypes.MANGO_RESET:
-      return {
-        ...state,
-        getLoadingIndexes: options.isLoading
-      };
-
-    case ActionTypes.MANGO_LOAD_INDEX_TEMPLATES:
-      const templates = loadIndexTemplates();
-      return {
-        ...state,
-        queryIndexTemplates: templates,
-        queryIndexCode: JSON.parse(templates[0].value),
-      };
-
-    case ActionTypes.MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE:
-      return {
-        ...state,
-        queryIndexCode: options.code,
-        queryIndexTemplates: updateQueryIndexTemplates(state, options.code, options.label)
-      };
-
-    case ActionTypes.MANGO_SHOW_EXPLAIN_RESULTS:
-      return {
-        ...state,
-        explainPlan: options.explainPlan
-      };
-
-    case ActionTypes.MANGO_HIDE_EXPLAIN_RESULTS:
-      return {
-        ...state,
-        explainPlan: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/mangolayout.js b/app/addons/documents/mangolayout.js
deleted file mode 100644
index 70b3e93..0000000
--- a/app/addons/documents/mangolayout.js
+++ /dev/null
@@ -1,219 +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.
-
-import React, { Component } from 'react';
-import { connect } from 'react-redux';
-import app from "../../app";
-import { Breadcrumbs } from '../components/header-breadcrumbs';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import MangoComponents from "./mango/mango.components";
-import * as MangoAPI from "./mango/mango.api";
-import IndexResultsContainer from './index-results/containers/IndexResultsContainer';
-import PaginationContainer from './index-results/containers/PaginationContainer';
-import ApiBarContainer from './index-results/containers/ApiBarContainer';
-import PartitionKeySelectorContainer from './partition-key/container';
-import FauxtonAPI from "../../core/api";
-import Constants from './constants';
-
-export const RightHeader = ({
-  docURL,
-  endpoint,
-  databaseName,
-  showPartitionKeySelector,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  const apiBar = <ApiBarContainer docURL={docURL} endpoint={endpoint} includeQueryOptionsParams={false}/>;
-  let partKeySelector = null;
-  if (showPartitionKeySelector) {
-    partKeySelector = (<PartitionKeySelectorContainer
-      databaseName={databaseName}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={onPartitionKeySelected}
-      onGlobalModeSelected={onGlobalModeSelected}
-      globalMode={globalMode}/>
-    );
-  }
-  return (
-    <div className="right-header-wrapper flex-layout flex-row flex-body">
-      <div style={{flex:1, padding: '18px 6px 12px 12px'}}>
-        {partKeySelector}
-      </div>
-      <div id="right-header" className="flex-body">
-      </div>
-      {apiBar}
-      <div id='notification-center-btn'>
-        <NotificationCenterButton />
-      </div>
-    </div>
-  );
-};
-
-export const MangoFooter = ({databaseName, fetchUrl, queryDocs}) => {
-  return (
-    <div id="footer">
-      <PaginationContainer
-        databaseName={databaseName}
-        fetchUrl={fetchUrl}
-        queryDocs={queryDocs} />
-    </div>
-  );
-};
-
-export const MangoHeader = ({
-  crumbs,
-  docURL,
-  endpoint,
-  databaseName,
-  partitionKey,
-  showPartitionKeySelector,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  return (
-    <div className="header-wrapper flex-layout flex-row">
-      <div className='flex-body faux__breadcrumbs-mango-header'>
-        <Breadcrumbs crumbs={crumbs} />
-      </div>
-      <RightHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        databaseName={databaseName}
-        showPartitionKeySelector={showPartitionKeySelector}
-        partitionKey={partitionKey}
-        onPartitionKeySelected={onPartitionKeySelected}
-        onGlobalModeSelected={onGlobalModeSelected}
-        globalMode={globalMode}
-      />
-    </div>
-  );
-};
-
-MangoHeader.defaultProps = {
-  crumbs: []
-};
-
-export const MangoContent = ({ edit, designDocs, explainPlan, databaseName, fetchUrl, queryDocs, docType, partitionKey }) => {
-  const leftContent = edit ?
-    <MangoComponents.MangoIndexEditorContainer
-      description={app.i18n.en_US['mango-descripton-index-editor']}
-      databaseName={databaseName}
-      partitionKey={partitionKey}
-    /> :
-    <MangoComponents.MangoQueryEditorContainer
-      description={app.i18n.en_US['mango-descripton']}
-      editorTitle={app.i18n.en_US['mango-title-editor']}
-      additionalIndexesText={app.i18n.en_US['mango-additional-indexes-heading']}
-      databaseName={databaseName}
-      partitionKey={partitionKey}
-    />;
-
-  let resultsPage = <IndexResultsContainer
-    fetchUrl={fetchUrl}
-    designDocs={designDocs}
-    ddocsOnly={false}
-    databaseName={databaseName}
-    fetchAtStartup={false}
-    queryDocs={queryDocs}
-    docType={docType}
-    partitionKey={partitionKey} />;
-
-  let mangoFooter = <MangoFooter
-    databaseName={databaseName}
-    fetchUrl={fetchUrl}
-    queryDocs={queryDocs} />;
-
-  if (explainPlan) {
-    resultsPage = <MangoComponents.ExplainPage explainPlan={explainPlan} />;
-    mangoFooter = null;
-  }
-
-  return (
-    <div id="two-pane-content" className="flex-layout flex-row flex-body">
-      <div id="left-content" className="flex-body">
-        {leftContent}
-      </div>
-      <div id="right-content" className="flex-body flex-layout flex-col">
-        <div id="dashboard-lower-content" className="flex-body">
-          {resultsPage}
-        </div>
-        {mangoFooter}
-      </div>
-    </div>
-  );
-};
-
-class MangoLayout extends Component {
-  constructor(props) {
-    super(props);
-  }
-
-  render() {
-    const { database, edit, docURL, crumbs, designDocs, fetchUrl, databaseName, queryFindCode, partitionKey, onPartitionKeySelected, onGlobalModeSelected, globalMode } = this.props;
-    let endpoint = this.props.endpoint;
-
-    if (this.props.explainPlan) {
-      const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-      endpoint = FauxtonAPI.urls('mango', 'explain-apiurl', encodeURIComponent(database), encodedPartKey);
-    }
-    let queryFunction = (params) => { return MangoAPI.mangoQueryDocs(databaseName, partitionKey, queryFindCode, params); };
-    let docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-    if (edit) {
-      queryFunction = (params) => { return MangoAPI.fetchIndexes(databaseName, params); };
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-    }
-    return (
-      <div id="dashboard" className="two-pane flex-layout flex-col">
-        <MangoHeader
-          docURL={docURL}
-          endpoint={endpoint}
-          crumbs={crumbs}
-          databaseName={databaseName}
-          partitionKey={partitionKey}
-          showPartitionKeySelector={!edit}
-          onPartitionKeySelected={onPartitionKeySelected}
-          onGlobalModeSelected={onGlobalModeSelected}
-          globalMode={globalMode}
-        />
-        <MangoContent
-          edit={edit}
-          designDocs={designDocs}
-          explainPlan={this.props.explainPlan}
-          databaseName={databaseName}
-          fetchUrl={fetchUrl}
-          queryDocs={queryFunction}
-          docType={docType}
-          partitionKey={partitionKey}
-        />
-      </div>
-    );
-  }
-}
-
-const mapStateToProps = ({ mangoQuery }, ownProps) => {
-  return {
-    explainPlan: mangoQuery.explainPlan,
-    queryFindCode: mangoQuery.queryFindCode,
-    partitionKey: ownProps.partitionKey,
-    databaseName: ownProps.databaseName,
-    onPartitionKeySelected: ownProps.onPartitionKeySelected,
-    onGlobalModeSelected: ownProps.onGlobalModeSelected,
-    globalMode: ownProps.globalMode
-  };
-};
-
-export const MangoLayoutContainer = connect(
-  mapStateToProps
-)(MangoLayout);
diff --git a/app/addons/documents/partition-key/PartitionKeySelector.js b/app/addons/documents/partition-key/PartitionKeySelector.js
deleted file mode 100644
index 1230bde..0000000
--- a/app/addons/documents/partition-key/PartitionKeySelector.js
+++ /dev/null
@@ -1,140 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class PartitionKeySelector extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      editorValue: '',
-      editMode: false
-    };
-    this.onModeSwitchClick = this.onModeSwitchClick.bind(this);
-    this.onBlur = this.onBlur.bind(this);
-    this.startEdit = this.startEdit.bind(this);
-    this.onKeyPress = this.onKeyPress.bind(this);
-    this.onChange = this.onChange.bind(this);
-    this.props.checkDbPartitioned(this.props.databaseName);
-  }
-
-  onModeSwitchClick(e) {
-    if (e && e.preventDefault) {
-      e.preventDefault();
-    }
-    if (!this.props.globalMode && this.props.onGlobalModeSelected) {
-      this.props.onGlobalModeSelected();
-    } else if (this.props.partitionKey) {
-      this.props.onPartitionKeySelected(this.state.editorValue);
-    } else {
-      this.startEdit();
-    }
-  }
-
-  startEdit() {
-    this.setState({editMode: true, editorValue: this.props.partitionKey});
-    setTimeout(() => this.textInput.focus());
-  }
-
-  updatePartitionKey() {
-    this.setState({editMode: false});
-    const trimmedValue = this.state.editorValue.trim();
-    if (trimmedValue) {
-      this.props.onPartitionKeySelected(trimmedValue);
-    } else {
-      this.props.onGlobalModeSelected();
-    }
-  }
-
-  onBlur(e) {
-    if (e && e.preventDefault) {
-      e.preventDefault();
-    }
-    this.updatePartitionKey();
-  }
-
-  onKeyPress(e) {
-    if (e.key === 'Enter') {
-      this.updatePartitionKey();
-    }
-  }
-
-  onChange(e) {
-    this.setState({editorValue: e.target.value});
-  }
-
-  globalHeader() {
-    return (
-      <button onClick={this.onModeSwitchClick} title="Partition Key Selector" className="button partition-selector__switch">
-        <i className="fonticon-filter"></i>
-        No partition selected
-      </button>
-    );
-  }
-
-  partitionHeader() {
-    const editor = (
-      <input type="text"
-        style={{padding:2, fontSize:16, margin: 0, display: this.state.editMode ? 'block' : 'none'}}
-        onKeyPress={this.onKeyPress}
-        onChange={this.onChange}
-        onBlur={this.onBlur}
-        value={this.state.editorValue}
-        ref={(input) => { this.textInput = input; }} />
-    );
-    let partName = 'Click to select a partition';
-    let className = 'partition-selector__key';
-    if (this.props.partitionKey !== '') {
-      partName = this.props.partitionKey;
-      className += ' partition-selector__key--active';
-    }
-    return (
-      <React.Fragment>
-        <button onClick={this.onModeSwitchClick} title="Partition Key Selector" className="button partition-selector__switch button partition-selector__switch--active">
-          <i className="fonticon-filter"></i>
-        </button>
-        <div className={className}>
-          <span onClick={this.startEdit} style={{display: this.state.editMode ? 'none' : 'block'}}>{partName}</span>
-          {editor}
-        </div>
-      </React.Fragment>
-    );
-  }
-
-  render() {
-    if (!this.props.selectorVisible) {
-      return null;
-    }
-    const global = this.props.globalMode && !this.state.editMode;
-    return (
-      <div className="partition-selector" >
-        {global ? this.globalHeader() : this.partitionHeader()}
-      </div>
-    );
-  }
-}
-
-PartitionKeySelector.defaultProps = {
-  partitionKey: '',
-  globalMode: true
-};
-
-PartitionKeySelector.propTypes = {
-  selectorVisible: PropTypes.bool.isRequired,
-  partitionKey: PropTypes.string.isRequired,
-  checkDbPartitioned: PropTypes.func.isRequired,
-  onPartitionKeySelected: PropTypes.func.isRequired,
-  onGlobalModeSelected: PropTypes.func,
-  globalMode: PropTypes.bool
-};
diff --git a/app/addons/documents/partition-key/actions.js b/app/addons/documents/partition-key/actions.js
deleted file mode 100644
index 63f9e00..0000000
--- a/app/addons/documents/partition-key/actions.js
+++ /dev/null
@@ -1,29 +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.
-
-import * as DatabasesAPI from '../../databases/api';
-import ActionTypes from './actiontypes';
-
-export const checkDbPartitioned = (databaseName) => (dispatch) => {
-  //Reset visibility to false
-  dispatch({
-    type: ActionTypes.PARTITON_KEY_HIDE_SELECTOR
-  });
-
-  DatabasesAPI.fetchDatabaseInfo(databaseName).then(dbInfo => {
-    if (dbInfo.props && dbInfo.props.partitioned === true) {
-      dispatch({
-        type: ActionTypes.PARTITON_KEY_SHOW_SELECTOR
-      });
-    }
-  });
-};
diff --git a/app/addons/documents/partition-key/actiontypes.js b/app/addons/documents/partition-key/actiontypes.js
deleted file mode 100644
index 76368ef..0000000
--- a/app/addons/documents/partition-key/actiontypes.js
+++ /dev/null
@@ -1,15 +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.
-export default {
-  PARTITON_KEY_SHOW_SELECTOR: 'PARTITON_KEY_SHOW_SELECTOR',
-  PARTITON_KEY_HIDE_SELECTOR: 'PARTITON_KEY_HIDE_SELECTOR'
-};
diff --git a/app/addons/documents/partition-key/container.js b/app/addons/documents/partition-key/container.js
deleted file mode 100644
index 0a1d373..0000000
--- a/app/addons/documents/partition-key/container.js
+++ /dev/null
@@ -1,49 +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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import PartitionKeySelector from './PartitionKeySelector';
-import { checkDbPartitioned } from './actions';
-
-const mapStateToProps = ({ partitionKey }, ownProps) => {
-  return {
-    selectorVisible: partitionKey.selectorVisible,
-    databaseName: ownProps.databaseName,
-    partitionKey: ownProps.partitionKey,
-    onPartitionKeySelected: ownProps.onPartitionKeySelected,
-    globalMode: ownProps.globalMode
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    checkDbPartitioned: (databaseName) => {
-      dispatch(checkDbPartitioned(databaseName));
-    }
-  };
-};
-
-const PartitionKeySelectorContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(PartitionKeySelector);
-
-export default PartitionKeySelectorContainer;
-
-PartitionKeySelectorContainer.propTypes = {
-  databaseName: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string.isRequired,
-  onPartitionKeySelected: PropTypes.func.isRequired,
-  onGlobalModeSelected: PropTypes.func.isRequired,
-  globalMode: PropTypes.bool
-};
diff --git a/app/addons/documents/partition-key/reducers.js b/app/addons/documents/partition-key/reducers.js
deleted file mode 100644
index 8da4ad3..0000000
--- a/app/addons/documents/partition-key/reducers.js
+++ /dev/null
@@ -1,37 +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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  selectorVisible: false
-};
-
-export default function partitionKey(state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.PARTITON_KEY_SHOW_SELECTOR:
-      return {
-        ...state,
-        selectorVisible: true
-      };
-
-    case ActionTypes.PARTITON_KEY_HIDE_SELECTOR:
-      return {
-        ...state,
-        selectorVisible: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/resources.js b/app/addons/documents/resources.js
deleted file mode 100644
index a920b8e..0000000
--- a/app/addons/documents/resources.js
+++ /dev/null
@@ -1,197 +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.
-
-import app from "../../app";
-import Helpers from '../../helpers';
-import FauxtonAPI from "../../core/api";
-import { post } from "../../core/ajax";
-import Documents from "./shared-resources";
-
-Documents.QueryParams = (function () {
-  var _eachParams = function (params, action) {
-    // clone to avoid in-place modification
-    var result = _.clone(params);
-
-    _.each(['startkey', 'endkey', 'key'], function (key) {
-      if (_.has(result, key)) {
-        result[key] = action(result[key]);
-      }
-    });
-
-    return result;
-  };
-
-  return {
-    parse: function (params) {
-      return _eachParams(params, JSON.parse);
-    },
-
-    stringify: function (params) {
-      return _eachParams(params, JSON.stringify);
-    }
-  };
-})();
-
-
-Documents.DdocInfo = FauxtonAPI.Model.extend({
-  idAttribute: "_id",
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.GENERAL;
-  },
-  initialize: function (_attrs, options) {
-    this.database = options.database;
-  },
-
-  url: function (context) {
-    if (!context) {
-      context = 'server';
-    }
-
-    return FauxtonAPI.urls('designDocs', context, this.database.safeID(), this.safeID());
-  },
-
-  // Need this to work around backbone router thinking _design/foo
-  // is a separate route. Alternatively, maybe these should be
-  // treated separately. For instance, we could default into the
-  // json editor for docs, or into a ddoc specific page.
-  safeID: function () {
-    var ddoc = this.id.replace(/^_design\//, "");
-    return "_design/" + app.utils.safeURLName(ddoc);
-  }
-});
-
-Documents.NewDoc = Documents.Doc.extend({
-  fetch: function () {
-    const prefix = this.partitionKey ? (this.partitionKey + ':') : '';
-    return Helpers.getUUID().then((res) => {
-      if (res.uuids) {
-        this.set("_id", prefix + res.uuids[0]);
-      } else {
-        this.set("_id", prefix + 'enter_document_id');
-      }
-      return res;
-    }).catch(() => {
-      // Don't throw error so the user is still able
-      // to edit the new doc
-      this.set("_id", prefix + 'enter_document_id');
-    });
-  }
-});
-
-Documents.BulkDeleteDoc = FauxtonAPI.Model.extend({
-  idAttribute: "_id"
-});
-
-Documents.BulkDeleteDocCollection = FauxtonAPI.Collection.extend({
-
-  model: Documents.BulkDeleteDoc,
-
-  sync: function () {
-
-  },
-
-  initialize: function (models, options) {
-    this.databaseId = options.databaseId;
-  },
-
-  url: function () {
-    return FauxtonAPI.urls('bulk_docs', 'server', this.databaseId, '');
-  },
-
-  bulkDelete: function () {
-    const payload = this.createPayload(this.toJSON());
-    return new FauxtonAPI.Promise((resolve, reject) => {
-      post(this.url(), payload).then(res => {
-        if (res.error) {
-          throw new Error(res.reason || res.error);
-        }
-        this.handleResponse(res, resolve, reject);
-      }).catch(() => {
-        const ids = _.reduce(this.toArray(), (acc, doc) => {
-          acc.push(doc.id);
-          return acc;
-        }, []);
-        this.trigger('error', ids);
-        reject(ids);
-      });
-    });
-  },
-
-  handleResponse: function (res, resolve, reject) {
-    var ids = _.reduce(res, function (ids, doc) {
-      if (doc.error) {
-        ids.errorIds.push(doc.id);
-      }
-
-      if (!doc.error) {
-        ids.successIds.push(doc.id);
-      }
-
-      return ids;
-    }, { errorIds: [], successIds: [] });
-
-    this.removeDocuments(ids.successIds);
-
-    if (ids.errorIds.length) {
-      this.trigger('error', ids.errorIds);
-    }
-
-    // This is kind of tricky. If there are no documents deleted then rejects
-    // otherwise resolve with list of successful and failed documents
-    if (!_.isEmpty(ids.successIds)) {
-      resolve(ids);
-    } else {
-      reject(ids.errorIds);
-    }
-
-    this.trigger('updated');
-  },
-
-  removeDocuments: function (ids) {
-    _.each(ids, (id) => {
-      this.remove(this.get(id));
-    });
-
-    this.trigger('removed', ids);
-  },
-
-  createPayload: function (documents) {
-    var documentList = documents;
-
-    return {
-      docs: documentList
-    };
-  }
-});
-
-Documents.MangoBulkDeleteDocCollection = Documents.BulkDeleteDocCollection.extend({
-  url: function () {
-    return Helpers.getServerUrl(`/${this.databaseId}/_index/_bulk_delete`);
-  },
-
-  createPayload: function (documents) {
-    var documentList = documents
-      .filter(function (doc) {
-        return doc._id !== '_all_docs';
-      })
-      .map(function (doc) {
-        return doc._id;
-      });
-
-    return {
-      docids: documentList
-    };
-  }
-
-});
-
-export default Documents;
diff --git a/app/addons/documents/rev-browser/actions.js b/app/addons/documents/rev-browser/actions.js
deleted file mode 100644
index e1cf443..0000000
--- a/app/addons/documents/rev-browser/actions.js
+++ /dev/null
@@ -1,140 +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.
-
-import FauxtonAPI from "../../../core/api";
-import {post} from "../../../core/ajax";
-import ActionTypes from "./actiontypes";
-import getTree from "visualize-rev-tree/lib/getTree";
-import PouchDB from "pouchdb-core";
-import PouchHttpAdapter from 'pouchdb-adapter-http';
-PouchDB.plugin(PouchHttpAdapter);
-
-let db;
-
-export const initDiffEditor = (dbName, docId) => dispatch => {
-  // We have to use API url here because PouchDB doesn't take relative urls.
-  const url = FauxtonAPI.urls('databaseBaseURL', 'apiurl', dbName);
-  db = PouchDB(url);
-
-  Promise.all([db.get(docId), getTree(db, docId)])
-    .then(([doc, tree]) => {
-      const conflictingRevs = getConflictingRevs(tree.paths, tree.winner, Object.keys(tree.deleted));
-      const initialRev = conflictingRevs[0];
-
-      if (!initialRev) {
-        return dispatch(treeLoaded(tree, doc, conflictingRevs, null, dbName));
-      }
-
-      db.get(doc._id, {rev: initialRev})
-        .then((conflictDoc) => {
-          dispatch(treeLoaded(tree, doc, conflictingRevs, conflictDoc, dbName));
-        });
-    });
-};
-
-function getConflictingRevs (paths, winner, deleted) {
-
-  return paths.reduce((acc, el) => {
-    if (el[0] !== winner) {
-      acc.push(el[0]);
-    }
-
-    return acc;
-  }, [])
-    .filter((el) => {
-      return deleted.indexOf(el) === -1;
-    });
-}
-
-const treeLoaded = (tree, doc, conflictingRevs, conflictDoc, databaseName) => {
-  return {
-    type: ActionTypes.REV_BROWSER_REV_TREE_LOADED,
-    options: {
-      tree,
-      doc,
-      conflictDoc,
-      conflictingRevs,
-      databaseName
-    }
-  };
-};
-
-export const toggleDiffView = (enableDiff) => {
-  return {
-    type: ActionTypes.REV_BROWSER_DIFF_ENABLE_DIFF_VIEW,
-    options: {
-      enableDiff: enableDiff
-    }
-  };
-};
-
-export const chooseLeaves = (doc, revTheirs) => dispatch => {
-  db.get(doc._id, {rev: revTheirs})
-    .then((res) => {
-      dispatch(docsToDiff(doc, res));
-    });
-};
-
-const docsToDiff = (doc, theirs) => {
-  return {
-    type: ActionTypes.REV_BROWSER_DIFF_DOCS_READY,
-    options: {
-      theirs: theirs,
-      ours: doc
-    }
-  };
-};
-
-export const toggleConfirmModal = (show, docToWin) => {
-  return {
-    type: ActionTypes.REV_BROWSER_SHOW_CONFIRM_MODAL,
-    options: {
-      show: show,
-      docToWin: docToWin
-    }
-  };
-};
-
-export const selectRevAsWinner = (databaseName, docId, paths, revToWin) => dispatch => {
-  const revsToDelete = getConflictingRevs(paths, revToWin, []);
-  const payload = buildBulkDeletePayload(docId, revsToDelete);
-
-  post(FauxtonAPI.urls('bulk_docs', 'server', databaseName, ''), payload)
-    .then((resp) => {
-      if (resp.error) {
-        return FauxtonAPI.addNotification({
-          msg: 'Failed to delete clean up conflicts!',
-          type: 'error',
-          clear: true
-        });
-      }
-
-      FauxtonAPI.addNotification({
-        msg: 'Conflicts successfully solved.',
-        clear: true
-      });
-      dispatch(toggleConfirmModal(false, null));
-      FauxtonAPI.navigate(FauxtonAPI.urls('allDocs', 'app', databaseName, ''));
-    });
-};
-
-function buildBulkDeletePayload (docId, revs) {
-  const list = revs.map((rev) => {
-    return {
-      "_id": docId,
-      "_rev": rev,
-      "_deleted": true
-    };
-  });
-
-  return { "docs": list };
-}
diff --git a/app/addons/documents/rev-browser/actiontypes.js b/app/addons/documents/rev-browser/actiontypes.js
deleted file mode 100644
index 0604d4f..0000000
--- a/app/addons/documents/rev-browser/actiontypes.js
+++ /dev/null
@@ -1,23 +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.
-
-export const REV_BROWSER_REV_TREE_LOADED = 'REV_TREE_LOADED';
-export const REV_BROWSER_DIFF_DOCS_READY = 'REV_BROWSER_DIFF_DOCS_READY';
-export const REV_BROWSER_DIFF_ENABLE_DIFF_VIEW = 'REV_BROWSER_DIFF_ENABLE_DIFF_VIEW';
-export const REV_BROWSER_SHOW_CONFIRM_MODAL = 'REV_BROWSER_SHOW_CONFIRM_MODAL';
-
-export default {
-  REV_BROWSER_REV_TREE_LOADED,
-  REV_BROWSER_DIFF_DOCS_READY,
-  REV_BROWSER_DIFF_ENABLE_DIFF_VIEW,
-  REV_BROWSER_SHOW_CONFIRM_MODAL
-};
diff --git a/app/addons/documents/rev-browser/components/confirmmodal.js b/app/addons/documents/rev-browser/components/confirmmodal.js
deleted file mode 100644
index 16e6796..0000000
--- a/app/addons/documents/rev-browser/components/confirmmodal.js
+++ /dev/null
@@ -1,86 +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.
-
-import PropTypes from 'prop-types';
-import React from "react";
-import ReactDOM from "react-dom";
-import ReactComponents from "../../../components/react-components";
-import { Modal } from "react-bootstrap";
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class ConfirmModal extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = {
-      checked: false
-    };
-
-    this.close = this.close.bind(this);
-    this.onDeleteConflicts = this.onDeleteConflicts.bind(this);
-  }
-
-  close () {
-    this.props.toggleConfirmModal(false, null);
-  }
-
-  onDeleteConflicts () {
-    const hideModal = this.state.checked;
-    this.props.onConfirm(this.props.docToWin, hideModal);
-  }
-
-  render () {
-    return (
-      <Modal dialogClassName="delete-conflicts-modal" show={this.props.show} onHide={this.close}>
-        <Modal.Header closeButton={false}>
-          <Modal.Title>Solve Conflicts</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <p>
-            <i className="icon-warning-sign"></i> Do you want to delete all conflicting revisions for this document?
-          </p>
-
-
-        </Modal.Body>
-        <Modal.Footer>
-          <div style={{float: 'left', marginTop: '10px'}}>
-            <label>
-              <input
-                style={{margin: '0 5px 3px 0'}}
-                onChange={() => { this.setState({checked: !this.state.checked }); }}
-                type="checkbox" />
-                Do not show this warning message again
-            </label>
-          </div>
-          <a
-            style={{marginRight: '10px', cursor: 'pointer'}}
-            onClick={this.close}
-            data-bypass="true"
-          >
-            Cancel
-          </a>
-
-          <ConfirmButton
-            onClick={this.onDeleteConflicts}
-            text="Delete Revisions"
-            buttonType="btn-danger" />
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-ConfirmModal.propTypes = {
-  onConfirm: PropTypes.func.isRequired,
-  toggleConfirmModal: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/rev-browser/components/conflictingrevisiondropdown.js b/app/addons/documents/rev-browser/components/conflictingrevisiondropdown.js
deleted file mode 100644
index 78c6a6d..0000000
--- a/app/addons/documents/rev-browser/components/conflictingrevisiondropdown.js
+++ /dev/null
@@ -1,53 +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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import PropTypes from 'prop-types';
-import ReactSelect from "react-select";
-
-const BackForwardControls = ({onClick, forward}) => {
-  const icon = forward ? 'fonticon-right-open' : 'fonticon-left-open';
-  const style = {height: '20px', width: '11px', marginTop: '7px'};
-
-  return <div style={style} className={icon} onClick={onClick}></div>;
-};
-
-BackForwardControls.propTypes = {
-  onClick: PropTypes.func.isRequired,
-};
-
-const ConflictingRevisionsDropDown = ({options, selected, onRevisionClick, onBackwardClick, onForwardClick}) => {
-  return (
-    <div className="conflicting-revs-dropdown">
-      <BackForwardControls backward onClick={onBackwardClick} />
-      <div style={{width: '345px', margin: '0 5px'}}>
-        <ReactSelect
-          name="form-field-name"
-          value={selected}
-          options={options}
-          clearable={false}
-          onChange={onRevisionClick} />
-      </div>
-      <BackForwardControls forward onClick={onForwardClick} />
-    </div>
-  );
-};
-ConflictingRevisionsDropDown.propTypes = {
-  options: PropTypes.array.isRequired,
-  selected: PropTypes.string.isRequired,
-  onRevisionClick: PropTypes.func.isRequired,
-  onBackwardClick: PropTypes.func.isRequired,
-  onForwardClick: PropTypes.func.isRequired,
-};
-
-export default ConflictingRevisionsDropDown;
diff --git a/app/addons/documents/rev-browser/components/controller.js b/app/addons/documents/rev-browser/components/controller.js
deleted file mode 100644
index 11b5472..0000000
--- a/app/addons/documents/rev-browser/components/controller.js
+++ /dev/null
@@ -1,79 +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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import RevisionBrowserControls from './revisionbrowsercontrols';
-import SplitScreenArea from './splitscreenarea';
-import RevisionDiffArea from './revisiondiffarea';
-import { ButtonGroup, Button } from "react-bootstrap";
-import {LoadLines} from '../../../components/components/loadlines';
-
-
-export default class DiffyController extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.toggleDiffViewFalse = this.toggleDiffView.bind(this, false);
-    this.toggleDiffViewTrue = this.toggleDiffView.bind(this, true);
-  }
-
-  componentDidMount () {
-    this.props.toggleConfirmModal(false, null);
-    this.props.initDiffEditor();
-  }
-
-  toggleDiffView (enableDiff) {
-    this.props.toggleDiffView(enableDiff);
-  }
-
-  render () {
-    const {tree, ours, theirs, conflictingRevs, isDiffViewEnabled} = this.props;
-
-    if (!tree.length && !theirs) {
-      return <LoadLines />;
-    }
-
-    // no conflicts happened for this doc
-    if (!theirs || !conflictingRevs.length) {
-      return <div style={{textAlign: 'center', color: '#fff'}}><h2>No conflicts</h2></div>;
-    }
-
-    return (
-      <div className="revision-wrapper scrollable">
-        <RevisionBrowserControls {...this.props} />
-        <div className="revision-view-controls">
-          <ButtonGroup className="two-sides-toggle-button">
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? 'active' : ''}
-              onClick={this.toggleDiffViewTrue}
-            >
-              <i className="icon-columns" /> Diff
-            </Button>
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? '' : 'active'}
-              onClick={this.toggleDiffViewFalse}
-            >
-              <i className="icon-file-text" /> Document
-            </Button>
-          </ButtonGroup>
-        </div>
-
-        {isDiffViewEnabled ?
-          <RevisionDiffArea ours={ours} theirs={theirs} /> :
-          <SplitScreenArea ours={ours} theirs={theirs} /> }
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/rev-browser/components/revisionbrowsercontrols.js b/app/addons/documents/rev-browser/components/revisionbrowsercontrols.js
deleted file mode 100644
index 7cc7dec..0000000
--- a/app/addons/documents/rev-browser/components/revisionbrowsercontrols.js
+++ /dev/null
@@ -1,146 +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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import PropTypes from 'prop-types';
-import app from '../../../../app';
-import ReactComponents from "../../../components/react-components";
-import ConflictingRevisionsDropDown from './conflictingrevisiondropdown';
-import ConfirmModal from './confirmmodal';
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-const storageKeyDeleteConflictsModal = 'deleteConflictsHideModal';
-
-export default class RevisionBrowserControls extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = {showModal: false};
-    this.selectAsWinner = this.selectAsWinner.bind(this);
-    this.onSelectAsWinnerClickOurs = this.onSelectAsWinnerClick.bind(this, this.props.ours);
-    this.onSelectAsWinnerClickTheirs = this.onSelectAsWinnerClick.bind(this, this.props.theirs);
-    this.onRevisionClick = this.onRevisionClick.bind(this);
-    this.onForwardClick = this.onForwardClick.bind(this);
-    this.onBackwardClick = this.onBackwardClick.bind(this);
-  }
-
-  onRevisionClick (revTheirs) {
-    this.props.chooseLeaves(this.props.ours, revTheirs.value);
-  }
-
-  onForwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index + 1];
-
-    if (!next) {
-      return;
-    }
-
-    this.props.chooseLeaves(this.props.ours, next);
-  }
-
-  onBackwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index - 1];
-
-    if (!next) {
-      return;
-    }
-
-    this.props.chooseLeaves(this.props.ours, next);
-  }
-
-  selectAsWinner (docToWin, doNotShowModalAgain) {
-    if (doNotShowModalAgain) {
-      app.utils.localStorageSet(storageKeyDeleteConflictsModal, true);
-    }
-
-    this.props.selectRevAsWinner(docToWin._id, docToWin._rev, this.props.tree);
-  }
-
-  onSelectAsWinnerClick (docToWin) {
-    if (app.utils.localStorageGet(storageKeyDeleteConflictsModal) !== true) {
-      this.props.toggleConfirmModal(true, docToWin);
-      return;
-    }
-
-    this.selectAsWinner(docToWin);
-  }
-
-  render () {
-    const {tree} = this.props;
-    const cellStyle = {paddingRight: '30px'};
-
-    return (
-      <div className="revision-browser-controls">
-        <ConfirmModal
-          toggleConfirmModal={this.props.toggleConfirmModal}
-          onConfirm={this.selectAsWinner}
-          docToWin={this.props.docToWin}
-          show={this.props.showConfirmModal}
-        />
-        <table style={{margin: '10px 60px', width: '100%'}}>
-          <tbody>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Server-Selected Rev: </td>
-              <td style={cellStyle}>
-                <div style={{lineHeight: '36px', height: '36px', width: '337px', color: '#000', backgroundColor: '#ffbbbb'}}>
-                  <b style={{paddingLeft: '10px'}}>{tree.winner}</b>
-                </div>
-              </td>
-              <td>
-                <ConfirmButton
-                  onClick={this.onSelectAsWinnerClickOurs}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Delete Other Conflicts"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Conflicting Revisions: </td>
-              <td style={cellStyle}>
-                <ConflictingRevisionsDropDown
-                  onRevisionClick={this.onRevisionClick}
-                  onForwardClick={this.onForwardClick}
-                  onBackwardClick={this.onBackwardClick}
-                  options={this.props.dropdownData}
-                  selected={this.props.theirs._rev} />
-              </td>
-              <td>
-                <ConfirmButton
-                  data-id="button-select-theirs"
-                  onClick={this.onSelectAsWinnerClickTheirs}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Select as Winner"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-
-    );
-  }
-}
-RevisionBrowserControls.propTypes = {
-  tree: PropTypes.object.isRequired,
-  ours: PropTypes.object.isRequired,
-  conflictingRevs: PropTypes.array.isRequired,
-};
diff --git a/app/addons/documents/rev-browser/components/revisiondiffarea.js b/app/addons/documents/rev-browser/components/revisiondiffarea.js
deleted file mode 100644
index d96c855..0000000
--- a/app/addons/documents/rev-browser/components/revisiondiffarea.js
+++ /dev/null
@@ -1,43 +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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import PropTypes from 'prop-types';
-import * as jdp from "jsondiffpatch";
-import "jsondiffpatch/dist/formatters-styles/html.css";
-
-const RevisionDiffArea = ({ours, theirs}) => {
-  if (!ours || !theirs) {
-    return <div></div>;
-  }
-
-  const delta = jdp.diff(ours, theirs);
-  const html = jdp.formatters.html.format(delta, ours);
-
-  return (
-    <div className="revision-diff-area">
-      <div
-        style={{marginTop: '30px'}}
-        dangerouslySetInnerHTML={{__html: html}}
-      >
-      </div>
-    </div>
-  );
-};
-RevisionDiffArea.propTypes = {
-  ours: PropTypes.object,
-  theirs: PropTypes.object,
-  currentRev: PropTypes.string
-};
-
-export default RevisionDiffArea;
diff --git a/app/addons/documents/rev-browser/components/splitscreenarea.js b/app/addons/documents/rev-browser/components/splitscreenarea.js
deleted file mode 100644
index b848d66..0000000
--- a/app/addons/documents/rev-browser/components/splitscreenarea.js
+++ /dev/null
@@ -1,74 +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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import ace from "brace";
-
-require('brace/ext/static_highlight');
-const highlight = ace.acequire('ace/ext/static_highlight');
-
-require('brace/mode/json');
-const JavaScriptMode = ace.acequire('ace/mode/json').Mode;
-
-require('brace/theme/idle_fingers');
-const theme = ace.acequire('ace/theme/idle_fingers');
-
-export default class SplitScreenArea extends React.Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidUpdate () {
-    this.hightlightAfterRender();
-  }
-
-  componentDidMount () {
-    this.hightlightAfterRender();
-  }
-
-  hightlightAfterRender () {
-    const format = (input) => { return JSON.stringify(input, null, '  '); };
-
-    const jsmode = new JavaScriptMode();
-    const left = this.revLeftOurs;
-    const right = this.revRightTheirs;
-
-    const leftRes = highlight.render(format(this.props.ours), jsmode, theme, 0, true);
-    left.innerHTML = leftRes.html;
-    const rightRes = highlight.render(format(this.props.theirs), jsmode, theme, 0, true);
-    right.innerHTML = rightRes.html;
-  }
-
-  render () {
-    const {ours, theirs} = this.props;
-
-    if (!ours || !theirs) {
-      return <div></div>;
-    }
-
-    return (
-      <div className="revision-split-area">
-        <div data-id="ours" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{ours._rev} (Server-Selected Rev)</div>
-          <pre ref={node => this.revLeftOurs = node}></pre>
-        </div>
-
-        <div data-id="theirs" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{theirs._rev}</div>
-          <pre ref={node => this.revRightTheirs = node}></pre>
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/rev-browser/container.js b/app/addons/documents/rev-browser/container.js
deleted file mode 100644
index d0ea5c6..0000000
--- a/app/addons/documents/rev-browser/container.js
+++ /dev/null
@@ -1,84 +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.
-
-import { connect } from 'react-redux';
-import RevisionBrowserController from './components/controller';
-
-import {
-  getTree,
-  getDoc,
-  getConflictDoc,
-  getConflictingRev,
-  getDatabaseName,
-  getOurs,
-  getTheirs,
-  getShowConfirmModal,
-  getDropdownData,
-  getIsDiffViewEnabled,
-  getDocToWin
-} from './reducers';
-
-import {
-  toggleConfirmModal,
-  initDiffEditor,
-  chooseLeaves,
-  selectRevAsWinner,
-  toggleDiffView
-} from './actions';
-
-const mapStateToProps = ({revisionBrowser}, ownProps) => {
-  return {
-    docId: ownProps.docId,
-    tree: getTree(revisionBrowser),
-    doc: getDoc(revisionBrowser),
-    conflictDoc: getConflictDoc(revisionBrowser),
-    conflictingRevs: getConflictingRev(revisionBrowser),
-    databaseName: getDatabaseName(revisionBrowser),
-    ours: getOurs(revisionBrowser),
-    theirs: getTheirs(revisionBrowser),
-    showConfirmModal: getShowConfirmModal(revisionBrowser),
-    dropdownData: getDropdownData(revisionBrowser),
-    isDiffViewEnabled: getIsDiffViewEnabled(revisionBrowser),
-    docToWin: getDocToWin(revisionBrowser)
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    toggleConfirmModal (show, docToWin) {
-      dispatch(toggleConfirmModal(show, docToWin));
-    },
-
-    initDiffEditor () {
-      dispatch(initDiffEditor(ownProps.databaseName, ownProps.docId));
-    },
-
-    chooseLeaves (doc, revTheirs) {
-      dispatch(chooseLeaves(doc, revTheirs));
-    },
-
-    selectRevAsWinner (id, rev, tree) {
-      dispatch(selectRevAsWinner(ownProps.databaseName, id, tree.paths, rev));
-    },
-
-    toggleDiffView (enableDiff) {
-      dispatch(toggleDiffView(enableDiff));
-    }
-  };
-};
-
-const RevisionBrowserContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(RevisionBrowserController);
-
-export default RevisionBrowserContainer;
diff --git a/app/addons/documents/rev-browser/reducers.js b/app/addons/documents/rev-browser/reducers.js
deleted file mode 100644
index 4ce2ed9..0000000
--- a/app/addons/documents/rev-browser/reducers.js
+++ /dev/null
@@ -1,92 +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.
-
-import {
-  REV_BROWSER_REV_TREE_LOADED,
-  REV_BROWSER_DIFF_DOCS_READY,
-  REV_BROWSER_DIFF_ENABLE_DIFF_VIEW,
-  REV_BROWSER_SHOW_CONFIRM_MODAL
-} from './actiontypes';
-
-const initialState = {
-  tree: [],
-  doc: {},
-  conflictDoc: false,
-  conflictingRevs: [],
-  databaseName: '',
-  ours: null,
-  theirs: null,
-  isDiffViewEnabled: true,
-  showConfirmModal: false,
-  docToWin: null
-};
-
-const revisionConflicts = (state = initialState, {type, options}) => {
-
-  switch (type) {
-    case REV_BROWSER_REV_TREE_LOADED:
-      const {
-        tree,
-        doc,
-        conflictDoc,
-        conflictingRevs,
-        databaseName,
-      } = options;
-      return {
-        ...state,
-        tree,
-        doc,
-        conflictDoc,
-        conflictingRevs,
-        databaseName,
-        theirs: conflictDoc,
-        ours: doc
-      };
-
-    case REV_BROWSER_DIFF_DOCS_READY:
-      return {
-        ...state,
-        theirs: options.theirs
-      };
-
-    case REV_BROWSER_DIFF_ENABLE_DIFF_VIEW:
-      return {
-        ...state,
-        isDiffViewEnabled: options.enableDiff
-      };
-
-    case REV_BROWSER_SHOW_CONFIRM_MODAL:
-      return {
-        ...state,
-        showConfirmModal: options.show,
-        docToWin: options.docToWin
-      };
-
-    default:
-      return state;
-  }
-
-};
-
-export default revisionConflicts;
-
-export const getTree = state => state.tree;
-export const getDoc = state => state.doc;
-export const getConflictDoc = state => state.conflictDoc;
-export const getConflictingRev = state => state.conflictingRevs;
-export const getDatabaseName = state => state.databaseName;
-export const getOurs = state => state.ours;
-export const getTheirs = state => state.theirs;
-export const getShowConfirmModal = state => state.showConfirmModal;
-export const getDropdownData = state => state.conflictingRevs.map(rev => { return {value: rev, label: rev}; });
-export const getIsDiffViewEnabled = state => state.isDiffViewEnabled;
-export const getDocToWin = state => state.docToWin;
diff --git a/app/addons/documents/rev-browser/rev-browser.components.js b/app/addons/documents/rev-browser/rev-browser.components.js
deleted file mode 100644
index 4ae29e0..0000000
--- a/app/addons/documents/rev-browser/rev-browser.components.js
+++ /dev/null
@@ -1,429 +0,0 @@
-import app from "../../../app";
-
-// 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import RevActions from "./rev-browser.actions";
-import RevStores from "./rev-browser.stores";
-import ReactComponents from "../../components/react-components";
-import { ButtonGroup, Button, Modal } from "react-bootstrap";
-import ReactSelect from "react-select";
-import jdp from "jsondiffpatch";
-import jdpformatters from "jsondiffpatch/src/formatters/html";
-import ace from "brace";
-import "jsondiffpatch/public/formatters-styles/html.css";
-
-const storageKeyDeleteConflictsModal = 'deleteConflictsHideModal';
-
-const store = RevStores.revBrowserStore;
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-require('brace/ext/static_highlight');
-const highlight = ace.acequire('ace/ext/static_highlight');
-
-require('brace/mode/json');
-const JavaScriptMode = ace.acequire('ace/mode/json').Mode;
-
-require('brace/theme/idle_fingers');
-const theme = ace.acequire('ace/theme/idle_fingers');
-
-
-class DiffyController extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = this.getStoreState();
-  }
-
-  getStoreState () {
-
-    return {
-      tree: store.getRevTree(),
-      ours: store.getOurs(),
-      theirs: store.getTheirs(),
-      conflictingRevs: store.getConflictingRevs(),
-      dropdownData: store.getDropdownData(),
-      isDiffViewEnabled: store.getIsDiffViewEnabled(),
-      databaseName: store.getDatabaseName()
-    };
-  }
-
-  componentDidMount () {
-    store.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount () {
-    store.off('change', this.onChange);
-  }
-
-  onChange () {
-    this.setState(this.getStoreState());
-  }
-
-  toggleDiffView (enableDiff) {
-    RevActions.toggleDiffView(enableDiff);
-  }
-
-  render () {
-    const {tree, ours, theirs, conflictingRevs, isDiffViewEnabled} = this.state;
-
-    if (!tree) {
-      return null;
-    }
-
-    // no conflicts happened for this doc
-    if (!theirs || !conflictingRevs.length) {
-      return <div style={{textAlign: 'center', color: '#fff'}}><h2>No conflicts</h2></div>;
-    }
-
-    return (
-      <div className="revision-wrapper scrollable">
-        <RevisionBrowserControls {...this.state} />
-        <div className="revision-view-controls">
-          <ButtonGroup className="two-sides-toggle-button">
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? 'active' : ''}
-              onClick={this.toggleDiffView.bind(this, true)}
-            >
-              <i className="icon-columns" /> Diff
-            </Button>
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? '' : 'active'}
-              onClick={this.toggleDiffView.bind(this, false)}
-            >
-              <i className="icon-file-text" /> Document
-            </Button>
-          </ButtonGroup>
-        </div>
-
-        {isDiffViewEnabled ?
-          <RevisionDiffArea ours={ours} theirs={theirs} /> :
-          <SplitScreenArea ours={ours} theirs={theirs} /> }
-      </div>
-    );
-  }
-}
-
-
-class SplitScreenArea extends React.Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidUpdate () {
-    this.hightlightAfterRender();
-  }
-
-  componentDidMount () {
-    this.hightlightAfterRender();
-  }
-
-  hightlightAfterRender () {
-    const format = (input) => { return JSON.stringify(input, null, '  '); };
-
-    const jsmode = new JavaScriptMode();
-    const left = this.revLeftOurs;
-    const right = this.revRightTheirs;
-
-    const leftRes = highlight.render(format(this.props.ours), jsmode, theme, 0, true);
-    left.innerHTML = leftRes.html;
-    const rightRes = highlight.render(format(this.props.theirs), jsmode, theme, 0, true);
-    right.innerHTML = rightRes.html;
-  }
-
-  render () {
-    const {ours, theirs} = this.props;
-
-    if (!ours || !theirs) {
-      return <div></div>;
-    }
-
-    return (
-      <div className="revision-split-area">
-        <div data-id="ours" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{ours._rev} (Server-Selected Rev)</div>
-          <pre ref={node => this.revLeftOurs = node}></pre>
-        </div>
-
-        <div data-id="theirs" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{theirs._rev}</div>
-          <pre ref={node => this.revRightTheirs = node}></pre>
-        </div>
-      </div>
-    );
-  }
-}
-
-const RevisionDiffArea = ({ours, theirs}) => {
-  if (!ours || !theirs) {
-    return <div></div>;
-  }
-
-  const delta = jdp.diff(ours, theirs);
-  const html = jdpformatters.format(delta, ours);
-
-  return (
-    <div className="revision-diff-area">
-      <div
-        style={{marginTop: '30px'}}
-        dangerouslySetInnerHTML={{__html: html}}
-      ></div>
-    </div>
-  );
-};
-RevisionDiffArea.propTypes = {
-  ours: PropTypes.object,
-  theirs: PropTypes.object,
-  currentRev: PropTypes.string
-};
-
-
-const ConflictingRevisionsDropDown = ({options, selected, onRevisionClick, onBackwardClick, onForwardClick}) => {
-  return (
-    <div className="conflicting-revs-dropdown">
-      <BackForwardControls backward onClick={onBackwardClick} />
-      <div style={{width: '345px', margin: '0 5px'}}>
-        <ReactSelect
-          name="form-field-name"
-          value={selected}
-          options={options}
-          clearable={false}
-          onChange={onRevisionClick} />
-      </div>
-      <BackForwardControls forward onClick={onForwardClick} />
-    </div>
-  );
-};
-ConflictingRevisionsDropDown.propTypes = {
-  options: PropTypes.array.isRequired,
-  selected: PropTypes.string.isRequired,
-  onRevisionClick: PropTypes.func.isRequired,
-  onBackwardClick: PropTypes.func.isRequired,
-  onForwardClick: PropTypes.func.isRequired,
-};
-
-class RevisionBrowserControls extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = {showModal: false};
-  }
-
-  onRevisionClick (revTheirs) {
-
-    RevActions.chooseLeaves(this.props.ours, revTheirs.value);
-  }
-
-  onForwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index + 1];
-
-    if (!next) {
-      return;
-    }
-
-    RevActions.chooseLeaves(this.props.ours, next);
-  }
-
-  onBackwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index - 1];
-
-    if (!next) {
-      return;
-    }
-
-    RevActions.chooseLeaves(this.props.ours, next);
-  }
-
-  selectAsWinner (docToWin, doNotShowModalAgain) {
-    if (doNotShowModalAgain) {
-      app.utils.localStorageSet(storageKeyDeleteConflictsModal, true);
-    }
-
-    RevActions.selectRevAsWinner(this.props.databaseName, docToWin._id, this.props.tree.paths, docToWin._rev);
-  }
-
-  onSelectAsWinnerClick (docToWin) {
-    if (app.utils.localStorageGet(storageKeyDeleteConflictsModal) !== true) {
-      RevActions.showConfirmModal(true, docToWin);
-      return;
-    }
-
-    this.selectAsWinner(docToWin);
-  }
-
-  render () {
-    const {tree} = this.props;
-    const cellStyle = {paddingRight: '30px'};
-
-    return (
-      <div className="revision-browser-controls">
-        <ConfirmModal onConfirm={this.selectAsWinner.bind(this)} />
-        <table style={{margin: '10px 60px', width: '100%'}}>
-          <tbody>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Server-Selected Rev: </td>
-              <td style={cellStyle}>
-                <div style={{lineHeight: '36px', height: '36px', width: '337px', color: '#000', backgroundColor: '#ffbbbb'}}>
-                  <b style={{paddingLeft: '10px'}}>{tree.winner}</b>
-                </div>
-              </td>
-              <td>
-                <ConfirmButton
-                  onClick={this.onSelectAsWinnerClick.bind(this, this.props.ours)}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Delete Other Conflicts"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Conflicting Revisions: </td>
-              <td style={cellStyle}>
-                <ConflictingRevisionsDropDown
-                  onRevisionClick={this.onRevisionClick.bind(this)}
-                  onForwardClick={this.onForwardClick.bind(this)}
-                  onBackwardClick={this.onBackwardClick.bind(this)}
-                  options={this.props.dropdownData}
-                  selected={this.props.theirs._rev} />
-              </td>
-              <td>
-                <ConfirmButton
-                  data-id="button-select-theirs"
-                  onClick={this.onSelectAsWinnerClick.bind(this, this.props.theirs)}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Select as Winner"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-
-    );
-  }
-}
-RevisionBrowserControls.propTypes = {
-  tree: PropTypes.object.isRequired,
-  ours: PropTypes.object.isRequired,
-  conflictingRevs: PropTypes.array.isRequired,
-};
-
-class ConfirmModal extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = this.getStoreState();
-  }
-
-  getStoreState () {
-    return {
-      show: store.getShowConfirmModal(),
-      docToWin: store.getDocToWin(),
-      checked: false
-    };
-  }
-
-  componentDidMount () {
-    store.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount () {
-    store.off('change', this.onChange);
-  }
-
-  onChange () {
-    this.setState(this.getStoreState());
-  }
-
-  close () {
-    RevActions.showConfirmModal(false, null);
-  }
-
-  onDeleteConflicts () {
-    const hideModal = this.state.checked;
-    this.props.onConfirm(this.state.docToWin, hideModal);
-  }
-
-  render () {
-    return (
-      <Modal dialogClassName="delete-conflicts-modal" show={this.state.show} onHide={this.close}>
-        <Modal.Header closeButton={false}>
-          <Modal.Title>Solve Conflicts</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <p>
-            <i className="icon-warning-sign"></i> Do you want to delete all conflicting revisions for this document?
-          </p>
-
-
-        </Modal.Body>
-        <Modal.Footer>
-          <div style={{float: 'left', marginTop: '10px'}}>
-            <label>
-              <input
-                style={{margin: '0 5px 3px 0'}}
-                onChange={() => { this.setState({checked: !this.state.checked }); }}
-                type="checkbox" />
-                Do not show this warning message again
-            </label>
-          </div>
-          <a
-            style={{marginRight: '10px', cursor: 'pointer'}}
-            onClick={this.close}
-            data-bypass="true"
-          >
-            Cancel
-          </a>
-
-          <ConfirmButton
-            onClick={this.onDeleteConflicts.bind(this)}
-            text="Delete Revisions"
-            buttonType="btn-danger" />
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-ConfirmModal.propTypes = {
-  onConfirm: PropTypes.func.isRequired,
-};
-
-const BackForwardControls = ({onClick, forward}) => {
-  const icon = forward ? 'fonticon-right-open' : 'fonticon-left-open';
-  const style = {height: '20px', width: '11px', marginTop: '7px'};
-
-  return <div style={style} className={icon} onClick={onClick}></div>;
-};
-BackForwardControls.propTypes = {
-  onClick: PropTypes.func.isRequired,
-};
-
-export default {
-  DiffyController: DiffyController
-};
diff --git a/app/addons/documents/rev-browser/rev-browser.stores.js b/app/addons/documents/rev-browser/rev-browser.stores.js
deleted file mode 100644
index 3b3f696..0000000
--- a/app/addons/documents/rev-browser/rev-browser.stores.js
+++ /dev/null
@@ -1,120 +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.
-
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./rev-browser.actiontypes";
-
-const Stores = {};
-
-Stores.RevBrowserStore = FauxtonAPI.Store.extend({
-  initialize: function () {
-    this.reset();
-  },
-
-  reset: function () {
-    this._revTree = null;
-
-    this._ours = null;
-    this._theirs = null;
-
-    this._dropDownData = null;
-    this._isDiffViewEnabled = true;
-
-    this._databaseName = null;
-
-    this._showConfirmModal = false;
-    this._docToWin = null;
-  },
-
-  prepareDropdownData: function (revs) {
-    return revs.map((el) => {
-
-      return { value: el, label: el };
-    });
-  },
-
-  getRevTree: function () {
-    return this._revTree;
-  },
-
-  getDatabaseName: function () {
-    return this._databaseName;
-  },
-
-  getOurs: function () {
-    return this._ours;
-  },
-
-  getTheirs: function () {
-    return this._theirs;
-  },
-
-  getConflictingRevs: function () {
-    return this._conflictingRevs;
-  },
-
-  getDropdownData: function () {
-    return this._dropDownData;
-  },
-
-  getIsDiffViewEnabled: function () {
-    return this._isDiffViewEnabled;
-  },
-
-  getShowConfirmModal: function () {
-    return this._showConfirmModal;
-  },
-
-  getDocToWin: function () {
-    return this._docToWin;
-  },
-
-  dispatch: function (action) {
-    switch (action.type) {
-      case ActionTypes.REV_BROWSER_REV_TREE_LOADED:
-        this._revTree = action.options.tree;
-        this._ours = action.options.doc;
-        this._conflictingRevs = action.options.conflictingRevs;
-        this._theirs = action.options.conflictDoc;
-
-        this._dropDownData = this.prepareDropdownData(this._conflictingRevs);
-
-        this._databaseName = action.options.databaseName;
-        break;
-
-      case ActionTypes.REV_BROWSER_DIFF_DOCS_READY:
-        this._theirs = action.options.theirs;
-        break;
-
-      case ActionTypes.REV_BROWSER_DIFF_ENABLE_DIFF_VIEW:
-        this._isDiffViewEnabled = action.options.enableDiff;
-        break;
-
-      case ActionTypes.REV_BROWSER_SHOW_CONFIRM_MODAL:
-        this._showConfirmModal = action.options.show;
-        this._docToWin = action.options.docToWin;
-        break;
-
-      default:
-        return;
-      // do nothing
-    }
-
-    this.triggerChange();
-  }
-
-});
-
-Stores.revBrowserStore = new Stores.RevBrowserStore();
-Stores.revBrowserStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.revBrowserStore.dispatch.bind(Stores.revBrowserStore));
-
-export default Stores;
diff --git a/app/addons/documents/routes-doc-editor.js b/app/addons/documents/routes-doc-editor.js
deleted file mode 100644
index f0d8e7e..0000000
--- a/app/addons/documents/routes-doc-editor.js
+++ /dev/null
@@ -1,127 +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.
-
-import React from 'react';
-import app from '../../app';
-import FauxtonAPI from "../../core/api";
-import Documents from "./resources";
-import Databases from "../databases/base";
-import DatabaseActions from '../databases/actions';
-import Actions from "./doc-editor/actions";
-import DocEditorContainer from "./doc-editor/components/DocEditorContainer";
-import RevBrowserContainer from './rev-browser/container';
-import {DocEditorLayout} from '../components/layouts';
-
-
-const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Databases',
-
-  roles: ['fx_loggedIn'],
-
-  initialize (route, options) {
-    this.databaseName = options[0];
-    this.docId = options[1];
-    this.database = this.database || new Databases.Model({ id: this.databaseName });
-    this.doc = new Documents.NewDoc(null, { database: this.database });
-  },
-
-  routes: {
-    'database/:database/:doc/conflicts': 'revisionBrowser',
-    'database/:database/:doc/code_editor': 'codeEditor',
-    'database/:database/_design/:ddoc/conflicts': 'revBrowserForDesignDoc',
-    'database/:database/_design/:ddoc': 'showDesignDoc',
-    'database/:database/_local/:doc': 'showLocalDoc',
-    'database/:database/:doc': 'codeEditor',
-    'database/:database/_new': 'codeEditorNewDoc',
-    'database/:database/_new?(:extra)': 'codeEditorNewDoc'
-  },
-
-  revisionBrowser: function (databaseName, docId) {
-    const backLink = FauxtonAPI.urls('allDocs', 'app', FauxtonAPI.url.encode(this.database.safeID()));
-    const docURL = FauxtonAPI.urls('document', 'app', this.database.safeID(), this.docId);
-
-    const crumbs = [
-      { name: this.database.safeID(), link: backLink },
-      { name: this.docId + ' > Conflicts' }
-    ];
-
-    return <DocEditorLayout
-      crumbs={crumbs}
-      endpoint={this.doc.url('apiurl')}
-      docURL={docURL}
-      component={<RevBrowserContainer docId={docId} databaseName={databaseName} />}
-    />;
-  },
-
-  revBrowserForDesignDoc: function(databaseName, ddoc) {
-    return this.revisionBrowser(databaseName, '_design/' + ddoc);
-  },
-
-  codeEditorNewDoc: function (databaseName, options) {
-    return this.codeEditor(databaseName, null, options);
-  },
-
-  codeEditor: function (databaseName, docId, options) {
-    const urlParams = app.getParams(options);
-    const backLink = FauxtonAPI.urls('allDocs', 'app', FauxtonAPI.url.encode(databaseName));
-
-    const crumbs =  [
-      { name: databaseName, link: backLink },
-      { name: docId ? docId : 'New Document' }
-    ];
-
-    this.database = new Databases.Model({ id: databaseName });
-
-    if (docId) {
-      this.doc = new Documents.Doc({ _id: docId }, { database: this.database, fetchConflicts: true });
-    } else {
-      const partitionKey = urlParams ? urlParams.partitionKey : undefined;
-      this.doc = new Documents.NewDoc(null, { database: this.database, partitionKey });
-    }
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-    Actions.dispatchInitDocEditor({ doc: this.doc, database: this.database });
-
-    let previousUrl = undefined;
-    const previousValidUrls = FauxtonAPI.router.lastPages.filter(url => {
-      // make sure it doesn't redirect back to the code editor when cloning docs
-      return url.includes('/_all_docs') || url.match(/_design\/(\S)*\/_/) || url.includes('/_find');
-    });
-    if (previousValidUrls.length > 0) {
-      previousUrl = previousValidUrls[previousValidUrls.length - 1];
-    }
-
-    return <DocEditorLayout
-      crumbs={crumbs}
-      endpoint={this.doc.url('apiurl')}
-      docURL={this.doc.documentation()}
-      partitionKey={urlParams.partitionKey}
-      component={<DocEditorContainer
-        database={this.database}
-        isNewDoc={docId ? false : true}
-        previousUrl={previousUrl}
-      />}
-    />;
-  },
-
-  showLocalDoc: function(databaseName, docId) {
-    return this.codeEditor(databaseName, '_local/' + docId);
-  },
-
-  showDesignDoc: function (database, ddoc) {
-    return this.codeEditor(database, '_design/' + ddoc);
-  }
-});
-
-
-export default {
-  DocEditorRouteObject: DocEditorRouteObject
-};
diff --git a/app/addons/documents/routes-documents.js b/app/addons/documents/routes-documents.js
deleted file mode 100644
index 3e9f914..0000000
--- a/app/addons/documents/routes-documents.js
+++ /dev/null
@@ -1,171 +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.
-
-import React from 'react';
-import FauxtonAPI from '../../core/api';
-import BaseRoute from './shared-routes';
-import DatabaseActions from '../databases/actions';
-import Databases from '../databases/base';
-import Resources from './resources';
-import {SidebarItemSelection} from './sidebar/helpers';
-import ComponentsActions from '../components/actions';
-import {DocsTabsSidebarLayout, ViewsTabsSidebarLayout, ChangesSidebarLayout} from './layouts';
-
-var DocumentsRouteObject = BaseRoute.extend({
-  routes: {
-    "database/:database/_partition/:partitionkey/_all_docs": {
-      route: "partitionedAllDocs",
-      roles: ["fx_loggedIn"]
-    },
-    "database/:database/_all_docs(:extra)": {
-      route: "globalAllDocs",
-      roles: ["fx_loggedIn"]
-    },
-    "database/:database/_partition/:partitionkey/_design/:ddoc/_info": {
-      route: "designDocMetadata",
-      roles: ['fx_loggedIn']
-    },
-    "database/:database/_design/:ddoc/_info": {
-      route: "designDocMetadataNoPartition",
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionKey/_changes': {
-      route: 'changes',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_changes': {
-      route: 'changes',
-      roles: ['fx_loggedIn']
-    }
-  },
-
-  initialize (route, options) {
-    this.initViews(options[0]);
-  },
-
-  initViews: function (dbName) {
-    this.databaseName = dbName;
-    this.database = new Databases.Model({id: this.databaseName});
-
-    this.createDesignDocsCollection();
-
-    this.addSidebar();
-  },
-
-  designDocMetadataNoPartition: function (database, ddoc) {
-    return this.designDocMetadata(database, '', ddoc);
-  },
-
-  designDocMetadata: function (database, partitionKey, ddoc) {
-    const designDocInfo = new Resources.DdocInfo({ _id: "_design/" + ddoc }, { database: this.database });
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddoc,
-      designDocSection: 'metadata'
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(database);
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <ViewsTabsSidebarLayout
-      showEditView={false}
-      docURL={designDocInfo.documentation()}
-      endpoint={designDocInfo.url('apiurl')}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      designDocInfo={designDocInfo}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  globalAllDocs: function (databaseName, options) {
-    return this.allDocs(databaseName, '', options);
-  },
-
-  partitionedAllDocs: function (databaseName, partitionKey) {
-    return this.allDocs(databaseName, partitionKey);
-  },
-
-  /*
-  * docParams are the options fauxton uses to fetch from the server
-  * urlParams are what are shown in the url and to the user
-  * They are not the same when paginating
-  */
-  allDocs: function (databaseName, partitionKey, options) {
-    const params = this.createParams(options);
-    const docParams = params.docParams;
-
-    const url = partitionKey ?
-      FauxtonAPI.urls('partitioned_allDocs', 'server', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) :
-      FauxtonAPI.urls('allDocsSanitized', 'server', databaseName);
-
-    // this is used for the header and sidebar
-    this.database.buildAllDocs(docParams);
-
-    const onlyShowDdocs = !!(docParams.startkey && docParams.startkey.indexOf("_design") > -1);
-    let tab = 'all-docs';
-    if (onlyShowDdocs) {
-      tab = 'design-docs';
-    }
-
-    const selectedNavItem = new SidebarItemSelection(tab);
-    ComponentsActions.showDeleteDatabaseModal({showDeleteModal: false, dbId: ''});
-
-    const endpoint = partitionKey ?
-      FauxtonAPI.urls('partitioned_allDocs', 'apiurl', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) :
-      this.database.allDocs.urlRef("apiurl", {});
-    const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
-    const navigateToPartitionedAllDocs = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('partitioned_allDocs', 'app', encodeURIComponent(databaseName),
-        encodeURIComponent(partKey));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-    const navigateToGlobalAllDocs = () => {
-      const baseUrl = FauxtonAPI.urls('allDocs', 'app', encodeURIComponent(databaseName));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-    const dropDownLinks = this.getCrumbs(this.database);
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-    return <DocsTabsSidebarLayout
-      docURL={docURL}
-      endpoint={endpoint}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      designDocs={this.designDocs}
-      fetchUrl={url}
-      ddocsOnly={onlyShowDdocs}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedAllDocs}
-      onGlobalModeSelected={navigateToGlobalAllDocs}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  changes: function (databaseName, partitionKey) {
-    const selectedNavItem = new SidebarItemSelection('changes');
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-
-    return <ChangesSidebarLayout
-      endpoint={FauxtonAPI.urls('changes', 'apiurl', this.database.id, '')}
-      docURL={this.database.documentation()}
-      dbName={this.database.id}
-      dropDownLinks={this.getCrumbs(this.database)}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  }
-
-});
-
-export default DocumentsRouteObject;
diff --git a/app/addons/documents/routes-index-editor.js b/app/addons/documents/routes-index-editor.js
deleted file mode 100644
index 321bb2f..0000000
--- a/app/addons/documents/routes-index-editor.js
+++ /dev/null
@@ -1,204 +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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import BaseRoute from "./shared-routes";
-import ActionsIndexEditor from "./index-editor/actions";
-import DatabaseActions from '../databases/actions';
-import Databases from "../databases/base";
-import SidebarActions from './sidebar/actions';
-import {SidebarItemSelection} from './sidebar/helpers';
-import {DocsTabsSidebarLayout, ViewsTabsSidebarLayout} from './layouts';
-
-const IndexEditorAndResults = BaseRoute.extend({
-  routes: {
-    'database/:database/_partition/:partitionkey/new_view': {
-      route: 'createView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/new_view/:designDoc': {
-      route: 'createView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/new_view': {
-      route: 'createViewNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/new_view/:designDoc': {
-      route: 'createViewNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_view/:view': {
-      route: 'showPartitionedView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_view/:view': {
-      route: 'showGlobalView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_view/:view/edit': {
-      route: 'editView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_view/:view/edit': {
-      route: 'editViewNoPartition',
-      roles: ['fx_loggedIn']
-    }
-  },
-
-  initialize (route, options) {
-    var databaseName = options[0];
-    this.databaseName = databaseName;
-    this.database = new Databases.Model({id: databaseName});
-    this.createDesignDocsCollection();
-    this.addSidebar();
-  },
-
-  showGlobalView: function (databaseName, ddoc, viewName) {
-    return this.showView(databaseName, '', ddoc, viewName);
-  },
-
-  showPartitionedView: function (databaseName, partitionKey, ddoc, viewName) {
-    return this.showView(databaseName, partitionKey, ddoc, viewName);
-  },
-
-  showView: function (databaseName, partitionKey, ddoc, viewName) {
-    viewName = viewName.replace(/\?.*$/, '');
-
-    ActionsIndexEditor.dispatchClearIndex();
-    ActionsIndexEditor.dispatchFetchDesignDocsBeforeEdit({
-      viewName: viewName,
-      isNewView: false,
-      database: this.database,
-      designDocs: this.designDocs,
-      designDocId: '_design/' + ddoc
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddoc,
-      designDocSection: 'Views',
-      indexName: viewName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const url = FauxtonAPI.urls('view', 'server', encodeURIComponent(databaseName), encodedPartKey,
-      encodeURIComponent(ddoc), encodeURIComponent(viewName));
-    const endpoint = FauxtonAPI.urls('view', 'apiurl', encodeURIComponent(databaseName), encodedPartKey,
-      encodeURIComponent(ddoc), encodeURIComponent(viewName));
-    const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
-    const navigateToPartitionedView = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('partitioned_view', 'app', encodeURIComponent(databaseName),
-        encodeURIComponent(partKey), encodeURIComponent(ddoc));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(viewName));
-    };
-    const navigateToGlobalView = () => {
-      const baseUrl = FauxtonAPI.urls('view', 'app', encodeURIComponent(databaseName), encodeURIComponent(ddoc));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(viewName));
-    };
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <DocsTabsSidebarLayout
-      docURL={docURL}
-      endpoint={endpoint}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      fetchUrl={url}
-      ddocsOnly={false}
-      deleteEnabled={false}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedView}
-      onGlobalModeSelected={navigateToGlobalView}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  createViewNoPartition: function (databaseName, _designDoc) {
-    return this.createView(databaseName, '', _designDoc);
-  },
-
-  createView: function (database, partitionKey, _designDoc) {
-    let isNewDesignDoc = true;
-    let designDoc = 'new-doc';
-
-    if (_designDoc) {
-      designDoc = '_design/' + _designDoc;
-      isNewDesignDoc = false;
-    }
-
-    ActionsIndexEditor.dispatchFetchDesignDocsBeforeEdit({
-      viewName: 'new-view',
-      isNewView: true,
-      database: this.database,
-      designDocs: this.designDocs,
-      designDocId: designDoc,
-      isNewDesignDoc: isNewDesignDoc
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(database);
-
-    const selectedNavItem = new SidebarItemSelection('');
-    const dropDownLinks = this.getCrumbs(this.database);
-
-    return <ViewsTabsSidebarLayout
-      showIncludeAllDocs={true}
-      docURL={FauxtonAPI.constants.DOC_URLS.GENERAL}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  editViewNoPartition: function (databaseName, ddocName, viewName) {
-    return this.editView(databaseName, '', ddocName, viewName);
-  },
-
-  editView: function (databaseName, partitionKey, ddocName, viewName) {
-    ActionsIndexEditor.dispatchFetchDesignDocsBeforeEdit({
-      viewName: viewName,
-      isNewView: false,
-      database: this.database,
-      designDocs: this.designDocs,
-      designDocId: '_design/' + ddocName
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddocName,
-      designDocSection: 'Views',
-      indexName: viewName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
-    const endpoint = FauxtonAPI.urls('view', 'apiurl', databaseName, ddocName, viewName);
-    const dropDownLinks = this.getCrumbs(this.database);
-
-    return <ViewsTabsSidebarLayout
-      showIncludeAllDocs={true}
-      docURL={docURL}
-      endpoint={endpoint}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  }
-
-});
-
-export default IndexEditorAndResults;
diff --git a/app/addons/documents/routes-mango.js b/app/addons/documents/routes-mango.js
deleted file mode 100644
index b4981f0..0000000
--- a/app/addons/documents/routes-mango.js
+++ /dev/null
@@ -1,141 +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.
-
-import React from 'react';
-import app from '../../app';
-import FauxtonAPI from '../../core/api';
-import Databases from '../databases/resources';
-import DatabaseActions from '../databases/actions';
-import Documents from './shared-resources';
-import {MangoLayoutContainer} from './mangolayout';
-
-const MangoIndexEditorAndQueryEditor = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Databases',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-  routes: {
-    'database/:database/_partition/:partitionkey/_index': {
-      route: 'createIndex',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_index': {
-      route: 'createIndexNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_find': {
-      route: 'findUsingIndex',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_find': {
-      route: 'findUsingIndexNoPartition',
-      roles: ['fx_loggedIn']
-    },
-  },
-
-  initialize: function (route, options) {
-    var databaseName = options[0];
-    this.databaseName = databaseName;
-    this.database = new Databases.Model({id: databaseName});
-  },
-
-  findUsingIndexNoPartition: function (database) {
-    return this.findUsingIndex(database, '');
-  },
-
-  findUsingIndex: function (database, partitionKey) {
-    const encodedPartitionKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const url = FauxtonAPI.urls(
-      'allDocs', 'app', encodeURIComponent(this.databaseName), encodedPartitionKey
-    );
-
-    const partKeyUrlComponent = partitionKey ? `/${encodedPartitionKey}` : '';
-    const fetchUrl = '/' + encodeURIComponent(this.databaseName) + partKeyUrlComponent + '/_find';
-
-    const crumbs = [
-      {name: database, link: url},
-      {name: app.i18n.en_US['mango-title-editor']}
-    ];
-
-    const endpoint = FauxtonAPI.urls('mango', 'query-apiurl', encodeURIComponent(this.databaseName), encodedPartitionKey);
-
-    const navigateToPartitionedView = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(database),
-        encodeURIComponent(partKey));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-    const navigateToGlobalView = () => {
-      const baseUrl = FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(database));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-
-    return <MangoLayoutContainer
-      database={database}
-      crumbs={crumbs}
-      docURL={FauxtonAPI.constants.DOC_URLS.MANGO_SEARCH}
-      endpoint={endpoint}
-      edit={false}
-      databaseName={this.databaseName}
-      fetchUrl={fetchUrl}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedView}
-      onGlobalModeSelected={navigateToGlobalView}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  createIndexNoPartition: function (database) {
-    return this.createIndex(database, '');
-  },
-
-  createIndex: function (database, partitionKey) {
-    const designDocs = new Documents.AllDocs(null, {
-      database: this.database,
-      paging: {
-        pageSize: 500
-      },
-      params: {
-        startkey: '_design/',
-        endkey: '_design0',
-        include_docs: true,
-        limit: 500
-      }
-    });
-
-    const encodedPartitionKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const url = FauxtonAPI.urls(
-      'allDocs', 'app', encodeURIComponent(this.databaseName), encodedPartitionKey
-    );
-    const endpoint = FauxtonAPI.urls('mango', 'index-apiurl', encodeURIComponent(this.databaseName), encodedPartitionKey);
-
-    const crumbs = [
-      {name: database, link: url},
-      {name: app.i18n.en_US['mango-indexeditor-title']}
-    ];
-
-    DatabaseActions.fetchSelectedDatabaseInfo(database);
-
-    return <MangoLayoutContainer
-      showIncludeAllDocs={false}
-      crumbs={crumbs}
-      docURL={FauxtonAPI.constants.DOC_URLS.MANGO_INDEX}
-      endpoint={endpoint}
-      edit={true}
-      designDocs={designDocs}
-      databaseName={this.databaseName}
-      partitionKey={partitionKey}
-    />;
-  }
-});
-
-export default {
-  MangoIndexEditorAndQueryEditor: MangoIndexEditorAndQueryEditor
-};
diff --git a/app/addons/documents/routes.js b/app/addons/documents/routes.js
deleted file mode 100644
index 201659a..0000000
--- a/app/addons/documents/routes.js
+++ /dev/null
@@ -1,26 +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.
-
-import Documents from './shared-resources';
-import DocumentsRouteObject from "./routes-documents";
-import docEditor from "./routes-doc-editor";
-import IndexEditorRouteObject from "./routes-index-editor";
-import Mango from "./routes-mango";
-
-Documents.RouteObjects = [
-  docEditor.DocEditorRouteObject,
-  DocumentsRouteObject,
-  IndexEditorRouteObject,
-  Mango.MangoIndexEditorAndQueryEditor
-];
-
-export default Documents;
diff --git a/app/addons/documents/shared-resources.js b/app/addons/documents/shared-resources.js
deleted file mode 100644
index d0ff692..0000000
--- a/app/addons/documents/shared-resources.js
+++ /dev/null
@@ -1,329 +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.
-
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-import { deleteRequest } from "../../core/ajax";
-import PagingCollection from "../../../assets/js/plugins/cloudant.pagingcollection";
-
-// defined here because this is contains the base resources used throughout the addon and outside,
-// so it's the first code that gets run
-var Documents = FauxtonAPI.addon();
-
-
-Documents.Doc = FauxtonAPI.Model.extend({
-  idAttribute: "_id",
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.GENERAL;
-  },
-
-  url: function (context) {
-    if (context === undefined) {
-      context = 'server';
-    }
-
-    // new without id make a POST to the DB and not a PUT on a DB
-    let id = this.safeID();
-    if (!id) {
-      id = '';
-    }
-
-    const query = this.fetchConflicts ? '?conflicts=true' : '';
-    return FauxtonAPI.urls('document', context, this.getDatabase().safeID(), id, query);
-  },
-
-  initialize: function (_attrs, options) {
-    if (this.collection && this.collection.database) {
-      this.database = this.collection.database;
-    } else if (options.database) {
-      this.database = options.database;
-    }
-
-    if (options.fetchConflicts) {
-      this.fetchConflicts = true;
-    }
-    this.partitionKey = options.partitionKey;
-  },
-
-  // HACK: the doc needs to know about the database, but it may be
-  // set directly or indirectly in all docs
-  getDatabase: function () {
-    return this.database ? this.database : this.collection.database;
-  },
-
-  validate: function (attrs) {
-    if (this.id && this.id !== attrs._id && this.get('_rev')) {
-      return "Cannot change a documents id.";
-    }
-  },
-
-  docType: function () {
-    return app.utils.getDocTypeFromId(this.id);
-  },
-
-  // @deprecated, see isJSONDocBulkDeletable
-  isBulkDeletable: function () {
-    return !!this.id && !!this.get('_rev');
-  },
-
-  isDeletable: function () {
-    return !!this.id;
-  },
-
-  isFromView: function () {
-    return !this.id;
-  },
-
-  isMangoDoc: function () {
-    if (!this.isDdoc()) return false;
-    if (this.get('language') === 'query') {
-      return true;
-    }
-
-    if (this.get('doc') && this.get('doc').language === 'query') {
-      return true;
-    }
-
-    return false;
-  },
-
-  isDdoc: function () {
-    return this.docType() === "design doc";
-  },
-
-  setDDocPartitionedOption: function (isPartitioned) {
-    if (!this.isDdoc()) {
-      return false;
-    }
-    let options = this.get('options');
-    if (!options) {
-      options = {};
-    }
-    options.partitioned = isPartitioned;
-    this.set({ options });
-
-    return true;
-  },
-
-  setDdocView: function (view, map, reduce) {
-    if (!this.isDdoc()) {
-      return false;
-    }
-
-    let views = this.get('views');
-    // handles instances where the ddoc is empty (created manually)
-    if (!views) {
-      views = {};
-      this.set({language: "javascript"});
-    }
-    const tempView = views[view] || {};
-
-    if (reduce) {
-      tempView.reduce = reduce;
-    } else {
-      delete tempView.reduce;
-    }
-    tempView.map = map;
-
-    views[view] = tempView;
-    this.set({views: views});
-
-    return true;
-  },
-
-  removeDdocView: function (viewName) {
-    if (!this.isDdoc()) return false;
-    var views = this.get('views');
-
-    delete views[viewName];
-    this.set({views: views});
-  },
-
-  dDocModel: function () {
-    if (!this.isDdoc()) return false;
-    var doc = this.get('doc');
-
-    if (doc) {
-      doc._rev = this.get('_rev');
-      return new Documents.Doc(doc, {database: this.database});
-    }
-
-    return this;
-  },
-
-  safeID: function () {
-    return app.utils.getSafeIdForDoc(this.id);
-  },
-
-  destroy: function () {
-    const url = this.url() + "?rev=" + this.get('_rev');
-    return deleteRequest(url).then(res => {
-      if (res.error) {
-        throw new Error(res.reason || res.error);
-      }
-      return res;
-    });
-  },
-
-  parse: function (resp) {
-    if (resp.rev) {
-      resp._rev = resp.rev;
-      delete resp.rev;
-    }
-    if (resp.id) {
-      if (_.isUndefined(this.id)) {
-        resp._id = resp.id;
-      }
-    }
-
-    if (resp.ok) {
-      delete resp.id;
-      delete resp.ok;
-    }
-
-    return resp;
-  },
-
-  prettyJSON: function () {
-    var data = this.get("doc") ? this.get("doc") : this.attributes;
-
-    return JSON.stringify(data, null, "  ");
-  },
-
-  copy: function (copyId) {
-    const attrs = Object.assign({}, this.attributes, {_id: copyId});
-    delete attrs._rev;
-    const clonedDoc = new this.constructor(attrs, {
-      database: this.database
-    });
-    return clonedDoc.save();
-  },
-
-  isNewDoc: function () {
-    return this.get('_rev') ? false : true;
-  }
-});
-
-
-Documents.AllDocs = PagingCollection.extend({
-  model: Documents.Doc,
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.GENERAL;
-  },
-  initialize: function (_models, options) {
-    this.viewMeta = options.viewMeta;
-    this.database = options.database;
-    this.params = _.clone(options.params);
-
-    this.on("remove", this.decrementTotalRows, this);
-    this.perPageLimit = options.perPageLimit || 20;
-
-    if (!this.params.limit) {
-      this.params.limit = this.perPageLimit;
-    }
-  },
-
-  isEditable: function () {
-    return true;
-  },
-
-  urlRef: function (context, params) {
-    var query = "";
-
-    if (params) {
-      if (!_.isEmpty(params)) {
-        query = "?" + app.utils.queryParams(params);
-      } else {
-        query = '';
-      }
-    } else if (this.params) {
-      query = "?" + app.utils.queryParams(this.params);
-    }
-    if (_.isUndefined(context)) {
-      context = 'server';
-    }
-    return FauxtonAPI.urls('allDocs', context, this.database.safeID(), query);
-  },
-
-  url: function () {
-    return this.urlRef.apply(this, arguments);
-  },
-
-  simple: function () {
-    var docs = this.map(function (item) {
-      return {
-        _id: item.id,
-        _rev: item.get('_rev'),
-      };
-    });
-
-    return new Documents.AllDocs(docs, {
-      database: this.database,
-      params: this.params
-    });
-  },
-
-  totalRows: function () {
-    return this.viewMeta.total_rows || "unknown";
-  },
-
-  decrementTotalRows: function () {
-    if (this.viewMeta.total_rows) {
-      this.viewMeta.total_rows = this.viewMeta.total_rows - 1;
-      this.trigger('totalRows:decrement');
-    }
-  },
-
-  updateSeq: function () {
-    if (!this.viewMeta) {
-      return false;
-    }
-    return this.viewMeta.update_seq || false;
-  },
-
-  parse: function (resp) {
-    var rows = resp.rows;
-
-    // remove any query errors that may return without doc info
-    // important for when querying keys on all docs
-    var cleanRows = _.filter(rows, function (row) {
-      return row.value;
-    });
-
-    resp.rows = _.map(cleanRows, function (row) {
-      var res = {
-        _id: row.id,
-        _rev: row.value.rev,
-        value: row.value,
-        key: row.key
-      };
-
-      if (row.doc) {
-        res.doc = row.doc;
-      }
-
-      return res;
-    });
-
-    return PagingCollection.prototype.parse.call(this, resp);
-  },
-
-  clone: function () {
-    return new this.constructor(this.models, {
-      database: this.database,
-      params: this.params,
-      paging: this.paging
-    });
-  }
-});
-
-export default Documents;
diff --git a/app/addons/documents/shared-routes.js b/app/addons/documents/shared-routes.js
deleted file mode 100644
index 0016955..0000000
--- a/app/addons/documents/shared-routes.js
+++ /dev/null
@@ -1,69 +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.
-
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-import Documents from "./shared-resources";
-import SidebarActions from "./sidebar/actions";
-
-// The Documents section is built up a lot of different route object which share code. This contains
-// base functionality that can be used across routes / addons
-var BaseRoute = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Databases',
-
-  createDesignDocsCollection: function () {
-    this.designDocs = new Documents.AllDocs(null, {
-      database: this.database,
-      paging: {
-        pageSize: 500
-      },
-      params: {
-        startkey: '_design/',
-        endkey: '_design0',
-        include_docs: true,
-        limit: 500
-      }
-    });
-  },
-
-  addSidebar: function (selectedNavItem) {
-    var options = {
-      designDocs: this.designDocs,
-      database: this.database
-    };
-    if (selectedNavItem) {
-      options.selectedNavItem = selectedNavItem;
-    }
-
-    SidebarActions.dispatchNewOptions(options);
-  },
-
-  getCrumbs: function (database) {
-    return [
-      { "type": "back", "link": FauxtonAPI.urls('allDBs', 'app')},
-      { "name": database.id }
-    ];
-  },
-
-  createParams: function (options) {
-    const urlParams = app.getParams(options),
-          params = Documents.QueryParams.parse(urlParams);
-
-    return {
-      urlParams: urlParams,
-      docParams: params
-    };
-  }
-});
-
-
-export default BaseRoute;
diff --git a/app/addons/documents/sidebar/SidebarControllerContainer.js b/app/addons/documents/sidebar/SidebarControllerContainer.js
deleted file mode 100644
index 9b85a26..0000000
--- a/app/addons/documents/sidebar/SidebarControllerContainer.js
+++ /dev/null
@@ -1,122 +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.
-
-import { connect } from 'react-redux';
-import SidebarComponents from './sidebar';
-import Action from './actions';
-import { getDatabase, getDesignDocPartitioned } from './reducers';
-
-
-// returns a simple array of design doc IDs
-const getAvailableDesignDocs = (state) => {
-  const availableDocs = state.designDocs.filter((doc) => {
-    return !doc.isMangoDoc();
-  });
-  return _.map(availableDocs, (doc) => {
-    return doc.id;
-  });
-};
-
-const getDeleteIndexDesignDoc = (state) => {
-  const designDoc = state.designDocs.find((ddoc) => {
-    return '_design/' + state.deleteIndexModalDesignDocName === ddoc.id;
-  });
-
-  return designDoc ? designDoc.dDocModel() : null;
-};
-
-
-const selectedNavItem = (selectedItem) => {
-
-  // resets previous selection and sets new values
-  const settings = {
-    designDocName: '',
-    designDocSection: '',
-    indexName: '',
-    navItem: '',
-    ...selectedItem
-  };
-  return settings;
-};
-
-const mapStateToProps = ({ sidebar, databases }, ownProps) => {
-  return {
-    database: getDatabase(sidebar),
-    selectedNav: selectedNavItem(ownProps.selectedNavItem),
-    designDocs: sidebar.designDocs,
-    designDocList: sidebar.designDocList,
-    availableDesignDocIds: getAvailableDesignDocs(sidebar),
-    toggledSections: sidebar.toggledSections,
-    isLoading: sidebar.loading || databases.isLoadingDbInfo,
-    selectedPartitionKey: ownProps.selectedPartitionKey,
-    isDbPartitioned: databases.isDbPartitioned,
-
-    deleteIndexModalVisible: sidebar.deleteIndexModalVisible,
-    deleteIndexModalText: sidebar.deleteIndexModalText,
-    deleteIndexModalOnSubmit: sidebar.deleteIndexModalOnSubmit,
-    deleteIndexModalIndexName: sidebar.deleteIndexModalIndexName,
-    deleteIndexModalDesignDoc: getDeleteIndexDesignDoc(sidebar),
-
-    cloneIndexModalVisible: sidebar.cloneIndexModalVisible,
-    cloneIndexModalTitle: sidebar.cloneIndexModalTitle,
-    cloneIndexModalSelectedDesignDoc: sidebar.cloneIndexModalSelectedDesignDoc,
-    cloneIndexModalSelectedDesignDocPartitioned: getDesignDocPartitioned(sidebar, databases.isDbPartitioned),
-    cloneIndexModalNewDesignDocName: sidebar.cloneIndexModalNewDesignDocName,
-    cloneIndexModalNewDesignDocPartitioned: sidebar.cloneIndexModalNewDesignDocPartitioned,
-    cloneIndexModalOnSubmit: sidebar.cloneIndexModalOnSubmit,
-    cloneIndexDesignDocProp: sidebar.cloneIndexDesignDocProp,
-    cloneIndexModalNewIndexName: sidebar.cloneIndexModalNewIndexName,
-    cloneIndexSourceIndexName: sidebar.cloneIndexModalSourceIndexName,
-    cloneIndexSourceDesignDocName: sidebar.cloneIndexModalSourceDesignDocName,
-    cloneIndexModalIndexLabel: sidebar.cloneIndexModalIndexLabel
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    toggleContent: (designDoc, indexGroup) => {
-      dispatch(Action.toggleContent(designDoc, indexGroup));
-    },
-    hideCloneIndexModal: () => {
-      dispatch(Action.hideCloneIndexModal());
-    },
-    hideDeleteIndexModal: () => {
-      dispatch(Action.hideDeleteIndexModal());
-    },
-    showDeleteIndexModal: (indexName, designDocName, indexLabel, onDelete) => {
-      dispatch(Action.showDeleteIndexModal(indexName, designDocName, indexLabel, onDelete));
-    },
-    showCloneIndexModal: (indexName, designDocName, indexLabel, onSubmit) => {
-      dispatch(Action.showCloneIndexModal(indexName, designDocName, indexLabel, onSubmit));
-    },
-    selectDesignDoc: (designDoc) => {
-      dispatch(Action.selectDesignDoc(designDoc));
-    },
-    updateNewDesignDocName: (designDocName) => {
-      dispatch(Action.updateNewDesignDocName(designDocName));
-    },
-    updateNewDesignDocPartitioned: (isPartitioned) => {
-      dispatch(Action.updateNewDesignDocPartitioned(isPartitioned));
-    },
-    setNewCloneIndexName: (indexName) => {
-      dispatch(Action.setNewCloneIndexName(indexName));
-    }
-  };
-};
-
-const SidebarControllerContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SidebarComponents.SidebarController);
-
-export default SidebarControllerContainer;
-
diff --git a/app/addons/documents/sidebar/__tests__/sidebar.actions.test.js b/app/addons/documents/sidebar/__tests__/sidebar.actions.test.js
deleted file mode 100644
index cbca2d0..0000000
--- a/app/addons/documents/sidebar/__tests__/sidebar.actions.test.js
+++ /dev/null
@@ -1,69 +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.
-
-import utils from '../../../../../test/mocha/testUtils';
-import FauxtonAPI from "../../../../core/api";
-import Actions from '../actions';
-import sinon from 'sinon';
-
-const {restore} = utils;
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Sidebar actions', () => {
-
-  beforeEach(() => {
-    FauxtonAPI.reduxState = sinon.stub().returns({
-      sidebar:{
-        loading: true
-      }
-    });
-    FauxtonAPI.reduxDispatch = sinon.stub();
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.navigate);
-    restore(FauxtonAPI.addNotification);
-  });
-
-  it("should show a notification and redirect if database doesn't exist", (done) => {
-    const navigateSpy = sinon.spy(FauxtonAPI, 'navigate');
-    const notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-
-    const database = {
-      safeID : () => 'safe-id-db'
-    };
-
-    const options = {
-      database,
-      designDocs: {
-        database,
-        fetch: () => {
-          return Promise.reject({
-            responseJSON: {
-              error: 'not_found'
-            }
-          });
-        },
-      }
-    };
-
-    Actions.dispatchNewOptions(options);
-    process.nextTick(() => {
-      expect(notificationSpy.calledOnce).toBeTruthy();
-      expect(/not exist/.test(notificationSpy.args[0][0].msg)).toBeTruthy();
-      expect(navigateSpy.calledOnce).toBeTruthy();
-      expect(navigateSpy.args[0][0]).toEqual('/');
-      done();
-    });
-  });
-
-});
diff --git a/app/addons/documents/sidebar/__tests__/sidebar.components.test.js b/app/addons/documents/sidebar/__tests__/sidebar.components.test.js
deleted file mode 100644
index c3db18a..0000000
--- a/app/addons/documents/sidebar/__tests__/sidebar.components.test.js
+++ /dev/null
@@ -1,254 +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.
-
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import utils from '../../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../../core/api';
-import '../../base';
-import DesignDoc from '../components/DesignDoc';
-import IndexSection from '../components/IndexSection';
-import MainSidebar from '../components/MainSidebar';
-
-const { restore} = utils;
-
-describe('DesignDoc', () => {
-  const database = { id: 'test-db' };
-  const selectedNavInfo = {
-    navItem: 'all-docs',
-    designDocName: '',
-    designDocSection: '',
-    indexName: ''
-  };
-  const defaultProps = {
-    database,
-    toggle: () => {},
-    sidebarListTypes: [],
-    isExpanded: true,
-    isPartitioned: false,
-    designDocName: 'doc-$-#-.1',
-    selectedNavInfo,
-    toggledSections: {},
-    designDoc: {},
-    showDeleteIndexModal: () => {},
-    showCloneIndexModal: () => {}
-  };
-
-  afterEach(() => {
-    restore(FauxtonAPI.urls);
-  });
-
-  it('confirm URLs are properly encoded when design doc name has special chars', () => {
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    expect(wrapper.find('a.icon.fonticon-plus-circled').at(1).props()['href']).toContain('/doc-%24-%23-.1');
-    expect(wrapper.find('a.toggle-view.accordion-header').props()['href']).toContain('/doc-%24-%23-.1');
-  });
-
-  it('check toggle() works when design doc name has special characters', () => {
-    sinon.stub(FauxtonAPI, 'urls');
-
-    const toggleStub = sinon.stub();
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      toggle={toggleStub}
-      designDocName={'id#1'}
-      selectedNavInfo={{}}
-    />);
-
-    // NOTE: wrapper.find doesn't work special chars so we use class name instead
-    wrapper.find('div.accordion-list-item').simulate('click', {preventDefault: sinon.stub()});
-    expect(toggleStub.calledOnce).toBeTruthy();
-  });
-
-  //here
-
-  it('confirm only single sub-option is shown by default (metadata link)', function () {
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      designDoc={{ customProp: { one: 'something' } }}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    const subOptions = el.find('.accordion-body li');
-    expect(subOptions.length).toBe(1);
-  });
-
-  it('confirm design doc sidebar extensions appear', function () {
-    sinon.stub(FauxtonAPI, 'urls');
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      sidebarListTypes={[{
-        selector: 'customProp',
-        name: 'Search Indexes',
-        icon: 'icon-here',
-        urlNamespace: 'whatever',
-        indexLabel: 'the label',
-        onDelete: () => {},
-        onClone: () => {}
-      }]}
-      designDoc={{ customProp: { one: 'something' } }}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    const subOptions = el.find('.accordion-body li');
-    expect(subOptions.length).toBe(3); // 1 for "Metadata" row, 1 for Type List row ("search indexes") and one for the index itself
-  });
-
-  it('confirm design doc sidebar extensions do not appear when they have no content', function () {
-    sinon.stub(FauxtonAPI, 'urls');
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      sidebarListTypes={[{
-        selector: 'customProp',
-        name: 'Search Indexes',
-        icon: 'icon-here',
-        urlNamespace: 'whatever',
-        indexLabel: 'the label',
-        onDelete: () => {},
-        onClone: () => {}
-      }]}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    const subOptions = el.find('.accordion-body li');
-    expect(subOptions.length).toBe(1);
-  });
-
-  it('confirm doc metadata page is highlighted if selected', function () {
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      selectedNavInfo={{
-        navItem: 'designDoc',
-        designDocName: 'id',
-        designDocSection: 'metadata',
-        indexName: ''
-      }}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    expect(el.find('.accordion-body li.active a').text()).toBe('Metadata');
-  });
-
-  it('shows different icons for global and partitioned ddocs', () => {
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      designDocName={'doc-$-#-.1'}
-      isPartitioned={false}
-    />);
-    expect(wrapper.find('i.fonticon-document').exists()).toBeTruthy();
-
-    const wrapper2 = mount(<DesignDoc
-      {...defaultProps}
-      designDocName={'doc-$-#-.1'}
-      isPartitioned={true}
-    />);
-    expect(wrapper2.find('i.fonticon-documents').exists()).toBeTruthy();
-  });
-
-  it('confirms links only include the partition key when one is selected', () => {
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      selectedPartitionKey={'part-key-$-%1'}
-    />);
-    // Metadata link
-    expect(wrapper.find('a.toggle-view.accordion-header').props()['href']).toContain('/_partition/part-key-%24-%251/');
-    // New View link
-    expect(wrapper.find('li > a.icon.fonticon-plus-circled').props()['href']).toContain('/_partition/part-key-%24-%251/');
-
-    const wrapper2 = mount(<DesignDoc
-      {...defaultProps}
-    />);
-
-    expect(wrapper2.find('a.toggle-view.accordion-header').props()['href']).not.toContain('/_partition/');
-    expect(wrapper2.find('li > a.icon.fonticon-plus-circled').props()['href']).not.toContain('/_partition/');
-  });
-});
-
-describe('MainSidebar', () => {
-  const defaultProps = {
-    databaseName: 'test-db',
-    selectedNavItem: 'Metadata'
-  };
-
-  it('confirm links are properly encoded and include the partition key when provided', () => {
-    const wrapper = mount(<MainSidebar
-      {...defaultProps}
-      selectedPartitionKey={'part-key-$-%1'}
-    />);
-
-    expect(wrapper.find('a#all-docs').props()['href']).toContain('/_partition/part-key-%24-%251/');
-    expect(wrapper.find('a#design-docs').props()['href']).toContain('/_partition/part-key-%24-%251/');
-    expect(wrapper.find('a#mango-query').props()['href']).toContain('/_partition/part-key-%24-%251/');
-  });
-
-  it('confirm New links are properly encoded and include the partition key when provided', () => {
-    const wrapper = mount(<MainSidebar
-      {...defaultProps}
-      selectedPartitionKey={'part-key-$-%1'}
-    />);
-
-    const newLinks = wrapper.instance().getNewButtonLinks()[0].links;
-    newLinks.forEach(link => {
-      if (link.title === 'New Doc') {
-        expect(link.url).toContain('?partitionKey=part-key-%24-%251');
-      } else {
-        expect(link.url).toContain('/_partition/part-key-%24-%251/');
-      }
-    });
-  });
-});
-
-describe('IndexSection', () => {
-  const defaultProps = {
-    urlNamespace: 'view',
-    indexLabel: 'Views',
-    database: { id: 'test-db' },
-    designDocName: 'ddoc-%-1',
-    items: ['viewA-$', 'viewB/#'],
-    isExpanded: true,
-    isPartitioned: false,
-    selectedPartitionKey: undefined,
-    selectedIndex: 'bla',
-    onDelete: () => {},
-    onClone: () => {},
-    showDeleteIndexModal: () => {},
-    showCloneIndexModal: () => {}
-  };
-
-  it('encodes the links for each item', () => {
-    const wrapper = mount(<IndexSection
-      {...defaultProps}
-    />);
-
-    defaultProps.items.forEach((view, idx) => {
-      expect(wrapper.find('a.toggle-view').at(idx).prop('href')).toContain(
-        '/_design/' + encodeURIComponent('ddoc-%-1') + '/_view/' + encodeURIComponent(view)
-      );
-    });
-  });
-
-  it('links include partition key when one is selected', () => {
-    const wrapper = mount(<IndexSection
-      {...defaultProps}
-      selectedPartitionKey={'part%1'}
-    />);
-
-    defaultProps.items.forEach((view, idx) => {
-      expect(wrapper.find('a.toggle-view').at(idx).prop('href')).toContain('/_partition/' + encodeURIComponent('part%1') + '/');
-    });
-  });
-});
diff --git a/app/addons/documents/sidebar/__tests__/sidebar.reducers.test.js b/app/addons/documents/sidebar/__tests__/sidebar.reducers.test.js
deleted file mode 100644
index 8d649ea..0000000
--- a/app/addons/documents/sidebar/__tests__/sidebar.reducers.test.js
+++ /dev/null
@@ -1,74 +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.
-
-import sidebar from "../reducers";
-import ActionTypes from "../actiontypes";
-
-function isVisible (state, designDoc, indexGroup) {
-  if (!state.toggledSections[designDoc]) {
-    return false;
-  }
-  if (indexGroup) {
-    return state.toggledSections[designDoc].indexGroups[indexGroup];
-  }
-  return state.toggledSections[designDoc].visible;
-}
-
-describe('Sidebar Reducer', () => {
-
-  describe('toggle state', () => {
-
-    it('should be visible after being toggled', () => {
-      const designDoc = 'designDoc';
-      const action = {
-        type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-        designDoc: designDoc
-      };
-      const newState = sidebar(undefined, action);
-      expect(isVisible(newState, designDoc)).toBeTruthy();
-    });
-
-    it('should not be visible after being toggled twice', () => {
-      const designDoc = 'designDoc2';
-      const action = {
-        type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-        designDoc: designDoc
-      };
-      let newState = sidebar(undefined, action);
-      newState = sidebar(newState, action);
-      expect(isVisible(newState, designDoc)).toBe(false);
-    });
-
-  });
-
-  describe('toggle state for index', () => {
-    const designDoc = 'design-doc';
-    const indexGroup = 'index';
-    const action = {
-      type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-      designDoc: designDoc,
-      indexGroup: indexGroup
-    };
-
-    it('should toggle the state', () => {
-      let newState = sidebar(undefined, action);
-      expect(isVisible(newState, designDoc)).toBeTruthy();
-
-      newState = sidebar(newState, action);
-      expect(isVisible(newState, designDoc, indexGroup)).toBeTruthy();
-
-      newState = sidebar(newState, action);
-      expect(isVisible(newState, designDoc, indexGroup)).toBe(false);
-    });
-
-  });
-});
diff --git a/app/addons/documents/sidebar/actions.js b/app/addons/documents/sidebar/actions.js
deleted file mode 100644
index d8ba4cd..0000000
--- a/app/addons/documents/sidebar/actions.js
+++ /dev/null
@@ -1,175 +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.
-
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./actiontypes";
-
-const _getDatabaseName = ({sidebar}) => {
-  if (!sidebar || sidebar.loading) {
-    return '';
-  }
-  return sidebar.database.safeID();
-};
-
-const dispatchNewOptions = (options) => {
-  if (options.database.safeID() !== _getDatabaseName(FauxtonAPI.reduxState())) {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SIDEBAR_FETCHING
-    });
-  }
-
-  options.designDocs.fetch().then(() => {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SIDEBAR_NEW_OPTIONS,
-      options: options
-    });
-  }, xhr => {
-    let errorMsg = 'Unable to update the sidebar.';
-    if (xhr.responseJSON && xhr.responseJSON.error === 'not_found') {
-      const databaseName = options.designDocs.database.safeID();
-      errorMsg = `The ${databaseName} database does not exist.`;
-      FauxtonAPI.navigate('/', {trigger: true});
-    }
-    FauxtonAPI.addNotification({
-      msg: errorMsg,
-      type: "error",
-      clear:  true
-    });
-  });
-};
-
-const dispatchUpdateDesignDocs = (designDocs) => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SIDEBAR_FETCHING
-  });
-
-  designDocs.fetch().then(function () {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SIDEBAR_UPDATED_DESIGN_DOCS,
-      options: {
-        designDocs: designDocs
-      }
-    });
-  });
-};
-
-const dispatchHideDeleteIndexModal = () => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SIDEBAR_HIDE_DELETE_INDEX_MODAL
-  });
-};
-
-const dispatchExpandSelectedItem = (selectedNavItem) => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SIDEBAR_EXPAND_SELECTED_ITEM,
-    options: {
-      selectedNavItem: selectedNavItem
-    }
-  });
-};
-
-const toggleContent = (designDoc, indexGroup) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-    designDoc: designDoc,
-    indexGroup: indexGroup
-  });
-};
-
-const showDeleteIndexModal = (indexName, designDocName, indexLabel, onDelete) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_SHOW_DELETE_INDEX_MODAL,
-    options: {
-      indexName: indexName,
-      indexLabel: indexLabel,
-      designDocName: designDocName,
-      onDelete: onDelete
-    }
-  });
-};
-
-const hideDeleteIndexModal = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_HIDE_DELETE_INDEX_MODAL
-  });
-};
-
-const showCloneIndexModal = (indexName, designDocName, indexLabel, onSubmit) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_SHOW_CLONE_INDEX_MODAL,
-    options: {
-      sourceIndexName: indexName,
-      sourceDesignDocName: designDocName,
-      onSubmit: onSubmit,
-      indexLabel: indexLabel,
-      cloneIndexModalTitle: 'Clone ' + indexLabel
-    }
-  });
-};
-
-const hideCloneIndexModal = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_HIDE_CLONE_INDEX_MODAL
-  });
-};
-
-const updateNewDesignDocName = (designDocName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED,
-    options: {
-      value: designDocName
-    }
-  });
-};
-
-const updateNewDesignDocPartitioned = (isPartitioned) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED,
-    options: {
-      value: isPartitioned
-    }
-  });
-};
-
-const selectDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE,
-    options: {
-      value: designDoc
-    }
-  });
-};
-
-const setNewCloneIndexName = (indexName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME,
-    options: {
-      value: indexName
-    }
-  });
-};
-
-export default {
-  dispatchNewOptions,
-  dispatchUpdateDesignDocs,
-  toggleContent,
-  showDeleteIndexModal,
-  hideDeleteIndexModal,
-  dispatchHideDeleteIndexModal,
-  showCloneIndexModal,
-  hideCloneIndexModal,
-  updateNewDesignDocName,
-  updateNewDesignDocPartitioned,
-  selectDesignDoc,
-  setNewCloneIndexName,
-  dispatchExpandSelectedItem
-};
diff --git a/app/addons/documents/sidebar/actiontypes.js b/app/addons/documents/sidebar/actiontypes.js
deleted file mode 100644
index 28c84fc..0000000
--- a/app/addons/documents/sidebar/actiontypes.js
+++ /dev/null
@@ -1,27 +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.
-
-export default {
-  SIDEBAR_EXPAND_SELECTED_ITEM: 'SIDEBAR_EXPAND_SELECTED_ITEM',
-  SIDEBAR_NEW_OPTIONS: 'SIDEBAR_NEW_OPTIONS',
-  SIDEBAR_TOGGLE_CONTENT: 'SIDEBAR_TOGGLE_CONTENT',
-  SIDEBAR_FETCHING: 'SIDEBAR_FETCHING',
-  SIDEBAR_SHOW_DELETE_INDEX_MODAL: 'SIDEBAR_SHOW_DELETE_INDEX_MODAL',
-  SIDEBAR_HIDE_DELETE_INDEX_MODAL: 'SIDEBAR_HIDE_DELETE_INDEX_MODAL',
-  SIDEBAR_SHOW_CLONE_INDEX_MODAL: 'SIDEBAR_SHOW_CLONE_INDEX_MODAL',
-  SIDEBAR_HIDE_CLONE_INDEX_MODAL: 'SIDEBAR_HIDE_CLONE_INDEX_MODAL',
-  SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE: 'SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE',
-  SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED: 'SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED',
-  SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED: 'SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED',
-  SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME: 'SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME',
-  SIDEBAR_UPDATED_DESIGN_DOCS: 'SIDEBAR_UPDATED_DESIGN_DOCS'
-};
diff --git a/app/addons/documents/sidebar/components/CloneIndexModal.js b/app/addons/documents/sidebar/components/CloneIndexModal.js
deleted file mode 100644
index ca83562..0000000
--- a/app/addons/documents/sidebar/components/CloneIndexModal.js
+++ /dev/null
@@ -1,118 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Modal } from 'react-bootstrap';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from '../../../../core/api';
-import IndexEditorComponents from '../../index-editor/components';
-
-const { DesignDocSelector } = IndexEditorComponents;
-
-export default class CloneIndexModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    title: PropTypes.string,
-    close: PropTypes.func.isRequired,
-    submit: PropTypes.func.isRequired,
-    designDocArray: PropTypes.array.isRequired,
-    selectedDesignDoc: PropTypes.string.isRequired,
-    newDesignDocName: PropTypes.string.isRequired,
-    newIndexName: PropTypes.string.isRequired,
-    indexLabel: PropTypes.string.isRequired,
-    selectDesignDoc: PropTypes.func.isRequired,
-    updateNewDesignDocName: PropTypes.func.isRequired,
-    setNewCloneIndexName: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    title: 'Clone Index',
-    visible: false
-  };
-
-  constructor(props) {
-    super(props);
-    this.props.setNewCloneIndexName('');
-  }
-
-  submit = () => {
-    if (!this.designDocSelector.validate()) {
-      return;
-    }
-    if (this.props.newIndexName === '') {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter the new index name.',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-    this.props.submit();
-  };
-
-  close = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-    this.props.close();
-  };
-
-  setNewIndexName = (e) => {
-    this.props.setNewCloneIndexName(e.target.value);
-  };
-
-  render() {
-    return (
-      <Modal dialogClassName="clone-index-modal" show={this.props.visible} onHide={this.close}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>{this.props.title}</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-
-          <form className="form" method="post" onSubmit={this.submit}>
-            <p>
-              Select the design document where the cloned {this.props.indexLabel} will be created, and then enter
-              a name for the cloned {this.props.indexLabel}.
-            </p>
-
-            <div className="row">
-              <DesignDocSelector
-                ref={node => this.designDocSelector = node}
-                designDocList={this.props.designDocArray}
-                isDbPartitioned={this.props.isDbPartitioned}
-                selectedDesignDocName={this.props.selectedDesignDoc}
-                selectedDesignDocPartitioned={this.props.selectedDesignDocPartitioned}
-                newDesignDocName={this.props.newDesignDocName}
-                newDesignDocPartitioned={this.props.newDesignDocPartitioned}
-                onSelectDesignDoc={this.props.selectDesignDoc}
-                onChangeNewDesignDocName={this.props.updateNewDesignDocName}
-                onChangeNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned} />
-            </div>
-
-            <div className="clone-index-name-row">
-              <label className="new-index-title-label" htmlFor="new-index-name">{this.props.indexLabel} Name</label>
-              <input type="text" id="new-index-name" value={this.props.newIndexName} onChange={this.setNewIndexName}
-                placeholder="New view name" />
-            </div>
-          </form>
-
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" className="cancel-link" onClick={this.close} data-bypass="true">Cancel</a>
-          <button onClick={this.submit} data-bypass="true" className="btn btn-primary save">
-            <i className="icon fonticon-ok-circled" /> Clone {this.props.indexLabel}</button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/DesignDoc.js b/app/addons/documents/sidebar/components/DesignDoc.js
deleted file mode 100644
index 4144ff1..0000000
--- a/app/addons/documents/sidebar/components/DesignDoc.js
+++ /dev/null
@@ -1,172 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Collapse } from 'react-bootstrap';
-import FauxtonAPI from '../../../../core/api';
-import Components from '../../../components/react-components';
-import IndexEditorActions from '../../index-editor/actions';
-import IndexSection from './IndexSection';
-
-const { MenuDropDown } = Components;
-
-export default class DesignDoc extends React.Component {
-  static propTypes = {
-    database: PropTypes.object.isRequired,
-    sidebarListTypes: PropTypes.array.isRequired,
-    isExpanded: PropTypes.bool.isRequired,
-    isPartitioned: PropTypes.bool.isRequired,
-    selectedPartitionKey: PropTypes.string,
-    selectedNavInfo: PropTypes.object.isRequired,
-    toggledSections: PropTypes.object.isRequired,
-    designDocName:  PropTypes.string.isRequired,
-    showDeleteIndexModal: PropTypes.func.isRequired,
-    showCloneIndexModal: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      updatedSidebarListTypes: this.props.sidebarListTypes
-    };
-    if (_.isEmpty(this.state.updatedSidebarListTypes) ||
-      (_.has(this.state.updatedSidebarListTypes[0], 'selector') && this.state.updatedSidebarListTypes[0].selector !== 'views')) {
-
-      const newList = this.state.updatedSidebarListTypes;
-      newList.unshift({
-        selector: 'views',
-        name: 'Views',
-        urlNamespace: 'view',
-        indexLabel: 'view',
-        onDelete: IndexEditorActions.deleteView,
-        onClone: IndexEditorActions.cloneView,
-        onEdit: IndexEditorActions.gotoEditViewPage
-      });
-      this.state = { updatedSidebarListTypes: newList };
-    }
-  }
-
-  indexList = () => {
-    return _.map(this.state.updatedSidebarListTypes, (index, key) => {
-      const expanded = _.has(this.props.toggledSections, index.name) && this.props.toggledSections[index.name];
-
-      // if an index in this list is selected, pass that down
-      let selectedIndex = '';
-      if (this.props.selectedNavInfo.designDocSection === index.name) {
-        selectedIndex = this.props.selectedNavInfo.indexName;
-      }
-
-      return (
-        <IndexSection
-          icon={index.icon}
-          isExpanded={expanded}
-          urlNamespace={index.urlNamespace}
-          indexLabel={index.indexLabel}
-          onEdit={index.onEdit}
-          onDelete={index.onDelete}
-          onClone={index.onClone}
-          selectedIndex={selectedIndex}
-          toggle={this.props.toggle}
-          database={this.props.database}
-          designDocName={this.props.designDocName}
-          key={key}
-          title={index.name}
-          selector={index.selector}
-          items={_.keys(this.props.designDoc[index.selector])}
-          isPartitioned={this.props.isPartitioned}
-          selectedPartitionKey={this.props.selectedPartitionKey}
-          showDeleteIndexModal={this.props.showDeleteIndexModal}
-          showCloneIndexModal={this.props.showCloneIndexModal} />
-      );
-    });
-  };
-
-  toggle = (e) => {
-    e.preventDefault();
-    this.props.toggle(this.props.designDocName);
-  };
-
-  getNewButtonLinks = () => {
-    const encodedPartKey = this.props.selectedPartitionKey ? encodeURIComponent(this.props.selectedPartitionKey) : '';
-    const newUrlPrefix = FauxtonAPI.urls('databaseBaseURL', 'app', encodeURIComponent(this.props.database.id))
-      + (encodedPartKey ? '/_partition/' + encodedPartKey : '');
-    const designDocName = this.props.designDocName;
-
-    const addonLinks = FauxtonAPI.getExtensions('sidebar:links');
-    const addNewLinks = addonLinks.reduce((menuLinks, link) => {
-      if (!this.props.isPartitioned || link.showForPartitionedDDocs) {
-        menuLinks.push({
-          title: link.title,
-          url: '#' + newUrlPrefix + '/' + link.url + '/' + encodeURIComponent(designDocName),
-          icon: 'fonticon-plus-circled'
-        });
-      }
-      return menuLinks;
-    }, [{
-      title: 'New View',
-      url: '#' + FauxtonAPI.urls('new', 'addView', encodeURIComponent(this.props.database.id), encodedPartKey, encodeURIComponent(designDocName)),
-      icon: 'fonticon-plus-circled'
-    }]);
-
-    return [{
-      title: 'Add New',
-      links: addNewLinks
-    }];
-  };
-
-  render () {
-    const buttonLinks = this.getNewButtonLinks();
-    let toggleClassNames = 'design-doc-section accordion-header';
-    let toggleBodyClassNames = 'design-doc-body accordion-body collapse';
-
-    if (this.props.isExpanded) {
-      toggleClassNames += ' down';
-      toggleBodyClassNames += ' in';
-    }
-    const designDocName = this.props.designDocName;
-    const encodedPartKey = this.props.selectedPartitionKey ? encodeURIComponent(this.props.selectedPartitionKey) : '';
-    const designDocMetaUrl = FauxtonAPI.urls('designDocs', 'app',
-      encodeURIComponent(this.props.database.id), encodedPartKey, designDocName);
-    const metadataRowClass = (this.props.selectedNavInfo.designDocSection === 'metadata') ? 'active' : '';
-    const iconTitle = this.props.isPartitioned ? 'Partitioned design document' : 'Global design document';
-    const iconClass = this.props.isPartitioned ? 'fonticon-documents' : 'fonticon-document';
-    return (
-      <li className="nav-header">
-        <div id={"sidebar-tab-" + designDocName} className={toggleClassNames}>
-          <div id={"nav-header-" + designDocName} onClick={this.toggle} className='accordion-list-item'>
-            <div className="fonticon-play"></div>
-            <p className='design-doc-name'>
-              <span title={'_design/' + designDocName}>
-                <i className={iconClass} title={iconTitle}></i>
-                {designDocName}
-              </span>
-            </p>
-          </div>
-          <div className='new-button add-dropdown'>
-            <MenuDropDown links={buttonLinks} />
-          </div>
-        </div>
-        <Collapse in={this.props.isExpanded}>
-          <ul className={toggleBodyClassNames} id={`design-doc-menu-${this.props.designDocName}`}>
-            <li className={metadataRowClass}>
-              <a href={"#/" + designDocMetaUrl} className="toggle-view accordion-header">
-                Metadata
-              </a>
-            </li>
-            {this.indexList()}
-          </ul>
-        </Collapse>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/DesignDocList.js b/app/addons/documents/sidebar/components/DesignDocList.js
deleted file mode 100644
index c520659..0000000
--- a/app/addons/documents/sidebar/components/DesignDocList.js
+++ /dev/null
@@ -1,87 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../../core/api';
-import DocHelpers from '../../helpers';
-import DesignDoc from './DesignDoc';
-
-export default class DesignDocList extends React.Component {
-  static propTypes = {
-    database: PropTypes.object.isRequired,
-    toggle: PropTypes.func.isRequired,
-    designDocs: PropTypes.array,
-    toggledSections: PropTypes.object,
-    selectedNav: PropTypes.shape({
-      designDocName: PropTypes.string,
-      designDocSection: PropTypes.string,
-      indexName: PropTypes.string,
-      navItem: PropTypes.string
-    }).isRequired,
-    isDbPartitioned: PropTypes.bool.isRequired,
-    selectedPartitionKey: PropTypes.string,
-    showDeleteIndexModal: PropTypes.func.isRequired,
-    showCloneIndexModal: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    const list = FauxtonAPI.getExtensions('sidebar:list');
-    this.sidebarListTypes = _.isUndefined(list) ? [] : list;
-  }
-
-  designDocList = () => {
-    return _.map(this.props.designDocs, (designDoc, key) => {
-      const ddName = decodeURIComponent(designDoc.safeId);
-      const isDDocPartitioned = DocHelpers.isDDocPartitioned(designDoc, this.props.isDbPartitioned);
-
-      // only pass down the selected nav info and toggle info if they're relevant for this particular design doc
-      let expanded = false,
-          toggledSections = {};
-      if (_.has(this.props.toggledSections, ddName)) {
-        expanded = this.props.toggledSections[ddName].visible;
-        toggledSections = this.props.toggledSections[ddName].indexGroups;
-      }
-
-      let selectedNavInfo = {};
-      if (this.props.selectedNav.navItem === 'designDoc' && this.props.selectedNav.designDocName === ddName) {
-        selectedNavInfo = this.props.selectedNav;
-      }
-
-      return (
-        <DesignDoc
-          toggle={this.props.toggle}
-          sidebarListTypes={this.sidebarListTypes}
-          isExpanded={expanded}
-          toggledSections={toggledSections}
-          selectedNavInfo={selectedNavInfo}
-          selectedPartitionKey={this.props.selectedPartitionKey}
-          isPartitioned={isDDocPartitioned}
-          key={key}
-          designDoc={designDoc}
-          designDocName={ddName}
-          database={this.props.database}
-          showDeleteIndexModal={this.props.showDeleteIndexModal}
-          showCloneIndexModal={this.props.showCloneIndexModal} />
-      );
-    });
-  };
-
-  render() {
-    return (
-      <ul className="nav nav-list">
-        {this.designDocList()}
-      </ul>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/IndexSection.js b/app/addons/documents/sidebar/components/IndexSection.js
deleted file mode 100644
index ec57842..0000000
--- a/app/addons/documents/sidebar/components/IndexSection.js
+++ /dev/null
@@ -1,159 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Collapse, OverlayTrigger, Popover } from 'react-bootstrap';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from '../../../../core/api';
-
-export default class IndexSection extends React.Component {
-  static propTypes = {
-    urlNamespace: PropTypes.string.isRequired,
-    indexLabel: PropTypes.string.isRequired,
-    database: PropTypes.object.isRequired,
-    designDocName: PropTypes.string.isRequired,
-    items: PropTypes.array.isRequired,
-    isExpanded: PropTypes.bool.isRequired,
-    selectedIndex: PropTypes.string.isRequired,
-    onDelete: PropTypes.func.isRequired,
-    onClone: PropTypes.func.isRequired,
-    showDeleteIndexModal: PropTypes.func.isRequired,
-    showCloneIndexModal: PropTypes.func.isRequired,
-    isPartitioned: PropTypes.bool.isRequired,
-    selectedPartitionKey: PropTypes.string
-  };
-
-  state = {
-    placement: 'bottom'
-  };
-
-  // this dynamically changes the placement of the menu (top/bottom) to prevent it going offscreen and causing some
-  // unsightly shifting
-  setPlacement = (rowId) => {
-    const rowTop = document.getElementById(rowId).getBoundingClientRect().top;
-    const toggleHeight = 150; // the height of the menu overlay, arrow, view row
-    const placement = (rowTop + toggleHeight > window.innerHeight) ? 'top' : 'bottom';
-    this.setState({ placement: placement });
-  };
-
-  createItems = () => {
-
-    // sort the indexes alphabetically
-    const sortedItems = this.props.items.sort();
-
-    return _.map(sortedItems, (indexName, index) => {
-      let href = FauxtonAPI.urls(this.props.urlNamespace, 'app', encodeURIComponent(this.props.database.id), encodeURIComponent(this.props.designDocName));
-      if (this.props.selectedPartitionKey) {
-        href = FauxtonAPI.urls('partitioned_' + this.props.urlNamespace, 'app',
-          encodeURIComponent(this.props.database.id),
-          encodeURIComponent(this.props.selectedPartitionKey),
-          encodeURIComponent(this.props.designDocName));
-      }
-      const className = (this.props.selectedIndex === indexName) ? 'active' : '';
-
-      return (
-        <li className={className} key={index}>
-          <a
-            id={this.props.designDocName + '_' + indexName}
-            href={"#/" + href + encodeURIComponent(indexName)}
-            className="toggle-view">
-            {indexName}
-          </a>
-          <OverlayTrigger
-            trigger="click"
-            onEnter={this.setPlacement.bind(this, this.props.designDocName + '_' + indexName)}
-            placement={this.state.placement}
-            rootClose={true}
-            ref={overlay => this.itemOverlay = overlay}
-            overlay={
-              <Popover id="index-menu-component-popover">
-                <ul>
-                  <li onClick={this.indexAction.bind(this, 'edit', { indexName: indexName, onEdit: this.props.onEdit })}>
-                    <span className="fonticon fonticon-file-code-o"></span>
-                    Edit
-                  </li>
-                  <li onClick={this.indexAction.bind(this, 'clone', { indexName: indexName, onClone: this.props.onClone })}>
-                    <span className="fonticon fonticon-files-o"></span>
-                    Clone
-                  </li>
-                  <li onClick={this.indexAction.bind(this, 'delete', { indexName: indexName, onDelete: this.props.onDelete })}>
-                    <span className="fonticon fonticon-trash"></span>
-                    Delete
-                  </li>
-                </ul>
-              </Popover>
-            }>
-            <span className="index-menu-toggle fonticon fonticon-wrench2"></span>
-          </OverlayTrigger>
-        </li>
-      );
-    });
-  };
-
-  indexAction = (action, params, e) => {
-    e.preventDefault();
-
-    this.itemOverlay.hide();
-
-    switch (action) {
-      case 'delete':
-        this.props.showDeleteIndexModal(params.indexName, this.props.designDocName, this.props.indexLabel, params.onDelete);
-        break;
-      case 'clone':
-        this.props.showCloneIndexModal(params.indexName, this.props.designDocName, this.props.indexLabel, params.onClone);
-        break;
-      case 'edit':
-        params.onEdit(this.props.database.id, this.props.selectedPartitionKey, this.props.designDocName, params.indexName);
-        break;
-    }
-  };
-
-  toggle = (e) => {
-    e.preventDefault();
-    this.props.toggle(this.props.designDocName, this.props.title);
-  };
-
-  render() {
-
-    // if this section has no content, omit it to prevent clutter. Otherwise it would show a toggle option that
-    // would hide/show nothing
-    if (this.props.items.length === 0) {
-      return null;
-    }
-
-    let toggleClassNames = 'accordion-header index-group-header';
-    let toggleBodyClassNames = 'index-list accordion-body collapse';
-    if (this.props.isExpanded) {
-      toggleClassNames += ' down';
-      toggleBodyClassNames += ' in';
-    }
-
-    const title = this.props.title;
-    const designDocName = this.props.designDocName;
-    const linkId = "nav-design-function-" + designDocName + this.props.selector;
-
-    return (
-      <li id={linkId}>
-        <a className={toggleClassNames} data-toggle="collapse" onClick={this.toggle}>
-          <div className="fonticon-play"></div>
-          {title}
-        </a>
-        <Collapse in={this.props.isExpanded}>
-          <ul className={toggleBodyClassNames}>
-            {this.createItems()}
-          </ul>
-        </Collapse>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/MainSidebar.js b/app/addons/documents/sidebar/components/MainSidebar.js
deleted file mode 100644
index 0bbad14..0000000
--- a/app/addons/documents/sidebar/components/MainSidebar.js
+++ /dev/null
@@ -1,100 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import app from "../../../../app";
-import FauxtonAPI from '../../../../core/api';
-import DocumentHelper from "../../../documents/helpers";
-import Components from '../../../components/react-components';
-
-const { MenuDropDown } = Components;
-
-export default class MainSidebar extends React.Component {
-  static propTypes = {
-    databaseName: PropTypes.string.isRequired,
-    selectedNavItem: PropTypes.string.isRequired,
-    selectedPartitionKey: PropTypes.string
-  };
-
-  getNewButtonLinks = () => {  // these are links for the sidebar '+' on All Docs and All Design Docs
-    return DocumentHelper.getNewButtonLinks(this.props.databaseName, this.props.selectedPartitionKey);
-  };
-
-  buildDocLinks = () => {
-    const base = FauxtonAPI.urls('base', 'app', this.props.databaseName);
-    return FauxtonAPI.getExtensions('docLinks').map((link) => {
-      return (
-        <li key={link.url} className={this.getNavItemClass(link.url)}>
-          <a id={link.url} href={base + link.url}>{link.title}</a>
-        </li>
-      );
-    });
-  };
-
-  getNavItemClass = (navItem) => {
-    return (navItem === this.props.selectedNavItem) ? 'active' : '';
-  };
-
-  render() {
-    const docLinks = this.buildDocLinks();
-    const dbEncoded = FauxtonAPI.url.encode(this.props.databaseName);
-    const partKeyEncoded = this.props.selectedPartitionKey ? encodeURIComponent(this.props.selectedPartitionKey) : '';
-    const changesUrl = '#' + FauxtonAPI.urls('changes', 'app', dbEncoded, partKeyEncoded, '');
-    const permissionsUrl = '#' + FauxtonAPI.urls('permissions', 'app', dbEncoded, partKeyEncoded);
-    const databaseUrl = FauxtonAPI.urls('allDocs', 'app', dbEncoded, partKeyEncoded, '');
-    const mangoQueryUrl = FauxtonAPI.urls('mango', 'query-app', dbEncoded, partKeyEncoded);
-    const runQueryWithMangoText = app.i18n.en_US['run-query-with-mango'];
-    const buttonLinks = this.getNewButtonLinks();
-
-    return (
-      <ul className="nav nav-list">
-        <li className={this.getNavItemClass('all-docs')}>
-          <a id="all-docs"
-            href={"#/" + databaseUrl}
-            className="toggle-view">
-            All Documents
-          </a>
-          <div id="new-all-docs-button" className="add-dropdown">
-            <MenuDropDown links={buttonLinks} />
-          </div>
-        </li>
-        <li className={this.getNavItemClass('mango-query')}>
-          <a
-            id="mango-query"
-            href={'#' + mangoQueryUrl}
-            className="toggle-view">
-            {runQueryWithMangoText}
-          </a>
-        </li>
-        <li className={this.getNavItemClass('permissions')}>
-          <a id="permissions" href={permissionsUrl}>Permissions</a>
-        </li>
-        <li className={this.getNavItemClass('changes')}>
-          <a id="changes" href={changesUrl}>Changes</a>
-        </li>
-        {docLinks}
-        <li className={this.getNavItemClass('design-docs')}>
-          <a
-            id="design-docs"
-            href={"#/" + databaseUrl + '?startkey="_design"&endkey="_design0"'}
-            className="toggle-view">
-            Design Documents
-          </a>
-          <div id="new-design-docs-button" className="add-dropdown">
-            <MenuDropDown links={buttonLinks} />
-          </div>
-        </li>
-      </ul>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/SidebarController.js b/app/addons/documents/sidebar/components/SidebarController.js
deleted file mode 100644
index bda4bfa..0000000
--- a/app/addons/documents/sidebar/components/SidebarController.js
+++ /dev/null
@@ -1,154 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ComponentsActions from "../../../components/actions";
-import Components from '../../../components/react-components';
-import ComponentsStore from '../../../components/stores';
-import GeneralComponents from '../../../fauxton/components';
-import CloneIndexModal from './CloneIndexModal';
-import DesignDocList from './DesignDocList';
-import MainSidebar from './MainSidebar';
-
-const { DeleteDatabaseModal, LoadLines } = Components;
-const { ConfirmationModal } = GeneralComponents;
-const { deleteDbModalStore } = ComponentsStore;
-
-export default class SidebarController extends React.Component {
-
-  static propTypes = {
-    selectedNav: PropTypes.shape({
-      designDocName: PropTypes.string,
-      designDocSection: PropTypes.string,
-      indexName: PropTypes.string,
-      navItem: PropTypes.string
-    }).isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = this.getDeleteDbStoreState();
-    this.deleteIndex = this.deleteIndex.bind(this);
-    this.cloneIndex = this.cloneIndex.bind(this);
-  }
-
-  componentDidMount() {
-    deleteDbModalStore.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount() {
-    deleteDbModalStore.off('change', this.onChange, this);
-  }
-
-  getDeleteDbStoreState() {
-    return {
-      deleteDbModalProperties: deleteDbModalStore.getShowDeleteDatabaseModal()
-    };
-  }
-
-  onChange = () => {
-    const newState = this.getDeleteDbStoreState();
-    this.setState(newState);
-  };
-
-  showDeleteDatabaseModal = (payload) => {
-    ComponentsActions.showDeleteDatabaseModal(payload);
-  };
-
-  // handles deleting of any index regardless of type. The delete handler and all relevant info is set when the user
-  // clicks the delete action for a particular index
-  deleteIndex = () => {
-
-    // if the user is currently on the index that's being deleted, pass that info along to the delete handler. That can
-    // be used to redirect the user to somewhere appropriate
-    const isOnIndex = this.props.selectedNav.navItem === 'designDoc' &&
-      ('_design/' + this.props.selectedNav.designDocName) === this.props.deleteIndexModalDesignDoc.id &&
-      this.props.selectedNav.indexName === this.props.deleteIndexModalIndexName;
-
-    this.props.deleteIndexModalOnSubmit({
-      isOnIndex: isOnIndex,
-      indexName: this.props.deleteIndexModalIndexName,
-      designDoc: this.props.deleteIndexModalDesignDoc,
-      designDocs: this.props.designDocs,
-      database: this.props.database
-    });
-  };
-
-  cloneIndex = () => {
-    this.props.cloneIndexModalOnSubmit({
-      sourceIndexName: this.props.cloneIndexSourceIndexName,
-      sourceDesignDocName: this.props.cloneIndexSourceDesignDocName,
-      targetDesignDocName: this.props.cloneIndexModalSelectedDesignDoc,
-      newDesignDocName: this.props.cloneIndexModalNewDesignDocName,
-      newDesignDocPartitioned: this.props.cloneIndexModalNewDesignDocPartitioned,
-      isDbPartitioned: this.props.isDbPartitioned,
-      newIndexName: this.props.cloneIndexModalNewIndexName,
-      designDocs: this.props.designDocs,
-      database: this.props.database,
-      onComplete: this.props.hideCloneIndexModal
-    });
-  };
-
-  render() {
-    if (this.props.isLoading) {
-      return <LoadLines />;
-    }
-
-    return (
-      <nav className="sidenav">
-        <MainSidebar
-          selectedNavItem={this.props.selectedNav.navItem}
-          databaseName={this.props.database.id}
-          selectedPartitionKey={this.props.selectedPartitionKey}/>
-        <DesignDocList
-          selectedNav={this.props.selectedNav}
-          selectedPartitionKey={this.props.selectedPartitionKey}
-          isDbPartitioned={this.props.isDbPartitioned}
-          toggle={this.props.toggleContent}
-          toggledSections={this.props.toggledSections}
-          designDocs={this.props.designDocList}
-          database={this.props.database}
-          showDeleteIndexModal={this.props.showDeleteIndexModal}
-          showCloneIndexModal={this.props.showCloneIndexModal} />
-        <DeleteDatabaseModal
-          showHide={this.showDeleteDatabaseModal}
-          modalProps={this.state.deleteDbModalProperties} />
-
-        {/* the delete and clone index modals handle all index types, hence the props all being pulled from the store */}
-        <ConfirmationModal
-          title="Confirm Deletion"
-          visible={this.props.deleteIndexModalVisible}
-          text={this.props.deleteIndexModalText}
-          onClose={this.props.hideDeleteIndexModal}
-          onSubmit={this.deleteIndex} />
-        <CloneIndexModal
-          visible={this.props.cloneIndexModalVisible}
-          title={this.props.cloneIndexModalTitle}
-          close={this.props.hideCloneIndexModal}
-          submit={this.cloneIndex}
-          designDocArray={this.props.availableDesignDocIds}
-          selectedDesignDoc={this.props.cloneIndexModalSelectedDesignDoc}
-          selectedDesignDocPartitioned={this.props.cloneIndexModalSelectedDesignDocPartitioned}
-          newDesignDocName={this.props.cloneIndexModalNewDesignDocName}
-          newDesignDocPartitioned={this.props.cloneIndexModalNewDesignDocPartitioned}
-          newIndexName={this.props.cloneIndexModalNewIndexName}
-          indexLabel={this.props.cloneIndexModalIndexLabel}
-          selectDesignDoc={this.props.selectDesignDoc}
-          updateNewDesignDocName={this.props.updateNewDesignDocName}
-          updateNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned}
-          setNewCloneIndexName={this.props.setNewCloneIndexName}
-          isDbPartitioned={this.props.isDbPartitioned} />
-      </nav>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/helpers.js b/app/addons/documents/sidebar/helpers.js
deleted file mode 100644
index 5950208..0000000
--- a/app/addons/documents/sidebar/helpers.js
+++ /dev/null
@@ -1,40 +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.
-
-
-/**
- * Represents the selected item in the sidebar, including nested nav items to ensure the appropriate item
- * is visible and highlighted.
- */
-export class SidebarItemSelection {
-
-  /**
-   * Creates a new sidebar selection.
-   *
-   * @param {string} navItem 'permissions', 'changes', 'all-docs', 'compact', 'mango-query', 'designDoc'
-   *   (or anything thats beenextended)
-   * @param {string} [params] (optional) If you passed 'designDoc' as the first param. This lets you
-   *   specify which sub-item should be selected, e.g.:
-   *      Actions.selectNavItem('designDoc', { designDocName: 'my-design-doc', section: 'metadata' });
-   *      Actions.selectNavItem('designDoc', { designDocName: 'my-design-doc', section: 'Views', indexName: 'my-view' });
-   */
-  constructor(navItem, params) {
-    this.navItem = navItem;
-    if (params) {
-      const {designDocName, designDocSection, indexName} = params;
-      this.designDocName = designDocName ? designDocName : '';
-      this.designDocSection = designDocSection ? designDocSection : '';
-      this.indexName = indexName ? indexName : '';
-    }
-  }
-}
-
diff --git a/app/addons/documents/sidebar/reducers.js b/app/addons/documents/sidebar/reducers.js
deleted file mode 100644
index a5491d8..0000000
--- a/app/addons/documents/sidebar/reducers.js
+++ /dev/null
@@ -1,252 +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.
-
-import React from 'react';
-import app from '../../../app';
-import Helpers from '../helpers';
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  designDocs: new Backbone.Collection(),
-  designDocList: [],
-  selected: {
-    navItem: 'all-docs',
-    designDocName: '',
-    designDocSection: '', // 'metadata' / name of index group ("Views", etc.)
-    indexName: ''
-  },
-  loading: true,
-  toggledSections: {},
-
-  deleteIndexModalVisible: false,
-  deleteIndexModalDesignDocName: '',
-  deleteIndexModalText: '',
-  deleteIndexModalIndexName: '',
-  deleteIndexModalOnSubmit: () => {},
-
-  cloneIndexModalVisible: false,
-  cloneIndexDesignDocProp: '',
-  cloneIndexModalTitle: '',
-  cloneIndexModalSelectedDesignDoc: '',
-  cloneIndexModalNewDesignDocName: '',
-  cloneIndexModalNewDesignDocPartitioned: true,
-  cloneIndexModalNewIndexName: '',
-  cloneIndexModalSourceIndexName: '',
-  cloneIndexModalSourceDesignDocName: '',
-  cloneIndexModalIndexLabel: '',
-  cloneIndexModalOnSubmit: () => {}
-};
-
-function setNewOptions(state, options) {
-  const newState = {
-    ...state,
-    database: options.database,
-    designDocs: options.designDocs,
-    designDocList: getDesignDocList(options.designDocs),
-    loading: false,
-  };
-  // this can be expanded in future as we need. Right now it can only set a top-level nav item ('all docs',
-  // 'permissions' etc.) and not a nested page
-  if (options.selectedNavItem) {
-    newState.selected = {
-      navItem: options.selectedNavItem,
-      designDocName: '',
-      designDocSection: '',
-      indexName: ''
-    };
-  }
-
-  return newState;
-}
-
-function toggleContent(state, designDoc, indexGroup) {
-  // used to toggle both design docs, and any index groups within them
-  const newState = {
-    ...state
-  };
-
-  if (!state.toggledSections[designDoc]) {
-    newState.toggledSections[designDoc] = {
-      visible: true,
-      indexGroups: {}
-    };
-    return newState;
-  }
-
-  if (indexGroup) {
-    const expanded = state.toggledSections[designDoc].indexGroups[indexGroup];
-
-    if (_.isUndefined(expanded)) {
-      newState.toggledSections[designDoc].indexGroups[indexGroup] = true;
-    } else {
-      newState.toggledSections[designDoc].indexGroups[indexGroup] = !expanded;
-    }
-    return newState;
-  }
-
-  newState.toggledSections[designDoc].visible = !state.toggledSections[designDoc].visible;
-
-  return newState;
-}
-
-function expandSelectedItem(state, {selectedNavItem}) {
-  const newState = {
-    ...state
-  };
-
-  if (selectedNavItem.designDocName) {
-    if (!_.has(state.toggledSections, selectedNavItem.designDocName)) {
-      newState.toggledSections[selectedNavItem.designDocName] = {
-        visible: true,
-        indexGroups: {}
-      };
-    }
-    newState.toggledSections[selectedNavItem.designDocName].visible = true;
-
-    if (selectedNavItem.designDocSection) {
-      newState.toggledSections[selectedNavItem.designDocName].indexGroups[selectedNavItem.designDocSection] = true;
-    }
-  }
-  return newState;
-}
-
-function getDesignDocList (designDocs) {
-  if (!designDocs) {
-    return [];
-  }
-  let docs = designDocs.toJSON();
-  docs = _.filter(docs, (doc) => {
-    if (_.has(doc.doc, 'language')) {
-      return doc.doc.language !== 'query';
-    }
-    return true;
-  });
-
-  const ddocsList = docs.map((doc) => {
-    doc.safeId = app.utils.safeURLName(doc._id.replace(/^_design\//, ''));
-    return _.extend(doc, doc.doc);
-  });
-  return ddocsList;
-}
-
-export function getDesignDocPartitioned(state, isDbPartitioned) {
-  const designDoc = state.designDocs.find(ddoc => {
-    return state.cloneIndexModalSelectedDesignDoc == ddoc.id;
-  });
-  if (designDoc) {
-    return Helpers.isDDocPartitioned(designDoc.get('doc'), isDbPartitioned);
-  }
-  return false;
-}
-
-export const getDatabase = (state) => {
-  if (state.loading) {
-    return {};
-  }
-  return state.database;
-};
-
-export default function sidebar(state = initialState, action) {
-  const { options } = action;
-  switch (action.type) {
-
-    case ActionTypes.SIDEBAR_EXPAND_SELECTED_ITEM:
-      return expandSelectedItem(state, options);
-
-    case ActionTypes.SIDEBAR_NEW_OPTIONS:
-      return setNewOptions(state, options);
-
-    case ActionTypes.SIDEBAR_TOGGLE_CONTENT:
-      return toggleContent(state, action.designDoc, action.indexGroup);
-
-    case ActionTypes.SIDEBAR_FETCHING:
-      return {
-        ...state,
-        loading: true
-      };
-
-    case ActionTypes.SIDEBAR_SHOW_DELETE_INDEX_MODAL:
-      return {
-        ...state,
-        deleteIndexModalIndexName: options.indexName,
-        deleteIndexModalDesignDocName: options.designDocName,
-        deleteIndexModalVisible: true,
-        deleteIndexModalText: (
-          <div>
-            Are you sure you want to delete the <code>{options.indexName}</code> {options.indexLabel}?
-          </div>
-        ),
-        deleteIndexModalOnSubmit: options.onDelete
-      };
-
-
-    case ActionTypes.SIDEBAR_HIDE_DELETE_INDEX_MODAL:
-      return {
-        ...state,
-        deleteIndexModalVisible: false
-      };
-
-    case ActionTypes.SIDEBAR_SHOW_CLONE_INDEX_MODAL:
-      return {
-        ...state,
-        cloneIndexModalIndexLabel: options.indexLabel,
-        cloneIndexModalTitle: options.cloneIndexModalTitle,
-        cloneIndexModalSourceIndexName: options.sourceIndexName,
-        cloneIndexModalSourceDesignDocName: options.sourceDesignDocName,
-        cloneIndexModalSelectedDesignDoc: '_design/' + options.sourceDesignDocName,
-        cloneIndexDesignDocProp: '',
-        cloneIndexModalVisible: true,
-        cloneIndexModalOnSubmit: options.onSubmit
-      };
-
-    case ActionTypes.SIDEBAR_HIDE_CLONE_INDEX_MODAL:
-      return {
-        ...state,
-        cloneIndexModalVisible: false
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE:
-      return {
-        ...state,
-        cloneIndexModalSelectedDesignDoc: options.value
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED:
-      return {
-        ...state,
-        cloneIndexModalNewDesignDocName: options.value
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED:
-      return {
-        ...state,
-        cloneIndexModalNewDesignDocPartitioned: options.value
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME:
-      return {
-        ...state,
-        cloneIndexModalNewIndexName: options.value
-      };
-
-    case ActionTypes.SIDEBAR_UPDATED_DESIGN_DOCS:
-      return {
-        ...state,
-        designDocs: options.designDocs,
-        designDocList: getDesignDocList(options.designDocs),
-        loading: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/sidebar/sidebar.js b/app/addons/documents/sidebar/sidebar.js
deleted file mode 100644
index a20420b..0000000
--- a/app/addons/documents/sidebar/sidebar.js
+++ /dev/null
@@ -1,21 +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.
-
-import CloneIndexModal from './components/CloneIndexModal';
-import DesignDoc from './components/DesignDoc';
-import SidebarController from './components/SidebarController';
-
-export default {
-  SidebarController,
-  DesignDoc,
-  CloneIndexModal
-};
diff --git a/app/addons/documents/tests/document-test-helper.js b/app/addons/documents/tests/document-test-helper.js
deleted file mode 100644
index b343a81..0000000
--- a/app/addons/documents/tests/document-test-helper.js
+++ /dev/null
@@ -1,31 +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.
-import Documents from "../resources";
-
-const opts = {
-  params: {},
-  database: {
-    safeID: function () { return '1';}
-  }
-};
-
-function createDocColumn (docs) {
-  docs = docs.map(function (doc) {
-    return Documents.Doc.prototype.parse(doc);
-  });
-
-  return new Documents.AllDocs(docs, opts);
-}
-
-export default {
-  createDocColumn
-};
diff --git a/app/addons/documents/tests/nightwatch/bulkDelete.js b/app/addons/documents/tests/nightwatch/bulkDelete.js
deleted file mode 100644
index 9016c05..0000000
--- a/app/addons/documents/tests/nightwatch/bulkDelete.js
+++ /dev/null
@@ -1,110 +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.
-
-
-
-module.exports = {
-
-  'Bulk deletes on json view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.bulk-action-component-selector-group', waitTime, false)
-
-      // ensures page content has loaded before proceeding
-      .waitForElementVisible('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('.bulk-action-component-selector-group input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-      .waitForElementNotPresent('[data-id="' + newDocumentName1 + '"]', waitTime, false)
-      .getText('body', function (result) {
-        var data = result.value,
-            isPresentFirstDoc = data.indexOf(newDocumentName1) !== -1,
-            isPresentSecondDoc = data.indexOf(newDocumentName2) !== -1,
-            bothMissing = !isPresentFirstDoc && !isPresentSecondDoc;
-
-        this.verify.ok(bothMissing,
-          'Checking if documents were deleted');
-      })
-      .end();
-  },
-
-  'Bulk deletes on table/metadata view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-selector-group', waitTime, false)
-
-      // ensures page content has loaded before proceeding
-      .waitForElementVisible('.table-view-docs', waitTime, false)
-
-      .clickWhenVisible('.bulk-action-component-selector-group input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-      .waitForElementNotPresent('.table-view-docs ', waitTime, false)
-      .getText('body', function (result) {
-        var data = result.value,
-            isPresentFirstDoc = data.indexOf(newDocumentName1) !== -1,
-            isPresentSecondDoc = data.indexOf(newDocumentName2) !== -1,
-            bothMissing = !isPresentFirstDoc && !isPresentSecondDoc;
-
-        this.verify.ok(bothMissing,
-          'Checking if documents were deleted');
-      })
-      .end();
-  },
-
-  'Select all works after changing the page': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createManyDocuments(25, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-
-      // ensures page content has loaded before proceeding
-      .waitForElementVisible('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('.bulk-action-component-selector-group input[type="checkbox"]')
-
-      .waitForElementPresent('#next', waitTime, false)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementVisible('[data-id="27"]', waitTime, false)
-      .waitForElementPresent('#previous', waitTime, false)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementPresent('.bulk-action-component-selector-group input[type="checkbox"]:checked', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/changes.js b/app/addons/documents/tests/nightwatch/changes.js
deleted file mode 100644
index 88ccdd6..0000000
--- a/app/addons/documents/tests/nightwatch/changes.js
+++ /dev/null
@@ -1,34 +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.
-
-
-
-module.exports = {
-
-  'Check doc link in Changes feed links properly': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument('doc_1', newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_changes')
-      .waitForElementPresent('.change-box[data-id="doc_1"]', waitTime, false)
-
-      // confirm only the single result is now listed in the page
-      .clickWhenVisible('.js-doc-link')
-      .waitForElementPresent('#doc-editor-actions-panel', waitTime, false)
-      .end();
-  }
-
-};
diff --git a/app/addons/documents/tests/nightwatch/changesFilter.js b/app/addons/documents/tests/nightwatch/changesFilter.js
deleted file mode 100644
index 9c05810..0000000
--- a/app/addons/documents/tests/nightwatch/changesFilter.js
+++ /dev/null
@@ -1,54 +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.
-
-
-
-module.exports = {
-
-  // some basic test for the changes page. All of this and more is covered in the
-  // changes.componentsSpec.react.jsx mocha tests; this is more of a sanity end-to-end test
-  'Check changes filter results' : function (client) {
-
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument('doc_1', newDatabaseName)
-      .createDocument('doc_2', newDatabaseName)
-      .createDocument('doc_3', newDatabaseName)
-
-      .checkForStringPresent(newDatabaseName + '/_changes', 'doc_1')
-      .checkForStringPresent(newDatabaseName + '/_changes', 'doc_2')
-      .checkForStringPresent(newDatabaseName + '/_changes', 'doc_3')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_changes')
-
-      // confirm all 3 changes are there
-      .waitForElementPresent('.change-box[data-id="doc_1"]', waitTime, false)
-      .waitForElementPresent('.change-box[data-id="doc_2"]', waitTime, false)
-      .waitForElementPresent('.change-box[data-id="doc_3"]', waitTime, false)
-
-      // add a filter
-      .waitForElementVisible('.js-changes-filter-field', waitTime, false)
-      .setValue('.js-changes-filter-field', "doc_1")
-      .clickWhenVisible('.js-filter-form button[type="submit"]')
-
-      // confirm only the single result is now listed in the page
-      .waitForElementVisible('span.label-info', waitTime, false)
-      .waitForElementPresent('.change-box[data-id="doc_1"]', waitTime, false)
-      .waitForElementNotPresent('.change-box[data-id="doc_2"]', waitTime, false)
-      .waitForElementNotPresent('.change-box[data-id="doc_3"]', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/checkSidebarBehavior.js b/app/addons/documents/tests/nightwatch/checkSidebarBehavior.js
deleted file mode 100644
index d485581..0000000
--- a/app/addons/documents/tests/nightwatch/checkSidebarBehavior.js
+++ /dev/null
@@ -1,42 +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.
-
-
-
-module.exports = {
-
-  'Checks if design docs that have special chars in the ID show up in the UI and are clickable': function (client) {
-    const waitTime = 10000,
-          newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url;
-    const docNormal = 'ddoc_normal';
-    const docSpecialChars = 'ddoc_with.$pecialcharacters()+-';
-    const docSpecialCharsEncoded = 'ddoc_with.%24pecialcharacters()%2B-';
-    client
-      .loginToGUI()
-      .createDocument('_design/' + docNormal, newDatabaseName)
-      .createDocument('_design/' + docSpecialChars, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.nav-list', waitTime, false)
-      // Verify 'Metadata' subitem is not visible
-      .assert.not.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docNormal + '/_info"]')
-      .assert.not.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docSpecialCharsEncoded + '/_info"]')
-      // Click sidebar items and verify they expand
-      .clickWhenVisible('#nav-header-' + docNormal)
-      .assert.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docNormal + '/_info"]')
-      .clickWhenVisible('span[title="_design/' + docSpecialChars + '"]')
-      .assert.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docSpecialCharsEncoded + '/_info"]')
-      // Verify display name is not encoded
-      .assert.containsText('span[title="_design/' + docSpecialChars + '"]', docSpecialChars)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/cloneDoc.js b/app/addons/documents/tests/nightwatch/cloneDoc.js
deleted file mode 100644
index 46503e9..0000000
--- a/app/addons/documents/tests/nightwatch/cloneDoc.js
+++ /dev/null
@@ -1,59 +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.
-
-
-module.exports = {
-  'Clones a document via Editor': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const newDocumentName = 'clone_doc_doc';
-    const clonedDocName = 'cloned/document';
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .checkForDocumentCreated(newDocumentName)
-      .loginToGUI()
-
-      .url(baseUrl + '#/database/' + newDatabaseName + '/' + newDocumentName)
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .clickWhenVisible('#doc-editor-actions-panel button[title="Clone Document"]')
-
-      .waitForElementVisible('.clone-doc-modal input', waitTime, false)
-
-      .clickWhenVisible('.clone-doc-modal input')
-
-      .clearValue('.clone-doc-modal input')
-      .setValue('.clone-doc-modal input', [clonedDocName])
-
-      .clickWhenVisible('.clone-doc-modal button.btn.btn-primary')
-      .closeNotification()
-
-      .waitForAttribute('.faux-header__breadcrumbs .faux-header__breadcrumbs-element:last-child', 'textContent', function (docContents) {
-        return clonedDocName === docContents.trim();
-      })
-
-      .url(`${baseUrl}'/'${newDatabaseName}/${newDocumentName}`)
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .getText('#editor-container', function (result) {
-        const data = result.value;
-        const isCreatedDocumentPresent = data.indexOf(clonedDocName) !== -1;
-
-        this.verify.ok(
-          isCreatedDocumentPresent,
-          'check that document is correctly reloaded'
-        );
-      })
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/createsDocument.js b/app/addons/documents/tests/nightwatch/createsDocument.js
deleted file mode 100644
index 3523f9e..0000000
--- a/app/addons/documents/tests/nightwatch/createsDocument.js
+++ /dev/null
@@ -1,153 +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.
-
-
-
-module.exports = {
-  'Creates a document' : (client) => {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = 'create_doc_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="#/database/' + newDatabaseName + '/_new"]')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,10);\
-        editor.removeWordRight();\
-        editor.insert("' + newDocumentName + '");\
-      ')
-
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForDocumentCreated(newDocumentName)
-      .url(baseUrl + '#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .getText('.prettyprint', function (result) {
-        const data = result.value;
-        const createdDocIsPresent = data.indexOf(newDocumentName) !== -1;
-
-        this.verify.ok(
-          createdDocIsPresent,
-          'Checking if new document shows up in _all_docs.'
-        );
-      })
-      .end();
-  },
-
-  'Creates a _local document' : (client) => {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = '_local/create_doc_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="#/database/' + newDatabaseName + '/_new"]')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,10);\
-        editor.removeWordRight();\
-        editor.insert("' + newDocumentName + '");\
-      ')
-
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForDocumentCreated(newDocumentName)
-      .url(baseUrl + '#/database/' + newDatabaseName + '/' + newDocumentName)
-
-      // Confirm the editor loaded successfully
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-      .execute(function() {
-        /*global ace*/
-        return ace.edit("doc-editor").getValue();
-      }, function (data) {
-        const createdDocIsPresent = data.value.indexOf(newDocumentName) !== -1;
-
-        this.verify.ok(
-          createdDocIsPresent,
-          'Checking if new document shows up in _all_docs.'
-        );
-      })
-      .end();
-  },
-
-  'Creates a Document through Create Document toolbar button': (client) => {
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = 'a-create_doc_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', waitTime, false)
-      .clickWhenVisible('.document-result-screen__toolbar-create-btn')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsondoc-wrapper', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,10);\
-        editor.removeWordRight();\
-        editor.insert("' + newDocumentName + '");\
-      ')
-
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForDocumentCreated(newDocumentName)
-      .url(baseUrl + '#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .getText('.prettyprint', function (result) {
-        const data = result.value;
-        const createdDocIsPresent = data.indexOf(newDocumentName) !== -1;
-        this.verify.ok(
-          createdDocIsPresent,
-          'Checking if new document shows up in _all_docs.'
-        );
-      })
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/createsDocumentWithoutId.js b/app/addons/documents/tests/nightwatch/createsDocumentWithoutId.js
deleted file mode 100644
index 666cea9..0000000
--- a/app/addons/documents/tests/nightwatch/createsDocumentWithoutId.js
+++ /dev/null
@@ -1,50 +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.
-
-
-
-module.exports = {
-  'Creates a document without id' : function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="#/database/' + newDatabaseName + '/_new"]')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,1);\
-        editor.removeLines();\
-        editor.insert(\'"foo": "bar"\');\
-      ')
-
-      .checkForStringPresent(newDatabaseName + '/_all_docs', '"total_rows":0')
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForStringPresent(newDatabaseName + '/_all_docs', '"total_rows":1')
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/deleteDatabaseModal.js b/app/addons/documents/tests/nightwatch/deleteDatabaseModal.js
deleted file mode 100644
index a52c8da..0000000
--- a/app/addons/documents/tests/nightwatch/deleteDatabaseModal.js
+++ /dev/null
@@ -1,66 +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 helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-module.exports = {
-
-  before: function (client, done) {
-    var nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.create('_replicator', function () {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    var nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy('_replicator', function () {
-      done();
-    });
-  },
-
-  'Shows a warning for system databases (prefixed with _)': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/_replicator/_all_docs')
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .waitForElementVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .assert.elementPresent('.warning')
-      .end();
-  },
-
-  'Shows no warning for non system databases': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .waitForElementVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .assert.not.elementPresent('.warning')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/deletesDocuments.js b/app/addons/documents/tests/nightwatch/deletesDocuments.js
deleted file mode 100644
index fd8bc38..0000000
--- a/app/addons/documents/tests/nightwatch/deletesDocuments.js
+++ /dev/null
@@ -1,170 +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.
-
-
-
-module.exports = {
-  'Deletes a document on json view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'delete_doc_doc',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .createDocument(newDocumentName + '2', newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-      .checkForDocumentCreated(newDocumentName + '2')
-      .url(baseUrl)
-      .waitForElementPresent('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('label[for="checkbox-' + newDocumentName + '"]', waitTime, false)
-      .clickWhenVisible('label[for="checkbox-' + newDocumentName + '"]', waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-
-      .waitForElementVisible('label[for="checkbox-' + newDocumentName + '2' + '"]', waitTime, false)
-      .clickWhenVisible('label[for="checkbox-' + newDocumentName + '2' + '"]', waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName)
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName + '2')
-      .url(baseUrl + '/' + newDatabaseName + '/_all_docs')
-
-      .waitForElementPresent('pre', waitTime, false)
-      .getText('pre', function (result) {
-        var data = result.value,
-            createdDocumentANotPresent = data.indexOf(newDocumentName) === -1,
-            createdDocumentBNotPresent = data.indexOf(newDocumentName + '2') === -1;
-
-        this.verify.ok(createdDocumentANotPresent && createdDocumentBNotPresent,
-          'Checking if new documents no longer shows up in _all_docs.');
-      })
-      .end();
-  },
-
-  'Deletes a document on table/metadata view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'delete_doc_doc',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .createDocument(newDocumentName + '2', newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-      .checkForDocumentCreated(newDocumentName + '2')
-      .url(baseUrl)
-      .waitForElementPresent('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('#checkbox-' + newDocumentName, waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-
-      .clickWhenVisible('#checkbox-' + newDocumentName + '2', waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName)
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName + '2')
-      .url(baseUrl + '/' + newDatabaseName + '/_all_docs')
-
-      .waitForElementPresent('pre', waitTime, false)
-      .getText('pre', function (result) {
-        var data = result.value,
-            createdDocumentANotPresent = data.indexOf(newDocumentName) === -1,
-            createdDocumentBNotPresent = data.indexOf(newDocumentName + '2') === -1;
-
-        this.verify.ok(createdDocumentANotPresent && createdDocumentBNotPresent,
-          'Checking if new documents no longer shows up in _all_docs.');
-      })
-      .end();
-  },
-
-  'Deleting a new Design Doc automatically removes it from the sidebar': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-    var newDatabaseName = client.globals.testDatabaseName;
-    var baseUrl = client.options.launch_url;
-    var designDoc = {
-      "_id": "_design/sidebar-update",
-      "views": {
-        "new-index": {
-          "map": "function (doc) {\n  emit(doc._id, 1);\n}"
-        }
-      },
-      "language": "javascript"
-    };
-
-    /*jshint multistr: true */
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .createDocument(designDoc._id, newDatabaseName, designDoc)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // confirm the design doc appears in the sidebar
-      .waitForElementPresent('#sidebar-content span[title="_design/sidebar-update"]', waitTime, false)
-
-      .execute('document.querySelector("div[data-id=\'_design/sidebar-update\']").scrollIntoView();')
-      .clickWhenVisible('div[data-id="_design/sidebar-update"] label[for="checkbox-_design/sidebar-update"]', waitTime, false)
-
-      .waitForElementPresent('.bulk-action-component-selector-group .fonticon-trash', waitTime, false)
-      .execute('document.querySelector(".bulk-action-component-selector-group .fonticon-trash").scrollIntoView();')
-      .clickWhenVisible('.bulk-action-component-selector-group .fonticon-trash')
-      .acceptAlert()
-
-      // now confirm it's gone
-      .waitForElementNotPresent('#sidebar-content span[title="_design/sidebar-update"]', waitTime, false)
-      .end();
-  },
-
-  'Deletes a document via Editor': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'delete_doc_doc',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .checkForDocumentCreated(newDocumentName)
-      .loginToGUI()
-      .url(baseUrl + '#/database/' + newDatabaseName + '/' + newDocumentName)
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .clickWhenVisible('#doc-editor-actions-panel button[title="Delete"]')
-      .waitForElementVisible('.confirmation-modal', waitTime, false)
-      .clickWhenVisible('.confirmation-modal button.btn.btn-primary')
-      .waitForElementNotPresent('.confirmation-modal button.btn-primary', waitTime, true)
-      .waitForElementPresent('.jump-to-doc', waitTime, false)
-
-      //check raw JSON
-      .url(baseUrl + '/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('pre', waitTime, false)
-      .getText('pre', function (result) {
-        var data = result.value,
-            createdDocumentANotPresent = data.indexOf(newDocumentName) === -1;
-
-        this.verify.ok(createdDocumentANotPresent,
-          'Checking if new document no longer shows up in _all_docs.');
-      })
-      .end();
-  },
-
-};
diff --git a/app/addons/documents/tests/nightwatch/designConflicts.js b/app/addons/documents/tests/nightwatch/designConflicts.js
deleted file mode 100644
index 9fdeac6..0000000
--- a/app/addons/documents/tests/nightwatch/designConflicts.js
+++ /dev/null
@@ -1,28 +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.
-
-
-module.exports = {
-
-  'Shows the editor for conflicting docs': function (client) {
-
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createAnimalDb()
-      .loginToGUI()
-      .url(baseUrl + '/#/database/animaldb/_design/conflicts')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/designDocInfoPresent.js b/app/addons/documents/tests/nightwatch/designDocInfoPresent.js
deleted file mode 100644
index 62a5fed..0000000
--- a/app/addons/documents/tests/nightwatch/designDocInfoPresent.js
+++ /dev/null
@@ -1,28 +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.
-
-
-
-module.exports = {
-  'Design Doc Metadata present' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_info')
-      .waitForElementVisible('.metadata-page', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/doubleEmitResults.js b/app/addons/documents/tests/nightwatch/doubleEmitResults.js
deleted file mode 100644
index 4c50e21..0000000
--- a/app/addons/documents/tests/nightwatch/doubleEmitResults.js
+++ /dev/null
@@ -1,36 +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.
-
-
-
-module.exports = {
-
-  'View results with same id are all shown': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-    var newDatabaseName = client.globals.testDatabaseName;
-    var baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.clearfix', waitTime, false)
-      .waitForElementPresent('.doc-row', waitTime, false)
-      .execute(function () {
-        return document.querySelectorAll('.doc-row').length;
-      }, function (result) {
-        client.assert.equal(result.value, 20);
-      })
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/editDocumentWithStringEditor.js b/app/addons/documents/tests/nightwatch/editDocumentWithStringEditor.js
deleted file mode 100644
index 7b8c507..0000000
--- a/app/addons/documents/tests/nightwatch/editDocumentWithStringEditor.js
+++ /dev/null
@@ -1,50 +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.
-
-
-
-module.exports = {
-  'Edit document field using the String Editor' : (client) => {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = 'str_editor_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-      // Move editor cursor to _id field
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,4);\
-      ')
-      .clickWhenVisible('button.string-edit')
-      // Check String Editor is displayed
-      .waitForElementPresent('#string-editor-container', waitTime, false)
-      .execute('\
-        var str_editor = ace.edit("string-editor-container");\
-        console.log(str_editor);\
-        str_editor.setValue("' + newDocumentName + '");\
-      ')
-      .clickWhenVisible('#string-edit-save-btn')
-      //Check String editor is no longer visible
-      .waitForElementNotPresent('#string-editor-container', waitTime, false)
-      //Check value has changed in the maind editor
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .assert.containsText('span.ace_string', '"' + newDocumentName + '"')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/editDocumentsFromView.js b/app/addons/documents/tests/nightwatch/editDocumentsFromView.js
deleted file mode 100644
index c4c9ecd..0000000
--- a/app/addons/documents/tests/nightwatch/editDocumentsFromView.js
+++ /dev/null
@@ -1,58 +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.
-
-
-
-module.exports = {
-  'Edit is allowed from default Map Views' : function (client) {
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url,
-          newDocumentName = '_design/abc',
-          ddocContents = {
-            "views": {
-              "evens": {
-                "map": "function (doc) { if (doc.number%2 === 0) { emit(doc._id, doc.number); } }",
-                "reduce" : "_count"
-              }
-            },
-            "language": "javascript"
-          };
-    client
-      .createDocument(newDocumentName, newDatabaseName, ddocContents)
-      .populateDatabase(newDatabaseName)
-
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/abc/_view/evens')
-      .clickWhenVisible('.fonticon-json')
-
-      //navigate to 'evens' view (declared above), then click on first document's pencil icon
-      .clickWhenVisible('a[href="#/database/' + newDatabaseName + '/document_10"]')
-      //navigated to editor
-      .waitForElementVisible('#editor-container', waitTime, false)
-      .verify.urlContains('#/database/' + newDatabaseName + '/document_10');
-  },
-
-  'Edit is not allowed for Map Views where reduce is checked' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const newDatabaseName = client.globals.testDatabaseName;
-
-    client
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/abc/_view/evens')
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#query-options-tray label[for="qoReduce"]')
-      .clickWhenVisible('#button-options button[type="submit"]')
-      .waitForElementNotPresent('i.fonticon-pencil', waitTime)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/encodingSupport.js b/app/addons/documents/tests/nightwatch/encodingSupport.js
deleted file mode 100644
index fcf0c23..0000000
--- a/app/addons/documents/tests/nightwatch/encodingSupport.js
+++ /dev/null
@@ -1,64 +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.
-
-module.exports = {
-  'mango supports encoding': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = 'encoded/db-' + client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-panel', waitTime, true)
-      .clickWhenVisible('#mango-query', waitTime, true)
-      .waitForElementPresent('.mango-editor-wrapper', waitTime, true)
-      .end();
-  },
-
-  'permissions supports encoding': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = 'encoded/db-' + client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-panel', waitTime, true)
-      .clickWhenVisible('#permissions', waitTime, true)
-      .waitForElementPresent('.permissions-page', waitTime, true)
-      .end();
-  },
-
-  'changes supports encoding': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = 'encoded/db-' + client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-panel', waitTime, true)
-      .clickWhenVisible('#changes', waitTime, true)
-      .waitForElementPresent('.changes-header', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/fixRegressionTableView.js b/app/addons/documents/tests/nightwatch/fixRegressionTableView.js
deleted file mode 100644
index f9fd491..0000000
--- a/app/addons/documents/tests/nightwatch/fixRegressionTableView.js
+++ /dev/null
@@ -1,40 +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.
-
-
-
-module.exports = {
-
-  'Does not crash the table view': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName1)
-      .checkForDocumentCreated(newDocumentName2)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-
-      .clickWhenVisible('.fonticon-pencil', client.globals.maxWaitTime, false)
-      .clickWhenVisible('.faux-header__breadcrumbs-link')
-      .clickWhenVisible('.fonticon-table', client.globals.maxWaitTime, false)
-      .waitForElementVisible('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .clickWhenVisible('td[title=\'bulktest1\'', client.globals.maxWaitTime, false)
-      .waitForElementVisible('#doc-editor-actions-panel', client.globals.maxWaitTime, false)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/jsonView.js b/app/addons/documents/tests/nightwatch/jsonView.js
deleted file mode 100644
index 7fdb28c..0000000
--- a/app/addons/documents/tests/nightwatch/jsonView.js
+++ /dev/null
@@ -1,30 +0,0 @@
-module.exports = {
-
-  'Doc results: check ?include_docs=true returns doc content': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'bitterns',
-        waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    var docContent = {
-      "species": "American Bittern",
-      "seen_general": "not as often as I'd like",
-      "seen_this_year": "*sigh*, no."
-    };
-
-    client
-      .createDocument(newDocumentName, newDatabaseName, docContent)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-
-      .url(baseUrl + '#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.doc-item', client.globals.maxWaitTime, false)
-      // by default include_docs is on, so check "American Bittern" does exist in the DOM
-      .waitForElementPresent('.prettyprint', client.globals.maxWaitTime, false)
-      .assert.containsText('.prettyprint', 'American Bittern')
-      .end();
-  }
-};
-
diff --git a/app/addons/documents/tests/nightwatch/mangoIndex.js b/app/addons/documents/tests/nightwatch/mangoIndex.js
deleted file mode 100644
index 7d9b791..0000000
--- a/app/addons/documents/tests/nightwatch/mangoIndex.js
+++ /dev/null
@@ -1,74 +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.
-
-
-
-module.exports = {
-
-  'Creating new indexes with mango (mangoIndex.js)': function (client) {
-    /*jshint multistr: true */
-
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_index')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .execute('\
-        var json = \'{\
-          "index": {\
-            "fields": ["gans_gans_mango"]\
-          },\
-          "name": "rocko-artischocko",\
-          "type" : "json"\
-        }\';\
-        var editor = ace.edit("query-field");\
-        editor.getSession().setValue(json);\
-      ')
-      .clickWhenVisible('#create-index-btn')
-      .checkForStringPresent(newDatabaseName + '/_index', 'rocko-artischocko')
-      .checkForStringPresent(newDatabaseName + '/_index', 'gans_gans_mango')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('#dashboard-lower-content', 'gans_gans_mango')
-      .end();
-  },
-
-  'Deleting new named indexes with mango': function (client) {
-    var waitTime = 10000,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_index')
-      .waitForElementPresent('#doc-list', waitTime, false)
-      .assert.containsText('#dashboard-lower-content', 'ente_ente_mango_ananas')
-      .clickWhenVisible('.bulk-action-component-panel input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-
-      .checkForStringNotPresent(newDatabaseName + '/_index', '"name":"rocko-artischocko"')
-      .checkForStringNotPresent(newDatabaseName + '/_index', 'gans_gans_mango')
-      .getText('body', function (result) {
-        var data = result.value;
-
-        this.verify.ok(data.indexOf('ente_ente_mango_ananas') === -1,
-          'Checking if documents were deleted');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/mangoQuery.js b/app/addons/documents/tests/nightwatch/mangoQuery.js
deleted file mode 100644
index dc9054b..0000000
--- a/app/addons/documents/tests/nightwatch/mangoQuery.js
+++ /dev/null
@@ -1,45 +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.
-
-
-
-module.exports = {
-
-  'Finding things with mango': function (client) {
-    /*jshint multistr: true */
-    var waitTime = 10000,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#database/' + newDatabaseName + '/_find')
-      .waitForElementPresent('.watermark-logo', waitTime, false)
-      .execute('\
-        var json = \'{\
-          "selector": {\
-            "ente_ente_mango_ananas": {"$gt": null}\
-          }\
-        }\';\
-        var editor = ace.edit("query-field");\
-        editor.getSession().setValue(json);\
-      ')
-      .clickWhenVisible('#create-index-btn')
-      .clickWhenVisible('.fonticon-json')
-
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('#dashboard-lower-content', 'number')
-      .assert.containsText('#dashboard-lower-content', 'ente_ente_mango_ananas_res')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/navigateAfterEditingDocShouldShowAConfirmationBox.js b/app/addons/documents/tests/nightwatch/navigateAfterEditingDocShouldShowAConfirmationBox.js
deleted file mode 100644
index df3b30b..0000000
--- a/app/addons/documents/tests/nightwatch/navigateAfterEditingDocShouldShowAConfirmationBox.js
+++ /dev/null
@@ -1,37 +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.
-
-
-
-module.exports = {
-
-  'Navigate to New Doc Page, editing and then clicking on the sidebar should show a confirmation dialog': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var newLink = '#/database/' + newDatabaseName + '/_new';
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="' + newLink + '"]')
-      .waitForElementPresent('.code-region', waitTime, false)
-      .verify.urlEquals(baseUrl + '/' + newLink)
-
-      .keys(['.ace_variable', 'v'])
-      .clickWhenVisible('a[href="#/activetasks"]')
-      .acceptAlert()
-      .verify.urlEquals(baseUrl + '/#/activetasks');
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/navigateFromNewDoc.js b/app/addons/documents/tests/nightwatch/navigateFromNewDoc.js
deleted file mode 100644
index a65f93d..0000000
--- a/app/addons/documents/tests/nightwatch/navigateFromNewDoc.js
+++ /dev/null
@@ -1,38 +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.
-
-
-
-module.exports = {
-
-  // this tests that the user is able to just navigate to and from the New View page without errors [it confirms
-  // a bug fix for where the Ace Editor threw a JS error preventing the subsequent page from loading]
-  'Navigate to and from New Doc Page' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var newLink = '/#/database/' + newDatabaseName + '/_new';
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="' + newLink.replace("/", "") + '"]')
-      .waitForElementPresent('.code-region', waitTime, false)
-      .verify.urlEquals(baseUrl + newLink)
-
-      // now redirect back to the all docs page and check it's loaded properly
-      .clickWhenVisible('.faux-header__breadcrumbs-link')
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs');
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/navigateNotFoundDB.js b/app/addons/documents/tests/nightwatch/navigateNotFoundDB.js
deleted file mode 100644
index 802ef3b..0000000
--- a/app/addons/documents/tests/nightwatch/navigateNotFoundDB.js
+++ /dev/null
@@ -1,33 +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.
-
-
-
-module.exports = {
-
-  // this tests that the user is able to just navigate to and from the New View page without errors [it confirms
-  // a bug fix for where the Ace Editor threw a JS error preventing the subsequent page from loading]
-  'Navigate to a database that does not exist' : function (client) {
-    const waitTime = client.globals.maxWaitTime,
-          baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/does-not-exist/_all_docs')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      // We wait for the first toasts to be cleared
-      .pause(1000)
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      .assert.containsText('.Toastify__toast-container .Toastify__toast--error .Toastify__toast-body', 'does not exist')
-      .verify.urlEquals(baseUrl + '/#');
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/paginateAllDocs.js b/app/addons/documents/tests/nightwatch/paginateAllDocs.js
deleted file mode 100644
index 9455e1f..0000000
--- a/app/addons/documents/tests/nightwatch/paginateAllDocs.js
+++ /dev/null
@@ -1,140 +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.
-
-
-
-module.exports = {
-
-  'change number of items per page': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      // ensures the select dropdown is rendered
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // hack to get select working by clicking on it and using keyboard to select
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_16"]', waitTime)
-      .waitForElementPresent('.doc-row', waitTime, false)
-      .execute(function () {
-        return document.querySelectorAll('.doc-row').length;
-      }, function (result) {
-        client.assert.equal(result.value, 10);
-      })
-      .end();
-  },
-
-  'paginate to page two and back': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_16"]', waitTime)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementPresent('div[data-id="document_17"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'PerPage change resets to page 1': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_16"]', waitTime)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementPresent('div[data-id="document_17"]', waitTime)
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'paginate to page two and switch to json view': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.table-view-docs', waitTime)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('td[title="document_16"]', waitTime)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementPresent('td[title="document_17"]', waitTime)
-
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('div[data-id="document_17"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/paginateView.js b/app/addons/documents/tests/nightwatch/paginateView.js
deleted file mode 100644
index 7fe5250..0000000
--- a/app/addons/documents/tests/nightwatch/paginateView.js
+++ /dev/null
@@ -1,163 +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.
-
-
-
-module.exports = {
-
-  'change number of items per page': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.fonticon-json')
-
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .waitForElementPresent('#select-per-page', waitTime, false)
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // hack to get select working by clicking on it and using keyboard to select
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_9"]', waitTime)
-      .execute(function () {
-        return document.querySelectorAll('.doc-row').length;
-      }, function (result) {
-        client.assert.equal(result.value, 10);
-      })
-      .end();
-  },
-
-  'paginate to page two and back': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('#next', waitTime, false)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_1"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('div[data-id="document_19"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_19"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'PerPage change resets to page 1': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_1"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'paginate to page two and switch to json view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.table-view-docs', waitTime)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('#next', waitTime, false)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementNotPresent('td[title="document_1"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('td[title="document_19"]', waitTime)
-
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('div[data-id="document_19"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_19"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/previousButton.js b/app/addons/documents/tests/nightwatch/previousButton.js
deleted file mode 100644
index 6b70d78..0000000
--- a/app/addons/documents/tests/nightwatch/previousButton.js
+++ /dev/null
@@ -1,26 +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.
-
-module.exports = {
-  'Mango: Navigate back to _all_docs': function (client) {
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_index')
-      .clickWhenVisible('.faux-header__breadcrumbs-link')
-      .assert.urlContains('_all_docs')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/queryOptions.js b/app/addons/documents/tests/nightwatch/queryOptions.js
deleted file mode 100644
index e0cb801..0000000
--- a/app/addons/documents/tests/nightwatch/queryOptions.js
+++ /dev/null
@@ -1,42 +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.
-
-
-
-module.exports = {
-
-  'Query Options: check startkey filters properly': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#betweenKeys', waitTime, false)
-      .setValue('#startkey', '"document_2"')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('#doc-list [data-id="document_1"]', waitTime, false)
-      .waitForElementPresent('#doc-list [data-id="document_2"]', waitTime, false)
-      .assert.elementPresent('#doc-list [data-id="document_2"]')
-      .waitForElementPresent('#doc-list [data-id="document_3"]', waitTime, false)
-      .assert.elementPresent('#doc-list [data-id="document_3"]')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/queryOptionsCloseBug.js b/app/addons/documents/tests/nightwatch/queryOptionsCloseBug.js
deleted file mode 100644
index 8fd4ce2..0000000
--- a/app/addons/documents/tests/nightwatch/queryOptionsCloseBug.js
+++ /dev/null
@@ -1,42 +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.
-
-
-
-module.exports = {
-
-  'Query Options: close if opened / closed multiple times': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#betweenKeys', waitTime, false)
-      .setValue('#startkey', '"document_2"')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('#doc-list [data-id="document_1"]', waitTime, false)
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('.query-options .btn-cancelDark')
-
-      .waitForElementNotPresent('.query-options .js-view-query-update', waitTime, false)
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/replicateDatabaseButton.js b/app/addons/documents/tests/nightwatch/replicateDatabaseButton.js
deleted file mode 100644
index e13cd45..0000000
--- a/app/addons/documents/tests/nightwatch/replicateDatabaseButton.js
+++ /dev/null
@@ -1,56 +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.
-
-
-const helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-const testDbName = 'test_database';
-module.exports = {
-  before: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.create(testDbName, function () {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(testDbName, function () {
-      done();
-    });
-  },
-
-  'Shows correct view on replicate database': function (client) {
-    const waitTime = client.globals.maxWaitTime,
-          baseUrl = client.options.launch_url;
-    const srcDbSelector = '.replication__page .replication__section:nth-child(3) .replication__input-react-select .Select-value-label';
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + testDbName + '/_all_docs')
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-replicate')
-
-      //Wait for replication page to show up
-      .waitForElementVisible('.replication__page', waitTime, false)
-
-      //Wait for source select to show
-      .waitForElementVisible(srcDbSelector, waitTime, false)
-
-      //Get the text values
-      .getText(srcDbSelector, function (data) {
-        this.verify.ok(data.value === testDbName,
-          'Check if database name is filled in source name');
-      })
-      .end();
-  }
-};
-
diff --git a/app/addons/documents/tests/nightwatch/resultsToolbar.js b/app/addons/documents/tests/nightwatch/resultsToolbar.js
deleted file mode 100644
index 74c2e0f..0000000
--- a/app/addons/documents/tests/nightwatch/resultsToolbar.js
+++ /dev/null
@@ -1,72 +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.
-
-module.exports = {
-  'Defaults to metadata layout when displaying results': (client) => {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-    const newDocumentName = 'resultsToolbarTest';
-    const docContent = {
-      "foo": "bar"
-    };
-
-    client
-      .createDocument(newDocumentName, newDatabaseName, docContent)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-
-      .url(`${baseUrl}#/database/${newDatabaseName}/_all_docs`)
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Metadata')
-      .assert.not.elementPresent('.table-container-autocomplete')
-      .end();
-  },
-
-  'Layouts update on manual url change/refresh and query options': (client) => {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-    const newDocumentName = 'resultsToolbarTest';
-    const docContent = {
-      "foo": "bar"
-    };
-
-    client
-      .createDocument(newDocumentName, newDatabaseName, docContent)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-      .url(`${baseUrl}#/database/${newDatabaseName}/_all_docs`)
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Metadata')
-
-      // turn include_docs on through query options
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .waitForElementPresent('#qoIncludeDocsLabel', waitTime, false)
-      .clickWhenVisible('#qoIncludeDocsLabel')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Table')
-
-      // switch to json view and then turn off include_docs
-      .clickWhenVisible('.fonticon-json')
-      .assert.containsText('.two-sides-toggle-button button.active', 'JSON')
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .waitForElementPresent('#qoIncludeDocsLabel', waitTime, false)
-      .assert.attributeEquals('#qoIncludeDocs', 'checked', 'true')
-      .clickWhenVisible('#qoIncludeDocsLabel')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Metadata')
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/revBrowser.js b/app/addons/documents/tests/nightwatch/revBrowser.js
deleted file mode 100644
index bc0f363..0000000
--- a/app/addons/documents/tests/nightwatch/revBrowser.js
+++ /dev/null
@@ -1,108 +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.
-
-
-
-module.exports = {
-  'is able to show two docs next to each other, and diff them' : function (client) {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = 'animaldb';
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createAnimalDb()
-      .checkForDocumentCreated('zebra', null, newDatabaseName)
-
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/zebra')
-
-      .clickWhenVisible('button.conflicts')
-
-      .waitForElementVisible('.revision-diff-area', waitTime, false)
-
-      .assert.containsText('.revision-diff-area', '"black & white"')
-      .assert.containsText('.revision-diff-area', '"white"')
-
-      .clickWhenVisible('.two-sides-toggle-button button:last-child')
-
-      .waitForElementVisible('.revision-split-area', waitTime, false)
-
-      .assert.containsText('.revision-split-area [data-id="ours"]', '"black & white"')
-      .assert.containsText('.revision-split-area [data-id="theirs"]', '"white"')
-
-
-      .clickWhenVisible('[data-id="button-select-theirs"]')
-      .clickWhenVisible('.modal-footer input[type="checkbox"]')
-      .clickWhenVisible('.modal-footer button.btn-danger')
-      .clickWhenVisible('.fonticon-json')
-
-      .clickWhenVisible('[data-id="zebra"] a')
-
-      .waitForElementVisible('.panel-section', waitTime, false)
-      .assert.not.elementPresent('button.conflicts')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '?include_docs=true&conflicts=true')
-
-      .getText('body', function (result) {
-        this.verify.ok(result.value.indexOf('"color": "white"') !== -1, 'check if doc version was promoted');
-      })
-
-      .end();
-  },
-  'is able to show two design docs next to each other, and diff them' : function (client) {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = 'animaldb';
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createAnimalDb()
-      .checkForDocumentCreated('_design/animals', null, newDatabaseName)
-
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/animals')
-
-      .clickWhenVisible('button.conflicts')
-
-      .waitForElementVisible('.revision-diff-area', waitTime, false)
-
-      .assert.containsText('.revision-diff-area', '"black & white"')
-      .assert.containsText('.revision-diff-area', '"white"')
-
-      .clickWhenVisible('.two-sides-toggle-button button:last-child')
-
-      .waitForElementVisible('.revision-split-area', waitTime, false)
-
-      .assert.containsText('.revision-split-area [data-id="ours"]', '"black & white"')
-      .assert.containsText('.revision-split-area [data-id="theirs"]', '"white"')
-
-
-      .clickWhenVisible('[data-id="button-select-theirs"]')
-      .clickWhenVisible('.modal-footer input[type="checkbox"]')
-      .clickWhenVisible('.modal-footer button.btn-danger')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotVisible('.Toastify__toast-container .Toastify__toast', waitTime, false)
-      .clickWhenVisible('[data-id="_design/animals"] a')
-
-      .waitForElementVisible('.panel-section', waitTime, false)
-      .assert.not.elementPresent('button.conflicts')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '?include_docs=true&conflicts=true')
-
-      .getText('body', function (result) {
-        this.verify.ok(result.value.indexOf('"color": "white"') !== -1, 'check if doc version was promoted');
-      })
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/selectDocViaTypeahead.js b/app/addons/documents/tests/nightwatch/selectDocViaTypeahead.js
deleted file mode 100644
index b96340d..0000000
--- a/app/addons/documents/tests/nightwatch/selectDocViaTypeahead.js
+++ /dev/null
@@ -1,58 +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.
-
-
-
-module.exports = {
-
-  'Select doc via typeahead field redirects user': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.jump-to-doc', waitTime, false)
-      .keys(['\uE00C'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('.documents-pagination', waitTime, false)
-      .setValue('.jump-to-doc .Select-input input', ['_des'])
-      .waitForElementPresent('.Select-option', waitTime, false)
-      .keys(['\uE015', '\uE015', '\uE006'])
-      .waitForElementPresent('.panel-button.upload', waitTime, false)
-      .end();
-  },
-
-  'Select doc works for capitalised id': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument('MY_CAP_DOC_ID', newDatabaseName, {value: 2})
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.jump-to-doc', waitTime, false)
-      .keys(['\uE00C'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('.documents-pagination', waitTime, false)
-      .setValue('.jump-to-doc .Select-input input', ['MY_CAP'])
-      .waitForElementPresent('.Select-option', waitTime, false)
-      .keys(['\uE015', '\uE015', '\uE006'])
-      .waitForElementPresent('.panel-button.upload', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/tableView.js b/app/addons/documents/tests/nightwatch/tableView.js
deleted file mode 100644
index a5d3201..0000000
--- a/app/addons/documents/tests/nightwatch/tableView.js
+++ /dev/null
@@ -1,79 +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.
-
-
-
-module.exports = {
-
-  'Shows data in the full table for all docs (include docs enabled)': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName1)
-      .checkForDocumentCreated(newDocumentName2)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-table')
-
-      .waitForElementVisible('.tableview-checkbox-cell', waitTime, false)
-      .waitForElementVisible('.table', waitTime, false)
-      .getText('.table', function (result) {
-        var data = result.value;
-
-        if (!data.indexOf) {
-          console.error('check your selenium test, race condition');
-        }
-
-        this.verify.ok(data.indexOf('testingValue') !== -1,
-          'Check if doc content is shown in table');
-      })
-
-      .end();
-  },
-
-  'Shows data in the metadata table for all docs (include docs disabled)': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName1)
-      .checkForDocumentCreated(newDocumentName2)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .assert.containsText('button.active', 'Metadata')
-      .waitForElementVisible('.tableview-checkbox-cell', waitTime, false)
-      .waitForElementVisible('.table', waitTime, false)
-      .getText('.table', function (result) {
-        var data = result.value;
-
-        if (!data.indexOf) {
-          console.error('check your selenium test, race condition');
-        }
-
-        this.verify.ok(data.indexOf('bulktest1') !== -1,
-          'Check if doc content is shown in table');
-      })
-
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/tableViewConflicts.js b/app/addons/documents/tests/nightwatch/tableViewConflicts.js
deleted file mode 100644
index 2c994a6..0000000
--- a/app/addons/documents/tests/nightwatch/tableViewConflicts.js
+++ /dev/null
@@ -1,38 +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.
-
-
-
-module.exports = {
-
-  'Shows how many conflicts have appeared': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabaseWithConflicts(newDatabaseName)
-      .checkForDocumentCreated('outfit1')
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      .clickWhenVisible('.fonticon-table')
-      .waitForElementVisible('.table', waitTime, false)
-
-      .waitForElementVisible('.table-container-autocomplete', waitTime, false)
-      .waitForElementVisible('.tableview-conflict', waitTime, false)
-
-      .assert.visible('.table [data-conflicts-indicator="true"]')
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/viewClone.js b/app/addons/documents/tests/nightwatch/viewClone.js
deleted file mode 100644
index 1d6bbff..0000000
--- a/app/addons/documents/tests/nightwatch/viewClone.js
+++ /dev/null
@@ -1,38 +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.
-
-module.exports = {
-
-  'Clones a view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('.prettyprint', 'stub')
-      .clickWhenVisible('.index-list .active span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-files-o', waitTime, true)
-      .waitForElementVisible('#new-index-name', waitTime, true)
-      .setValue('#new-index-name', 'cloned-view')
-      .clickWhenVisible('.clone-index-modal .btn-primary', waitTime, true)
-
-      // now wait for the sidebar to be updated with the new view
-      .waitForElementVisible('#testdesigndoc_cloned-view', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/viewCreate.js b/app/addons/documents/tests/nightwatch/viewCreate.js
deleted file mode 100644
index aa83f64..0000000
--- a/app/addons/documents/tests/nightwatch/viewCreate.js
+++ /dev/null
@@ -1,141 +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.
-
-module.exports = {
-
-  'creates design docs with js hint errors': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-0')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'furbie')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { if (doc != \'\') { emit(\'blerg\'); } else { emit(\'nana\'); }  }");\
-      ')
-      .clickWhenVisible('#save-view', waitTime)
-      .checkForDocumentCreated('_design/test_design_doc-selenium-0')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="blerg"]', 'blerg')
-      .end();
-  },
-
-  'Creates a Design Doc using the dropdown at "all documents"': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-1')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'hasehase\'); }");\
-      ')
-      .clickWhenVisible('#save-view', waitTime)
-      .checkForDocumentCreated('_design/test_design_doc-selenium-1')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="hasehase"]', 'hasehase')
-      .end();
-  },
-
-  'Creates a Design Doc and does not crash after navigating': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-3')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'hasehase\'); }");\
-      ')
-      .clickWhenVisible('#save-view', waitTime)
-      .checkForDocumentCreated('_design/test_design_doc-selenium-3')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // page now automatically redirects user to results of View. Confirm the new doc is present.
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="hasehase"]', 'hasehase')
-      .end();
-  },
-
-  'Creates a Design Doc using the dropdown at "the upper dropdown in the header"': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-2')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'gaenseindex')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'gansgans\'); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/test_design_doc-selenium-2')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="gansgans"]', 'gansgans')
-      .end();
-  },
-
-  'Adds a View to a DDoc using an existing DDoc': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-    var baseUrl = client.options.launch_url;
-    var newDatabaseName = client.globals.testDatabaseName;
-    /*jshint multistr: true */
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#sidebar-tab-testdesigndoc a.dropdown-toggle.icon.fonticon-plus-circled', waitTime, false)
-      .clickWhenVisible('#sidebar-tab-testdesigndoc a[href*="new_view"]', waitTime, false)
-      .waitForElementVisible('#index-name', waitTime, false)
-      .clearValue('#index-name')
-      .setValue('#index-name', 'test-new-view')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'enteente\', 1); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/testdesigndoc/_view/test-new-view')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="enteente"]', 'enteente')
-      .end();
-  }
-};
-
-function openDifferentDropdownsAndClick (client) {
-  var waitTime = client.globals.maxWaitTime;
-  var newDatabaseName = client.globals.testDatabaseName;
-  var baseUrl = client.options.launch_url;
-
-  return client
-    .loginToGUI()
-    .populateDatabase(newDatabaseName)
-    .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-    .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-    .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-    .waitForElementPresent('.index-cancel-link', waitTime, false);
-}
diff --git a/app/addons/documents/tests/nightwatch/viewCreateBadView.js b/app/addons/documents/tests/nightwatch/viewCreateBadView.js
deleted file mode 100644
index ddac11c..0000000
--- a/app/addons/documents/tests/nightwatch/viewCreateBadView.js
+++ /dev/null
@@ -1,71 +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.
-
-
-
-module.exports = {
-
-  'Displays an error if reduce is not possible': function (client) {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-bad-reduce')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex')
-      .clickWhenVisible('#reduce-function-selector')
-      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'boom\', doc._id); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .closeNotifications()
-      .clickWhenVisible('.control-toggle-queryoptions', waitTime, false)
-      .clickWhenVisible('label[for="qoReduce"]', waitTime, false)
-      .clickWhenVisible('.query-options .btn-secondary', waitTime, false)
-      .waitForElementVisible('div.table-view-docs', waitTime, false)
-      .waitForAttribute('.table-view-docs td:nth-child(4)', 'title', function (docContents) {
-        return (/_sum function requires/).test(docContents);
-      })
-      .end();
-  },
-
-  'Visit url of broken view displays error': function (client) {
-    const newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url,
-          waitTime = client.globals.maxWaitTime;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/brokenview/_view/brokenview')
-      .clickWhenVisible('.control-toggle-queryoptions', waitTime, false)
-      .clickWhenVisible('label[for="qoReduce"]', waitTime, false)
-      .clickWhenVisible('.query-options .btn-secondary', waitTime, false)
-      .waitForElementVisible('div.table-view-docs', waitTime, false)
-      .waitForAttribute('.table-view-docs td:nth-child(4)', 'title', function (docContents) {
-        return (/_sum function requires/).test(docContents);
-      })
-      .end();
-  }
-
-
-};
diff --git a/app/addons/documents/tests/nightwatch/viewDelete.js b/app/addons/documents/tests/nightwatch/viewDelete.js
deleted file mode 100644
index 4959db4..0000000
--- a/app/addons/documents/tests/nightwatch/viewDelete.js
+++ /dev/null
@@ -1,43 +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.
-
-
-
-module.exports = {
-
-  'Deletes a view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('.prettyprint', 'stub')
-
-      // confirm the sidebar shows the testdesigndoc design doc
-      .waitForElementVisible('#design-doc-menu-testdesigndoc', waitTime, true)
-
-      .clickWhenVisible('.index-list .active span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-trash', waitTime, true)
-      .clickWhenVisible('.confirmation-modal button.btn-primary', waitTime, true)
-      .waitForElementNotPresent('.confirmation-modal button.btn-primary', waitTime, true)
-
-      // now wait for the sidebar to have removed the design doc
-      .waitForElementNotPresent('#testdesigndoc', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/viewEdit.js b/app/addons/documents/tests/nightwatch/viewEdit.js
deleted file mode 100644
index 0032e00..0000000
--- a/app/addons/documents/tests/nightwatch/viewEdit.js
+++ /dev/null
@@ -1,236 +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.
-
-
-
-module.exports = {
-
-  'Edits a design doc - renames index': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview/edit')
-      .waitForElementPresent('.index-cancel-link', waitTime, true)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementVisible('#index-name', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForAttribute('#index-name', 'value', function (val) {
-        return val === 'stubview';
-      })
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex5000')
-
-      .clickWhenVisible('#save-view')
-
-      // confirm the new index name is present
-      .waitForElementVisible('#testdesigndoc_hasenindex5000', waitTime, false)
-      .end();
-  },
-
-  'Edits a design doc': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var viewUrl = newDatabaseName + '/_design/testdesigndoc/_view/stubview?limit=6&reduce=false';
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview/edit')
-      .waitForElementPresent('.index-cancel-link', waitTime, true)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementVisible('#index-name', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForAttribute('#index-name', 'value', function (val) {
-        return val === 'stubview';
-      })
-
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'hasehase6000\', 1); }");\
-        editor._emit(\'blur\');\
-      ')
-      .clickWhenVisible('#save-view')
-
-      .checkForStringPresent(viewUrl, 'hasehase6000')
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-      .waitForAttribute('#doc-list', 'textContent', function (docContents) {
-        return (/hasehase6000/).test(docContents);
-      })
-      .end();
-  },
-
-  'Edits two design docs to confirm Map Editor correct on second': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // create the first view
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'view1-name')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'view1')
-      .clickWhenVisible('#reduce-function-selector')
-      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(doc._id, 100); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/view1-name')
-
-      // create the second view
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .closeNotifications()
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-
-      .waitForElementPresent('.index-cancel-link', waitTime, false)
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .setValue('#new-ddoc', 'view2-name')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'view2')
-      .clickWhenVisible('#reduce-function-selector')
-      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(doc._id, 200); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/view2-name')
-
-      // now redirect back to first view and confirm the fields are all populated properly
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/view1-name/_view/view1/edit')
-
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementVisible('#save-view', waitTime, false)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .execute(function () {
-        var editor = window.ace.edit("map-function");
-        return editor.getSession().getValue();
-      }, [], function (resp) {
-        this.assert.equal(resp.value, 'function (doc) { emit(doc._id, 100); }');
-      })
-      .end();
-  },
-
-  'Editing a view and putting it into a new design doc removes it from the old design doc': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      // confirm the sidebar shows the testdesigndoc design doc
-      .waitForElementVisible('#design-doc-menu-testdesigndoc', waitTime, true)
-
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      // now edit the view and move it into a brand new design doc
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview/edit')
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForElementPresent('.index-cancel-link', waitTime, true)
-      .waitForElementVisible('.styled-select select', waitTime, true)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-
-      .setValue('.styled-select select', 'new-doc')
-
-      // needed to get React to update + show the new design doc field
-      .click('body')
-
-      .waitForElementPresent('#new-ddoc', waitTime, true)
-      .execute('document.querySelector("#new-ddoc").scrollIntoView();')
-      .setValue('#new-ddoc', 'brand-new-ddoc')
-      .clickWhenVisible('#save-view')
-
-      // now wait for the old design doc to be gone, and the new one to have shown up
-      .waitForElementNotPresent('#testdesigndoc', waitTime, true)
-      .waitForElementPresent('#design-doc-menu-brand-new-ddoc', waitTime, true)
-      .end();
-  }
-
-};
diff --git a/app/addons/documents/tests/nightwatch/viewQueryOptions.js b/app/addons/documents/tests/nightwatch/viewQueryOptions.js
deleted file mode 100644
index 75743ef..0000000
--- a/app/addons/documents/tests/nightwatch/viewQueryOptions.js
+++ /dev/null
@@ -1,59 +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.
-
-
-
-module.exports = {
-  'Edit view: Queryoptions work': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#byKeys', waitTime, false)
-      .setValue('#keys-input', '["document_1"]')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('#doc-list [data-id="document_2"]', waitTime, false)
-      .assert.not.elementPresent('#doc-list [data-id="document_2"]')
-      .assert.not.elementPresent('#doc-list [data-id="document_0"]')
-      .assert.elementPresent('#doc-list [data-id="document_1"]')
-      .end();
-  },
-
-  'Edit view: Queryoptions works querying index with newlines in key field': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.control-toggle-queryoptions', waitTime, false)
-      .clickWhenVisible('#byKeys', waitTime, false)
-      .setValue('#keys-input', '["document_1",\n"document_2"]')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('#doc-list [data-id="document_0"]', waitTime, false)
-      .assert.not.elementPresent('#doc-list [data-id="document_0"]')
-      .assert.elementPresent('#doc-list [data-id="document_1"]')
-      .end();
-  }
-
-};
diff --git a/app/addons/fauxton/__tests__/components.test.js b/app/addons/fauxton/__tests__/components.test.js
deleted file mode 100644
index a181353..0000000
--- a/app/addons/fauxton/__tests__/components.test.js
+++ /dev/null
@@ -1,123 +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.
-import Views from "../components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('Pagination', () => {
-
-  it('renders 20-wise pages per default', () => {
-    const pageEl = mount(
-      <Views.Pagination page={3} total={55} urlPrefix="?prefix=" urlSuffix="&suffix=88" />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 3 + 1).toBe(lis.length);
-    expect(lis.first().hasClass("disabled")).toBeFalsy();
-    expect(lis.at(1).hasClass("class")).toBeFalsy();
-    expect(lis.at(2).hasClass("class")).toBeFalsy();
-    expect(lis.at(3).hasClass("active")).toBeTruthy();
-    expect(lis.at(4).hasClass("disabled")).toBeTruthy();
-    expect("2").toBe(lis.at(2).text());
-    expect("?prefix=2&suffix=88").toBe(lis.at(2).find("a").prop("href"));
-  });
-
-  it("can overwrite collection size", () => {
-    const pageEl = mount(
-      <Views.Pagination perPage={10} page={3} total={55} urlPrefix="?prefix=" urlSuffix="&suffix=88" />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 6 + 1).toBe(lis.length);
-  });
-
-  it("handles large collections properly - beginning", () => {
-    const pageEl = mount(
-      <Views.Pagination page={3} total={600} />,
-    );
-    const lis = pageEl.find('li');
-    expect(1 + 10 + 1).toBe(lis.length);
-    expect(lis.at(3).hasClass("active")).toBeTruthy();
-    expect("3").toBe(lis.at(3).text());
-    expect("7").toBe(lis.at(7).text());
-    expect("10").toBe(lis.at(10).text());
-  });
-
-  it("handles large collections properly - middle", () => {
-    const pageEl = mount(
-      <Views.Pagination page={10} total={600} />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 10 + 1).toBe(lis.length);
-    expect(lis.at(6).hasClass("active")).toBeTruthy();
-    expect("7").toBe(lis.at(3).text());
-    expect("11").toBe(lis.at(7).text());
-    expect("14").toBe(lis.at(10).text());
-  });
-
-  it("handles large collections properly - end", () => {
-    const pageEl = mount(
-      <Views.Pagination page={29} total={600} />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 10 + 1).toBe(lis.length);
-    expect(lis.at(9).hasClass("active")).toBeTruthy();
-    expect("23").toBe(lis.at(3).text());
-    expect("27").toBe(lis.at(7).text());
-    expect("30").toBe(lis.at(10).text());
-  });
-
-  it('limits the number of total pages when customized', () => {
-    var maxNavPages = 15;
-    const pageEl = mount(
-      <Views.Pagination page={1} total={1000} maxNavPages={maxNavPages} />
-    );
-    const lis = pageEl.find('li');
-    expect(1 + maxNavPages + 1).toBe(lis.length);
-  });
-
-  it('calls callback method when supplied', () => {
-    var spy = sinon.spy();
-    const pageEl = mount(
-      <Views.Pagination page={1} total={100} onClick={spy} />
-    );
-    var links = pageEl.find('a');
-
-    links.at(3).simulate('click');
-
-    // confirm it gets called
-    expect(spy.calledOnce).toBeTruthy();
-
-    // confirm it's called with the pagination number (3)
-    expect(spy.calledWith(3)).toBeTruthy();
-  });
-
-  it('calls callback method with correct values for prev and next', () => {
-    var spy = sinon.spy();
-
-    var currentPage = 5;
-    const pageEl = mount(
-      <Views.Pagination page={currentPage} total={200} onClick={spy} />
-    );
-    var links = pageEl.find("a");
-
-    links.first().simulate('click');
-    expect(spy.calledWith(currentPage - 1)).toBeTruthy();
-
-    links.at(11).simulate('click');
-    expect(spy.calledWith(currentPage + 1)).toBeTruthy();
-  });
-
-});
diff --git a/app/addons/fauxton/appwrapper.js b/app/addons/fauxton/appwrapper.js
deleted file mode 100644
index 77cbca3..0000000
--- a/app/addons/fauxton/appwrapper.js
+++ /dev/null
@@ -1,125 +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.
-
-import React from 'react';
-import { connect } from 'react-redux';
-import NotificationPanelContainer from './notifications/components/NotificationPanelContainer';
-import PermanentNotificationContainer from './notifications/components/PermanentNotificationContainer';
-import NavBar from './navigation/container/NavBar';
-import * as NavbarActions from './navigation/actions';
-import classNames from 'classnames';
-import {toast, ToastContainer} from "react-toastify";
-
-
-class ContentWrapper extends React.Component {
-  constructor(props) {
-    super(props);
-    this.state = {
-      routerOptions: props.router.currentRouteOptions
-    };
-
-    if (props.router.currentRouteOptions && props.router.currentRouteOptions.selectedHeader) {
-      this.props.setNavbarActiveLink(this.state.routerOptions.selectedHeader);
-    }
-  }
-
-  onKeydown = e => {
-    const code = e.keyCode || e.which;
-    if (code === 27) {
-      toast.dismiss();
-    }
-  };
-
-  componentDidMount () {
-    this.props.router.on('new-component', (routerOptions) => {
-      this.setState({routerOptions});
-      this.props.setNavbarActiveLink(this.state.routerOptions.selectedHeader);
-    });
-
-    this.props.router.on('trigger-update', () => {
-      this.forceUpdate();
-    });
-
-    document.addEventListener('keydown', this.onKeydown);
-  }
-
-  componentWillUnmount() {
-    document.removeEventListener('keydown', this.onKeydown);
-  }
-
-  render () {
-    if (!this.state.routerOptions) {
-      return null;
-    }
-
-    const {component} = this.state.routerOptions;
-    if (!component) {return null;}
-    return component;
-  }
-}
-
-class App extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  render () {
-    const mainClass = classNames(
-      {'closeMenu': this.props.isPrimaryNavMinimized}
-    );
-    return (
-      <div>
-        <ToastContainer
-          className='toast-container'
-          position="top-right"
-          autoClose={5000}
-          closeButton={false}
-          hideProgressBar
-          newestOnTop={false}
-          closeOnClick
-          rtl={false}
-          pauseOnFocusLoss
-          draggable
-          pauseOnHover
-        />
-        <PermanentNotificationContainer/>
-        <div id="notifications">
-          <NotificationPanelContainer />
-        </div>
-        <div id="main"  className={mainClass}>
-          <div id="app-container">
-            <div className="wrapper">
-              <div role="main" className="pusher">
-                <ContentWrapper router={this.props.router} setNavbarActiveLink={this.props.setNavbarActiveLink}/>
-              </div>
-              <div id="primary-navbar">
-                <NavBar/>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-export default connect(
-  ({ navigation }) => {
-    return {
-      isPrimaryNavMinimized: navigation.isMinimized};
-  },
-  (dispatch) => {
-    return {
-      setNavbarActiveLink: (link) => { dispatch(NavbarActions.setNavbarActiveLink(link)); }
-    };
-  }
-)(App);
diff --git a/app/addons/fauxton/assets/less/components.less b/app/addons/fauxton/assets/less/components.less
deleted file mode 100644
index 26a0229..0000000
--- a/app/addons/fauxton/assets/less/components.less
+++ /dev/null
@@ -1,66 +0,0 @@
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.api-bar-tray {
-  padding: 16px 20px;
-
-  input[type="text"].text-field-to-copy {
-    .border-radius(5px 0 0 5px);
-  }
-  .input-append.input-prepend {
-    margin-bottom: 0;
-
-    .btn {
-      background-color: @secondaryBlue;
-      color: @buttonText;
-      margin-left: -1px;
-      padding: 10px 10px 9px;
-      border: none;
-      line-height: 1.5em;
-      &:hover{
-        background-color: #cbcbcb;
-      }
-    }
-
-    .icon-question-sign {
-      margin-left: 3px;
-      color: @secondaryBlue;
-      &:hover {
-        color: @hoverHighlight;
-      }
-    }
-  }
-}
-
-.api-bar-tray:before {
-  right: 80px;
-}
-
-.clipboard-copy-element {
-  i:before {
-    margin-right: 0px;
-  }
-
-}
-
-button.clipboard-copy-element {
-  background: transparent;
-  border: 0;
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-#perma-warning {
-  background-color: white;
-}
-
-.perma-warning__content {
-  margin: 4px;
-  padding: 10px;
-  color: #B11925;
-  outline-style: solid;
-  outline-color: #B11925;
-  outline-width: 4px;
-}
diff --git a/app/addons/fauxton/assets/less/fauxton.less b/app/addons/fauxton/assets/less/fauxton.less
deleted file mode 100644
index c248f69..0000000
--- a/app/addons/fauxton/assets/less/fauxton.less
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "components.less";
-@import "navigation.less";
diff --git a/app/addons/fauxton/assets/less/navigation.less b/app/addons/fauxton/assets/less/navigation.less
deleted file mode 100644
index 74ba89a..0000000
--- a/app/addons/fauxton/assets/less/navigation.less
+++ /dev/null
@@ -1,222 +0,0 @@
-.faux-navbar {
-  background-color: @brandDark2;
-  position: absolute;
-  left: 0;
-  top: 0;
-  bottom: 0;
-  z-index: 5;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.faux-navbar nav {
-  height: 100%;
-}
-
-.faux-navbar__linkcontainer {
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  height: 100%;
-}
-
-.faux-navbar__itemarea {
-  .box-sizing(border-box);
-  border-bottom: 1px solid @brandDark2;
-  height: 48px;
-  padding: 10px 20px;
-  line-height: 24px;
-}
-
-.faux-navbar__version-footer {
-  color: @buttonText;
-  font-size: 10px;
-  text-align: center;
-  background-color: @brandDark2;
-  padding-bottom: 10px;
-}
-
-.faux-navbar__burger {
-  background-color: @brandDark2;
-  padding: 19px 0 18px 18px;
-}
-
-.faux-navbar--narrow {
-  width: @collapsedNavWidth;
-}
-
-.faux-navbar--wide {
-  width: @navWidth;
-}
-
-.faux-navbar__burger:hover .faux-navbar__burger__icon {
-  color: @navIconActive;
-}
-
-.faux-navbar__burger__icon {
-  color: @navIconColor;
-  font-size: 27px;
-}
-
-.faux-navbar__burger__icon--flipped:before{
-  -moz-transform: scale(-1, 1);
-  -webkit-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-
-.faux-navbar__link, .faux-logout__link, .faux-login__link {
-  display: block;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.faux-navbar__link--active {
-  background-color: @brandHighlight;
-  text-decoration: none;
-}
-
-.faux-navbar__link--inactive {
-  background-color: @brandDark1;
-}
-
-.faux-navbar__link:hover, .faux-logout__link:hover, .faux-login__link:hover {
-  background-color: @hoverHighlight;
-  text-decoration: none;
-}
-
-.faux-navbar__link:active, .faux-navbar__link:focus {
-  text-decoration: none;
-}
-
-.faux-navbar__link:hover .faux-navbar__icon:before {
-  color: @navIconActive;
-}
-
-.faux-navbar__link--active .faux-navbar__icon:before {
-  color: @navIconActive;
-}
-
-.faux-navbar__icon {
-  margin-right: 14px;
-  color: @navIconColor;
-  font-size: 24px;
-  vertical-align: middle;
-  position: relative;
-}
-
-.faux-navbar__icon-badge:after {
-  content:"";
-  position: absolute;
-  background: @hoverHighlight;
-  border: 1px solid @hoverHighlight;
-  height:8px;
-  width:8px;
-  top:0;
-  right:-2px;
-  text-align: center;
-  font-size: 0.5rem;
-  border-radius: 50%;
-}
-
-.faux-navbar__link:hover .faux-navbar__icon-badge:after {
-  border-color: @navIconActive;
-}
-
-.faux-navbar__link--active .faux-navbar__icon-badge:after {
-  border-color: @navIconActive;
-}
-
-.faux-navbar__text {
-  margin: 0;
-  color: @buttonText;
-  vertical-align: middle;
-  font-size: 16px;
-  font-weight: normal;
-  font-family: Helvetica,sans-serif;
-  font-weight: 400;
-}
-
-.faux-navbar__logout__text {
-  font-size: 12px;
-  color: @buttonText;
-}
-
-.faux-navbar__logout__textcontainer {
-  text-align: center;
-  color: @buttonText;
-}
-
-.faux-navbar__logout__textcontainer--narrow {
-  padding-bottom: 4px;
-  padding: 15px 0;
-}
-
-.faux-navbar__logout__textcontainer--wide {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  padding: 15px;
-}
-
-.faux-navbar__login__textcontainer {
-  text-align: center;
-  color: @buttonText;
-}
-
-.faux-navbar__login__textcontainer--narrow {
-  padding-bottom: 4px;
-  padding: 15px 0;
-}
-
-.faux-navbar__login__textcontainer--wide {
-  padding: 15px;
-}
-
-.faux-navbar__brand {
-  margin: 20px 0 20px 0;
-  height: 50px;
-  padding: 10px 10px 10px 10px;
-  float: none;
-  background: @brandDark2;
-}
-
-.faux-navbar__brand-logo {
-  display: block;
-  height: 100%;
-  margin-top: 10px;
-}
-
-.faux-navbar__brand-logo--wide {
-  background: url(@largeLogoPath) no-repeat 23px 0px;
-  background-size: 150px;
-  width: 200px;
-}
-
-.faux-navbar__brand-logo--narrow {
-  width: 43px;
-  height: 40px;
-  background: url(@smallLogoPath) no-repeat 3px 0;
-  background-size: 40px;
-}
-
-.faux-navbar__footer {
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-end;
-  height: 100%;
-  min-height: 200px;
-  width: 100%;
-}
-
-.faux-navbar__logout__username {
-  color: @buttonText;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  max-width: 150px;
-  white-space: nowrap;
-  padding-right: 5px;
-  padding-left: 10px;
-  font-size: 12px;
-}
diff --git a/app/addons/fauxton/base.js b/app/addons/fauxton/base.js
deleted file mode 100644
index a1bb98e..0000000
--- a/app/addons/fauxton/base.js
+++ /dev/null
@@ -1,40 +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.
-
-import app from '../../app';
-import FauxtonAPI from '../../core/api';
-import * as NavigationActions from './navigation/actions';
-import navigationReducers from './navigation/reducers';
-import notificationsReducer from './notifications/reducers';
-import './assets/less/fauxton.less';
-
-const Fauxton = FauxtonAPI.addon();
-
-Fauxton.initialize = () => {
-  const versionInfo = new Fauxton.VersionInfo();
-  versionInfo.fetch().then(function () {
-    NavigationActions.setNavbarVersionInfo(versionInfo.get('version'));
-  });
-};
-
-Fauxton.VersionInfo = Backbone.Model.extend({
-  url: function () {
-    return app.host;
-  }
-});
-
-FauxtonAPI.addReducers({
-  navigation: navigationReducers,
-  notifications: notificationsReducer
-});
-
-export default Fauxton;
diff --git a/app/addons/fauxton/components.js b/app/addons/fauxton/components.js
deleted file mode 100644
index 025d845..0000000
--- a/app/addons/fauxton/components.js
+++ /dev/null
@@ -1,213 +0,0 @@
-import FauxtonAPI from "../../core/api";
-
-// 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import { Modal } from "react-bootstrap";
-
-// import "velocity-animate/velocity";
-// import "velocity-animate/velocity.ui";
-
-
-// formats a block of code and pretty-prints it in the page. Currently uses the prettyPrint plugin
-class CodeFormat extends React.Component {
-  static defaultProps = {
-    lang: "js"
-  };
-
-  getClasses = () => {
-    // added for forward compatibility. This component defines an api via it's props so you can pass lang="N" and
-    // not the class that prettyprint requires for that lang. If (when, hopefully!) we drop prettyprint we won't
-    // have any change this component's props API and break things
-    var classMap = {
-      js: 'lang-js'
-    };
-
-    var classNames = 'prettyprint';
-    if (_.has(classMap, this.props.lang)) {
-      classNames += ' ' + classMap[this.props.lang];
-    }
-    return classNames;
-  };
-
-  componentDidMount() {
-    // this one function is all the lib offers. It parses the entire page and pretty-prints anything with
-    // a .prettyprint class; only executes on an element once
-    prettyPrint();
-  }
-
-  render() {
-    const code = JSON.stringify(this.props.code, null, " ");
-    return (
-      <div><pre className={this.getClasses()}>{code}</pre></div>
-    );
-  }
-}
-
-class Pagination extends React.Component {
-  static defaultProps = {
-    perPage: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE,
-    onClick: null,
-    page: 1,
-    total: 0,
-    urlPrefix: '',
-    urlSuffix: '',
-    maxNavPages: 10
-  };
-
-  getVisiblePages = (page, totalPages) => {
-    var from, to;
-    if (totalPages < this.props.maxNavPages) {
-      from = 1;
-      to = totalPages + 1;
-    } else {
-      var halfMaxNavPages = Math.floor(this.props.maxNavPages / 2);
-      from = page - halfMaxNavPages;
-      to = page + halfMaxNavPages;
-      if (from <= 1) {
-        from = 1;
-        to = this.props.maxNavPages + 1;
-      }
-      if (to > totalPages + 1) {
-        from = totalPages - (this.props.maxNavPages - 1);
-        to = totalPages + 1;
-      }
-    }
-    return {
-      from: from,
-      to: to
-    };
-  };
-
-  createItemsForPage = (visiblePages) => {
-    return _.range(visiblePages.from, visiblePages.to).map((i) => {
-      return (
-        <li key={i} className={(this.props.page === i ? 'active' : null)}>
-          {this.getLink(i, i)}
-        </li>
-      );
-    });
-  };
-
-  getOnPageClick(pageNumber) {
-    return (e) => {
-      if (e) {
-        e.preventDefault();
-      }
-      this.props.onClick(pageNumber);
-    };
-  }
-
-  getLink = (i, label) => {
-    if (this.props.onClick) {
-      return (
-        <a onClick={this.getOnPageClick(i)} dangerouslySetInnerHTML={{__html: label}}></a>
-      );
-    }
-    return (
-      <a href={this.props.urlPrefix + i + this.props.urlSuffix} dangerouslySetInnerHTML={{__html: label}}></a>
-    );
-  };
-
-  getTotalPages = () => {
-    return this.props.total === 0 ? 1 : Math.ceil(this.props.total / this.props.perPage);
-  };
-
-  render() {
-    var totalPages = this.getTotalPages();
-    var visiblePages = this.getVisiblePages(this.props.page, totalPages);
-    var rangeItems = this.createItemsForPage(visiblePages);
-    var prevPage = Math.max(this.props.page - 1, 1);
-    var nextPage = Math.min(this.props.page + 1, totalPages);
-
-    return (
-      <ul className="pagination">
-        <li className={(this.props.page === 1 ? "disabled" : null)}>
-          {this.getLink(prevPage, '&laquo;')}
-        </li>
-        {rangeItems}
-        <li className={(this.props.page < totalPages ? null : "disabled")}>
-          {this.getLink(nextPage, '&raquo;')}
-        </li>
-      </ul>
-    );
-  }
-}
-
-// a super-simple replacement for window.confirm()
-class ConfirmationModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    text: PropTypes.oneOfType([
-      PropTypes.string,
-      PropTypes.element
-    ]).isRequired,
-    onClose: PropTypes.func.isRequired,
-    onSubmit: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    visible: false,
-    title: 'Please confirm',
-    text: '',
-    successButtonLabel: 'Okay',
-    buttonClass: 'btn-primary'
-  };
-
-  close = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-    this.props.onClose();
-  };
-
-  render() {
-    let content = <p>{this.props.text}</p>;
-    if (!_.isString(this.props.text)) {
-      content = this.props.text;
-    }
-    const btnClasses = 'btn ' + this.props.buttonClass;
-    const closeButton = this.props.onClose ? (
-      <a href="#" data-bypass="true" className="cancel-link" onClick={this.close}>Cancel</a>
-    ) : null;
-    const submitButton = this.props.onSubmit ? (
-      <button className={btnClasses} onClick={this.props.onSubmit}>
-        <i className="fonticon-ok-circled"></i> {this.props.successButtonLabel}
-      </button>
-    ) : null;
-    return (
-      <Modal dialogClassName="confirmation-modal" show={this.props.visible} onHide={this.close}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>{this.props.title}</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          {content}
-        </Modal.Body>
-        <Modal.Footer>
-          { closeButton }
-          { submitButton }
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-
-
-export default {
-  CodeFormat: CodeFormat,
-  Pagination: Pagination,
-  ConfirmationModal: ConfirmationModal
-};
diff --git a/app/addons/fauxton/navigation/__tests__/burger-test.js b/app/addons/fauxton/navigation/__tests__/burger-test.js
deleted file mode 100644
index 5f9640f..0000000
--- a/app/addons/fauxton/navigation/__tests__/burger-test.js
+++ /dev/null
@@ -1,29 +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.
-import Burger from "../components/Burger";
-import React from "react";
-import ReactDOM from "react-dom";
-import sinon from "sinon";
-import {mount} from 'enzyme';
-
-describe('Navigation Bar', () => {
-
-  describe('Burger', () => {
-    it('dispatch TOGGLE_NAVBAR_MENU on click', () => {
-      const toggleMenu = sinon.spy();
-      const burgerEl = mount(<Burger toggleMenu={toggleMenu} isMinimized={false} />);
-      burgerEl.simulate('click');
-      expect(toggleMenu.calledOnce).toBeTruthy();
-    });
-
-  });
-});
diff --git a/app/addons/fauxton/navigation/__tests__/login-logout-test.js b/app/addons/fauxton/navigation/__tests__/login-logout-test.js
deleted file mode 100644
index e84c2af..0000000
--- a/app/addons/fauxton/navigation/__tests__/login-logout-test.js
+++ /dev/null
@@ -1,63 +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.
-
-
-import React from 'react';
-import { mount } from 'enzyme';
-import NavBar from '../components/NavBar';
-
-describe('Navigation Bar', () => {
-  const defaultProps = {
-    activeLink: '',
-    isMinimized: false,
-    version: '42',
-    navLinks: [],
-    bottomNavLinks: [],
-    footerNavLinks: [],
-    isNavBarVisible: true,
-    isLoginSectionVisible: true,
-    isLoginVisibleInsteadOfLogout: true,
-    toggleNavbarMenu: () => {}
-  };
-  it('renders with login button when logged out', () => {
-    const navBar = mount(<NavBar {...defaultProps} />);
-
-    const button = navBar.find('[href="#/login"]');
-    expect(button.text()).toContain('Login');
-  });
-
-  it('renders with logout button when logged in', () => {
-    const props = {
-      username: 'Rocko',
-      isLoginVisibleInsteadOfLogout: false
-    };
-
-    const navBar = mount(<NavBar {...defaultProps} {...props} />);
-
-    const button = navBar.find('[href="#/logout"]');
-    expect(button.text()).toContain('Log Out');
-  });
-
-  it('Admin Party has no Logout button and no Login button', () => {
-    const props = {
-      username: 'Rocko',
-      isLoginSectionVisible: false,
-      isLoginVisibleInsteadOfLogout: false
-    };
-
-    const navBar = mount(<NavBar {...defaultProps} {...props} />);
-
-    expect(navBar.text()).not.toMatch(/Login/);
-    expect(navBar.text()).not.toMatch(/Log Out/);
-  });
-
-});
diff --git a/app/addons/fauxton/navigation/__tests__/navbar-test.js b/app/addons/fauxton/navigation/__tests__/navbar-test.js
deleted file mode 100644
index 8bb3978..0000000
--- a/app/addons/fauxton/navigation/__tests__/navbar-test.js
+++ /dev/null
@@ -1,70 +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.
-
-import {mount} from 'enzyme';
-import React from 'react';
-import NavBar from '../components/NavBar';
-
-describe('Navigation Bar', () => {
-  const defaultProps = {
-    isMinimized: true,
-    version: '',
-    username: '',
-    navLinks: [],
-    bottomNavLinks: [],
-    footerNavLinks: [],
-    isNavBarVisible: true,
-    isLoginSectionVisible: false,
-    isLoginVisibleInsteadOfLogout: true,
-    toggleNavbarMenu: () => {}
-  };
-
-  it('is displayed by default', () => {
-    const navbar = mount(<NavBar {...defaultProps}/>);
-    expect(navbar.find('.faux-navbar').length).toBe(1);
-  });
-
-  it('is dynamically displayed by isNavBarVisible', () => {
-    const navbar = mount(<NavBar
-      {...defaultProps}
-      isNavBarVisible={false}/>);
-
-    expect(navbar.find('.faux-navbar').length).toBe(0);
-
-    navbar.setProps({ isNavBarVisible: true });
-    navbar.update();
-    expect(navbar.find('.faux-navbar').length).toBe(1);
-  });
-
-  it('can display items with icon badge', () => {
-    const navLinks = [
-      {
-        href: "#/_with_badge",
-        title: "WithBadge",
-        icon: "fonticon-database",
-        badge: true
-      },
-      {
-        href: "#/_without_badge",
-        title: "WithoutBadge",
-        icon: "fonticon-database"
-      }
-    ];
-
-    const navbar = mount(<NavBar
-      {...defaultProps}
-      navLinks={navLinks}/>);
-    expect(navbar.find('div[data-nav-name="WithoutBadge"] i.faux-navbar__icon-badge').length).toBe(0);
-    expect(navbar.find('div[data-nav-name="WithBadge"] i.faux-navbar__icon-badge').length).toBe(1);
-  });
-
-});
diff --git a/app/addons/fauxton/navigation/__tests__/navigation-reducers.js b/app/addons/fauxton/navigation/__tests__/navigation-reducers.js
deleted file mode 100644
index f2f9f12..0000000
--- a/app/addons/fauxton/navigation/__tests__/navigation-reducers.js
+++ /dev/null
@@ -1,185 +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.
-
-import ActionTypes from '../actiontypes';
-import reducer from '../reducers';
-
-describe('NavBar Reducer', () => {
-
-  describe('add links', () => {
-
-    it('to nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'mylink'
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.navLinks[0].id).toMatch(action.link.id);
-    });
-
-    it('to top nav links', () => {
-      const action1 = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: { id: 'mylink1' }
-      };
-      const action2 = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: { id: 'mylink2', top: true }
-      };
-      let newState = reducer(undefined, action1);
-      newState = reducer(newState, action2);
-
-      expect(newState.navLinks[0].id).toMatch(action2.link.id);
-    });
-
-    it('to bottom nav', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'bottomNav',
-          bottomNav: true
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.bottomNavLinks[0].id).toMatch(action.link.id);
-    });
-
-    it('to top of bottom nav', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'bottomNav',
-          bottomNav: true,
-          top: true
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.bottomNavLinks[0].id).toMatch(action.link.id);
-    });
-
-    it('to footer nav', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'footerNav',
-          footerNav: true
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.footerNavLinks[0].id).toMatch(action.link.id);
-    });
-  });
-
-  describe('remove link', () => {
-    it('from nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link'
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.REMOVE_NAVBAR_LINK;
-      newState = reducer(newState, action);
-
-      expect(newState.navLinks.length).toBe(0);
-    });
-
-    it('remove link from list only when it exists', () => {
-      const addAction = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link1',
-          footerNav: true
-        }
-      };
-      let newState = reducer(undefined, addAction);
-      addAction.link = { id: 'remove_link2', footerNav: true };
-      newState = reducer(newState, addAction);
-      addAction.link = { id: 'remove_link3', footerNav: true };
-      newState = reducer(newState, addAction);
-      expect(newState.footerNavLinks.length).toBe(3);
-
-      const removeAction = {
-        type: ActionTypes.REMOVE_NAVBAR_LINK,
-        link: addAction.link
-      };
-      newState = reducer(newState, removeAction);
-      newState = reducer(newState, removeAction);
-      newState = reducer(newState, removeAction);
-      expect(newState.footerNavLinks.length).toBe(2);
-    });
-
-    it('from bottom nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link',
-          bottomNav: true
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.REMOVE_NAVBAR_LINK;
-      newState = reducer(newState, action);
-
-      expect(newState.bottomNavLinks.length).toBe(0);
-    });
-
-    it('from footer nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link',
-          footerNav: true
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.REMOVE_NAVBAR_LINK;
-      newState = reducer(newState, action);
-
-      expect(newState.footerNavLinks.length).toBe(0);
-    });
-  });
-
-  describe('update link', () => {
-    it('for nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'update-link',
-          title: 'first'
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.UPDATE_NAVBAR_LINK;
-      action.link.title = 'second';
-      newState = reducer(newState, action);
-
-      expect(newState.navLinks[0].title).toMatch('second');
-    });
-
-  });
-
-  describe('set version', () => {
-    it('stores version number', () => {
-      const action = {
-        type: ActionTypes.NAVBAR_SET_VERSION_INFO,
-        version: 1234
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.version).toBe(1234);
-    });
-
-  });
-});
diff --git a/app/addons/fauxton/navigation/__tests__/navlink-test.js b/app/addons/fauxton/navigation/__tests__/navlink-test.js
deleted file mode 100644
index 3c4a7c9..0000000
--- a/app/addons/fauxton/navigation/__tests__/navlink-test.js
+++ /dev/null
@@ -1,71 +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.
-import NavLink from "../components/NavLink";
-import React from "react";
-import ReactDOM from "react-dom";
-import {mount} from 'enzyme';
-
-describe('Navigation Bar', () => {
-  const dbLink = {
-    href: "#/_all_dbs",
-    title: "Databases",
-    icon: "fonticon-database",
-    className: 'databases'
-  };
-
-  describe('Active Link', () => {
-    it('matching title sets active css class', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.find('a.faux-navbar__link--active').length).toBe(1);
-    });
-
-    it('different title sets inactive css class', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Replication"} isMinimized={false} />);
-      expect(linkEl.find('a.faux-navbar__link--inactive').length).toBe(1);
-    });
-  });
-
-  describe('Minimized Link', () => {
-    it('shows title when not minimized', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.text()).toMatch("Databases");
-    });
-
-    it('does not show title when minimized', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Databases"} isMinimized={true} />);
-      expect(linkEl.find('span.faux-navbar__text').length).toBe(0);
-    });
-  });
-
-  describe('Link icon badge', () => {
-    const aLinkNoBadge = {
-      href: "#/_all_dbs",
-      title: "Databases",
-      icon: "fonticon-database"
-    };
-    it('is not displayed when not set', () => {
-      const linkEl = mount(<NavLink link={aLinkNoBadge} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.find('i.faux-navbar__icon-badge').length).toBe(0);
-    });
-
-    const aLinkWithBadge = {
-      href: "#/_all_dbs",
-      title: "Databases",
-      icon: "fonticon-database",
-      badge: true
-    };
-    it('is displayed when set to true', () => {
-      const linkEl = mount(<NavLink link={aLinkWithBadge} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.find('i.faux-navbar__icon-badge').length).toBe(1);
-    });
-  });
-});
diff --git a/app/addons/fauxton/navigation/actions.js b/app/addons/fauxton/navigation/actions.js
deleted file mode 100644
index ac26091..0000000
--- a/app/addons/fauxton/navigation/actions.js
+++ /dev/null
@@ -1,60 +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.
-
-import FauxtonAPI from '../../../core/api';
-import ActionTypes from './actiontypes';
-
-export const toggleNavbarMenu = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.TOGGLE_NAVBAR_MENU
-  });
-};
-
-export const addHeaderLink = (link) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.ADD_NAVBAR_LINK,
-    link: link
-  });
-};
-
-export const removeHeaderLink = (link) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.REMOVE_NAVBAR_LINK,
-    link: link
-  });
-};
-
-export const setNavbarVersionInfo = (versionInfo) => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.NAVBAR_SET_VERSION_INFO,
-    version: versionInfo
-  });
-};
-
-export const setNavbarActiveLink = (header) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.NAVBAR_ACTIVE_LINK,
-    name: header
-  });
-};
-
-export const showNavBar = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.NAVBAR_SHOW
-  });
-};
-
-export const hideNavBar = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.NAVBAR_HIDE
-  });
-};
diff --git a/app/addons/fauxton/navigation/actiontypes.js b/app/addons/fauxton/navigation/actiontypes.js
deleted file mode 100644
index e007062..0000000
--- a/app/addons/fauxton/navigation/actiontypes.js
+++ /dev/null
@@ -1,27 +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.
-
-export default {
-  ADD_NAVBAR_LINK: 'ADD_NAVBAR_LINK',
-  TOGGLE_NAVBAR_MENU: 'TOGGLE_NAVBAR_MENU',
-  UPDATE_NAVBAR_LINK: 'UPDATE_NAVBAR_LINK',
-  REMOVE_NAVBAR_LINK: 'REMOVE_NAVBAR_LINK',
-  HIDE_NAVBAR_LINK_BADGE: 'HIDE_NAVBAR_LINK_BADGE',
-  SHOW_NAVBAR_LINK_BADGE: 'SHOW_NAVBAR_LINK_BADGE',
-  NAVBAR_SET_VERSION_INFO: 'NAVBAR_SET_VERSION_INFO',
-  NAVBAR_ACTIVE_LINK: 'NAVBAR_ACTIVE_LINK',
-  NAVBAR_HIDE: 'NAVBAR_HIDE',
-  NAVBAR_SHOW: 'NAVBAR_SHOW',
-  NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION: 'NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION',
-  NAVBAR_SHOW_LOGIN_BUTTON: 'NAVBAR_SHOW_LOGIN_BUTTON',
-  NAVBAR_SHOW_LOGOUT_BUTTON: 'NAVBAR_SHOW_LOGOUT_BUTTON'
-};
diff --git a/app/addons/fauxton/navigation/components/Brand.js b/app/addons/fauxton/navigation/components/Brand.js
deleted file mode 100644
index fba6997..0000000
--- a/app/addons/fauxton/navigation/components/Brand.js
+++ /dev/null
@@ -1,38 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-
-const Brand = ({isMinimized}) => {
-
-  const burgerClasses = classNames(
-    'faux-navbar__brand-logo',
-    {'faux-navbar__brand-logo--wide':  !isMinimized},
-    {'faux-navbar__brand-logo--narrow': isMinimized}
-  );
-
-  return (
-    <div className="faux-navbar__brand">
-      <div className={burgerClasses}></div>
-    </div>
-  );
-};
-
-Brand.propTypes = {
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default Brand;
diff --git a/app/addons/fauxton/navigation/components/Burger.js b/app/addons/fauxton/navigation/components/Burger.js
deleted file mode 100644
index 07ee28d..0000000
--- a/app/addons/fauxton/navigation/components/Burger.js
+++ /dev/null
@@ -1,43 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-
-const Burger = ({toggleMenu, isMinimized}) => {
-
-  const burgerClasses = classNames(
-    'faux-navbar__burger',
-    {'faux-navbar--wide':  !isMinimized},
-    {'faux-navbar--narrow': isMinimized}
-  );
-
-  const icon = isMinimized ?
-    'icon-resize-horizontal' :
-    'icon-signin faux-navbar__burger__icon--flipped';
-
-  return (
-    <div aria-expanded={!isMinimized} aria-label="Toggle Navigation Menu" className={burgerClasses} onClick={toggleMenu} role="button" tabIndex="0">
-      <i aria-hidden="true" className={"faux-navbar__burger__icon " + icon}></i>
-    </div>
-  );
-};
-
-Burger.propTypes = {
-  toggleMenu: PropTypes.func.isRequired,
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default Burger;
diff --git a/app/addons/fauxton/navigation/components/Footer.js b/app/addons/fauxton/navigation/components/Footer.js
deleted file mode 100644
index 3655134..0000000
--- a/app/addons/fauxton/navigation/components/Footer.js
+++ /dev/null
@@ -1,35 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-const Footer = ({version}) => {
-
-  if (!version) { return null; }
-
-  return (
-    <div className="faux-navbar__version-footer">
-      Fauxton on &nbsp;
-      <a href="http://couchdb.apache.org/">Apache CouchDB</a>
-      <div>v. {version}</div>
-    </div>
-  );
-
-};
-
-Footer.propTypes = {
-  version: PropTypes.string
-};
-
-export default Footer;
diff --git a/app/addons/fauxton/navigation/components/LoginButton.js b/app/addons/fauxton/navigation/components/LoginButton.js
deleted file mode 100644
index de265ea..0000000
--- a/app/addons/fauxton/navigation/components/LoginButton.js
+++ /dev/null
@@ -1,44 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-
-const LoginButton = ({isMinimized}) => {
-
-  const containerClasses = classNames(
-    'faux-navbar__login__textcontainer',
-    {'faux-navbar__login__textcontainer--narrow':  isMinimized},
-    {'faux-navbar__login__textcontainer--wide': !isMinimized}
-  );
-
-  return (
-    <a className="faux-login__link" href="#/login">
-
-      <div className={containerClasses}>
-        <span className="faux-navbar__logout__text">
-          Login
-        </span>
-      </div>
-
-    </a>
-  );
-};
-
-LoginButton.propTypes = {
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default LoginButton;
diff --git a/app/addons/fauxton/navigation/components/LogoutButton.js b/app/addons/fauxton/navigation/components/LogoutButton.js
deleted file mode 100644
index 80427f6..0000000
--- a/app/addons/fauxton/navigation/components/LogoutButton.js
+++ /dev/null
@@ -1,49 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-import _ from 'lodash';
-
-const LogoutButton = ({username, isMinimized}) => {
-
-  const containerClasses = classNames(
-    'faux-navbar__logout__textcontainer',
-    {'faux-navbar__logout__textcontainer--narrow':  isMinimized},
-    {'faux-navbar__logout__textcontainer--wide': !isMinimized}
-  );
-
-  return (
-    <a className="faux-logout__link" href="#/logout">
-      <div className={containerClasses}>
-        <span className="faux-navbar__logout__text">
-          Log Out
-        </span>
-        &nbsp;
-        {isMinimized ?
-          null :
-          <span className="faux-navbar__logout__username">{_.escape(username)}</span>
-        }
-      </div>
-    </a>
-  );
-};
-
-LogoutButton.propTypes = {
-  username: PropTypes.string,
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default LogoutButton;
diff --git a/app/addons/fauxton/navigation/components/NavBar.js b/app/addons/fauxton/navigation/components/NavBar.js
deleted file mode 100644
index 89d0c48..0000000
--- a/app/addons/fauxton/navigation/components/NavBar.js
+++ /dev/null
@@ -1,113 +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.
-
-import classNames from 'classnames';
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import Footer from './Footer';
-import Burger from './Burger';
-import NavLink from './NavLink';
-import Brand from './Brand';
-import LogoutButton from './LogoutButton';
-import LoginButton from './LoginButton';
-
-class NavBar extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  createLinks (links) {
-    const { activeLink, isMinimized } = this.props;
-
-    return links.map((link, i) => {
-      return <NavLink
-        key={i}
-        link={link}
-        active={activeLink}
-        isMinimized={isMinimized} />;
-    });
-  }
-
-  render () {
-    const {
-      isMinimized,
-      version,
-      isLoginSectionVisible,
-      isLoginVisibleInsteadOfLogout,
-      activeLink,
-      username,
-      isNavBarVisible,
-      toggleNavbarMenu
-    } = this.props;
-
-    if (!isNavBarVisible) {
-      return null;
-    }
-
-    const navLinks = this.createLinks(this.props.navLinks);
-    const bottomNavLinks = this.createLinks(this.props.bottomNavLinks);
-    const footerNavLinks = this.createLinks(this.props.footerNavLinks);
-
-    const navClasses = classNames(
-      'faux-navbar',
-      {'faux-navbar--wide':  !isMinimized},
-      {'faux-navbar--narrow': isMinimized}
-    );
-
-    const loginSection = isLoginVisibleInsteadOfLogout ?
-      <LoginButton active={activeLink} isMinimized={isMinimized} /> :
-      <LogoutButton username={username} isMinimized={isMinimized} />;
-
-    return (
-      <div className={navClasses}>
-        <nav>
-          <div className="faux-navbar__linkcontainer">
-            <Burger isMinimized={isMinimized} toggleMenu={toggleNavbarMenu}/>
-            <div className="faux-navbar__links">
-              {navLinks}
-              {bottomNavLinks}
-            </div>
-
-            <div className="faux-navbar__footer">
-              <Brand isMinimized={isMinimized} />
-
-              <div>
-                {footerNavLinks}
-              </div>
-
-              <Footer version={version}/>
-
-              {isLoginSectionVisible ? loginSection : null}
-            </div>
-          </div>
-        </nav>
-      </div>
-    );
-  }
-}
-
-NavBar.propTypes = {
-  activeLink: PropTypes.string,
-  isMinimized: PropTypes.bool.isRequired,
-  version: PropTypes.string,
-  username: PropTypes.string,
-  navLinks: PropTypes.array,
-  bottomNavLinks: PropTypes.array,
-  footerNavLinks: PropTypes.array,
-  isNavBarVisible: PropTypes.bool,
-  isLoginSectionVisible: PropTypes.bool.isRequired,
-  isLoginVisibleInsteadOfLogout: PropTypes.bool.isRequired,
-  toggleNavbarMenu: PropTypes.func.isRequired
-};
-
-export default NavBar;
diff --git a/app/addons/fauxton/navigation/components/NavLink.js b/app/addons/fauxton/navigation/components/NavLink.js
deleted file mode 100644
index 2afc4ea..0000000
--- a/app/addons/fauxton/navigation/components/NavLink.js
+++ /dev/null
@@ -1,62 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import classNames from 'classnames';
-
-
-const NavLink = ({link, active, isMinimized}) => {
-
-  const isActive = active === link.title;
-  const linkClass = classNames(
-    'faux-navbar__link',
-    {'faux-navbar__link--active':  isActive},
-    {'faux-navbar__link--inactive': !isActive},
-    {'faux-navbar--wide':  !isMinimized},
-    {'faux-navbar--narrow': isMinimized}
-  );
-
-  const linkTitle = isMinimized ?
-    null :
-    <span className="faux-navbar__text">{link.title}</span>;
-
-  let linkIcon = null;
-  if (link.icon) {
-    linkIcon = (
-      <i aria-hidden="true" className={classNames(
-        link.icon,
-        'fonticon faux-navbar__icon',
-        {'faux-navbar__icon-badge': link.badge})}>
-      </i>
-    );
-  }
-
-  return (
-    <a aria-current={isActive ? "page" : null } aria-label={link.title} className={linkClass} href={link.href} target={link.target ? '_blank' : null} data-bypass={link.target ? 'true' : null}>
-      <div data-nav-name={link.title} className="faux-navbar__itemarea">
-        {linkIcon}
-        {linkTitle}
-      </div>
-    </a>
-  );
-};
-
-NavLink.propTypes = {
-  link: PropTypes.object.isRequired,
-  active: PropTypes.string,
-  isMinimized: PropTypes.bool.isRequired,
-};
-
-
-export default NavLink;
diff --git a/app/addons/fauxton/navigation/container/NavBar.js b/app/addons/fauxton/navigation/container/NavBar.js
deleted file mode 100644
index 2703b79..0000000
--- a/app/addons/fauxton/navigation/container/NavBar.js
+++ /dev/null
@@ -1,47 +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.
-
-import { connect } from 'react-redux';
-import FauxtonAPI from '../../../../core/api';
-import NavBar from '../components/NavBar';
-import * as Actions from '../actions';
-
-const mapStateToProps = ({ navigation }) => {
-  const user = FauxtonAPI.session.user();
-  return {
-    navLinks: navigation.navLinks,
-    bottomNavLinks: navigation.bottomNavLinks,
-    footerNavLinks: navigation.footerNavLinks,
-    activeLink: navigation.activeLink,
-    version: navigation.version,
-    isMinimized: navigation.isMinimized,
-    isNavBarVisible: navigation.navBarVisible,
-    isLoginSectionVisible: navigation.loginSectionVisible,
-    isLoginVisibleInsteadOfLogout: navigation.loginVisibleInsteadOfLogout,
-    username: (user && user.name) ? user.name : ''
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    toggleNavbarMenu: () => {
-      dispatch(Actions.toggleNavbarMenu());
-    }
-  };
-};
-
-const NavBarContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(NavBar);
-
-export default NavBarContainer;
diff --git a/app/addons/fauxton/navigation/reducers.js b/app/addons/fauxton/navigation/reducers.js
deleted file mode 100644
index 6af5d2c..0000000
--- a/app/addons/fauxton/navigation/reducers.js
+++ /dev/null
@@ -1,209 +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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  isMinimized: true,
-  activeLink: null,
-  version: null,
-  navLinks: [],
-  footerNavLinks: [],
-  bottomNavLinks: [],
-  navBarVisible: true,
-  loginSectionVisible: false,
-  loginVisibleInsteadOfLogout: true
-};
-
-function addLink(state, link) {
-  const newState = { ...state };
-
-  if (link.top && !link.bottomNav) {
-    newState.navLinks = [].concat(newState.navLinks);
-    newState.navLinks.unshift(link);
-    return newState;
-  }
-  if (link.top && link.bottomNav) {
-    newState.bottomNavLinks = [].concat(newState.bottomNavLinks);
-    newState.bottomNavLinks.unshift(link);
-    return newState;
-  }
-  if (link.bottomNav) {
-    newState.bottomNavLinks = [].concat(newState.bottomNavLinks);
-    newState.bottomNavLinks.push(link);
-    return newState;
-  }
-  if (link.footerNav) {
-    newState.footerNavLinks = [].concat(newState.footerNavLinks);
-    newState.footerNavLinks.push(link);
-    return newState;
-  }
-
-  newState.navLinks = [].concat(newState.navLinks);
-  newState.navLinks.push(link);
-  return newState;
-}
-
-function removeLink (state, removeLink) {
-  const {links, sectionName} = getLinkSection(state, removeLink);
-
-  // create new array without the link to remove
-  const newLinks = links.filter(link => link.id !== removeLink.id);
-
-  if (newLinks.length === links.length) {
-    return state;
-  }
-
-  const newState = { ...state };
-  newState[sectionName] = newLinks;
-  return newState;
-}
-
-function updateLink (state, link) {
-  const {links, sectionName} = getLinkSection(state, link);
-
-  // create new array and updates the link when found
-  let found = false;
-  const newLinks = links.map(el => {
-    if (el.id === link.id) {
-      found = true;
-      return {
-        ...el,
-        title: link.title,
-        href: link.href
-      };
-    }
-    return el;
-  });
-
-  if (!found) {
-    return state;
-  }
-
-  const newState = { ...state };
-  newState[sectionName] = newLinks;
-  return newState;
-}
-
-function setLinkBadgeVisible (state, link, visible) {
-  const {links, sectionName} = getLinkSection(state, link);
-
-  let found = false;
-  const newLinks = links.map(el => {
-    if (el.title === link.title) {
-      found = true;
-      return {
-        ...el,
-        badge: visible
-      };
-    }
-    return el;
-  });
-
-  if (!found) {
-    return state;
-  }
-
-  const newState = { ...state };
-  newState[sectionName] = newLinks;
-  return newState;
-}
-
-function getLinkSection (state, link) {
-  let links = state.navLinks;
-  let sectionName = 'navLinks';
-
-  if (link.bottomNav) {
-    links = state.bottomNavLinks;
-    sectionName = 'bottomNavLinks';
-  }
-
-  if (link.footerNav) {
-    links = state.footerNavLinks;
-    sectionName = 'footerNavLinks';
-  }
-
-  return { links, sectionName };
-}
-
-export default function navigation(state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.ADD_NAVBAR_LINK:
-      return addLink(state, action.link);
-
-    case ActionTypes.TOGGLE_NAVBAR_MENU:
-      return {
-        ...state,
-        isMinimized: !state.isMinimized
-      };
-
-    case ActionTypes.UPDATE_NAVBAR_LINK:
-      return updateLink(state, action.link);
-
-    case ActionTypes.REMOVE_NAVBAR_LINK:
-      return removeLink(state, action.link);
-
-    case ActionTypes.SHOW_NAVBAR_LINK_BADGE:
-      return setLinkBadgeVisible(state, action.link, true);
-
-    case ActionTypes.HIDE_NAVBAR_LINK_BADGE:
-      return setLinkBadgeVisible(state, action.link, false);
-
-    case ActionTypes.NAVBAR_SET_VERSION_INFO:
-      return {
-        ...state,
-        version: action.version
-      };
-
-    case ActionTypes.NAVBAR_ACTIVE_LINK:
-      return {
-        ...state,
-        activeLink: action.name
-      };
-
-    case ActionTypes.NAVBAR_HIDE:
-      return {
-        ...state,
-        navBarVisible: false
-      };
-
-    case ActionTypes.NAVBAR_SHOW:
-      return {
-        ...state,
-        navBarVisible: true
-      };
-
-    case ActionTypes.NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION:
-      return {
-        ...state,
-        loginSectionVisible: action.visible
-      };
-
-    case ActionTypes.NAVBAR_SHOW_LOGIN_BUTTON:
-      return {
-        ...state,
-        loginSectionVisible: true,
-        loginVisibleInsteadOfLogout: true
-      };
-
-    case ActionTypes.NAVBAR_SHOW_LOGOUT_BUTTON:
-      return {
-        ...state,
-        loginSectionVisible: true,
-        loginVisibleInsteadOfLogout: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/fauxton/notifications/__tests__/components.test.js b/app/addons/fauxton/notifications/__tests__/components.test.js
deleted file mode 100644
index 34c3248..0000000
--- a/app/addons/fauxton/notifications/__tests__/components.test.js
+++ /dev/null
@@ -1,123 +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.
-
-import React from "react";
-import moment from "moment";
-import { mount } from 'enzyme';
-import sinon from 'sinon';
-import NotificationCenterPanel from '../components/NotificationCenterPanel';
-import NotificationPanelRow from '../components/NotificationPanelRow';
-
-describe('NotificationPanelRow', () => {
-  const notifications = {
-    success: {
-      toastId: 1,
-      type: 'success',
-      msg: 'Success!',
-      cleanMsg: 'Success!',
-      time: moment()
-    },
-    info: {
-      toastId: 2,
-      type: 'info',
-      msg: 'Error!',
-      cleanMsg: 'Error!',
-      time: moment()
-    },
-    error: {
-      toastId: 3,
-      type: 'error',
-      msg: 'Error!',
-      cleanMsg: 'Error!',
-      time: moment()
-    }
-  };
-
-  const style = {
-    opacity: 1,
-    height: 64
-  };
-
-  const defaultProps = {
-    style,
-    isVisible: true,
-    filter: 'all',
-    clearSingleNotification: () => {}
-  };
-
-  it('shows all notification types when "all" filter applied', () => {
-    const row1 = mount(<NotificationPanelRow
-      {...defaultProps}
-      item={notifications.success}
-    />);
-
-    expect(row1.find('li').prop('aria-hidden')).toBeFalsy();
-
-    const row2 = mount(<NotificationPanelRow
-      {...defaultProps}
-      item={notifications.error}
-    />
-    );
-    expect(row2.find('li').prop('aria-hidden')).toBeFalsy();
-
-    const row3 = mount(<NotificationPanelRow
-      {...defaultProps}
-      item={notifications.info} />
-    );
-    expect(row3.find('li').prop('aria-hidden')).toBeFalsy();
-  });
-
-  it('hides notification when filter doesn\'t match', () => {
-    var rowEl = mount(
-      <NotificationPanelRow
-        {...defaultProps}
-        filter="success"
-        item={notifications.info}
-      />);
-    expect(rowEl.find('li').prop('aria-hidden')).toBeTruthy();
-  });
-
-  it('shows notification when filter exact match', () => {
-    const rowEl = mount(
-      <NotificationPanelRow
-        {...defaultProps}
-        filter="info"
-        item={notifications.info}
-      />);
-    expect(rowEl.find('li').prop('aria-hidden')).toBeFalsy();
-  });
-});
-
-
-describe('NotificationCenterPanel', () => {
-
-  const defaultProps = {
-    hideNotificationCenter: () => {},
-    selectNotificationFilter: () => {},
-    clearAllNotifications: () => {},
-    clearSingleNotification: () => {},
-    isVisible: true,
-    style:{ opacity: 1 }
-  };
-
-  it('clear all notifications', () => {
-    const stub = sinon.stub();
-    const panelEl = mount(<NotificationCenterPanel
-      {...defaultProps}
-      notifications={[]}
-      clearAllNotifications={stub}
-      filter={'all'} />);
-
-    panelEl.find('footer input').simulate('click');
-    sinon.assert.calledOnce(stub);
-  });
-});
diff --git a/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js b/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
deleted file mode 100644
index 0ce231d..0000000
--- a/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
+++ /dev/null
@@ -1,61 +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.
-import { mount } from 'enzyme';
-import React from 'react';
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-import PermanentNotification from '../components/PermanentNotification';
-import PermanentNotificationContainer from '../components/PermanentNotificationContainer';
-import ActionTypes from '../actiontypes';
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import notificationsReducer from '../reducers';
-
-describe('PermanentNotification', () => {
-
-  it('doesn\'t render content by default', () => {
-    const wrapper = mount(<PermanentNotification visible={false}/>);
-    expect(wrapper.find('.perma-warning__content').length).toBe(0);
-  });
-});
-
-describe('PermanentNotificationContainer', () => {
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({ notifications: notificationsReducer }),
-    applyMiddleware(...middlewares)
-  );
-
-  it('shows/hides content when the display flag is switched', () => {
-    const wrapper = mount(
-      <Provider store={store}>
-        <PermanentNotificationContainer />
-      </Provider>
-    );
-    store.dispatch({
-      type: ActionTypes.SHOW_PERMANENT_NOTIFICATION,
-      options: {
-        msg: 'Hello World!'
-      }
-    });
-
-    wrapper.update();
-    expect(wrapper.find('.perma-warning__content').html()).toMatch(/Hello World!/);
-
-    store.dispatch({
-      type: ActionTypes.HIDE_PERMANENT_NOTIFICATION
-    });
-
-    wrapper.update();
-    expect(wrapper.find('.perma-warning__content').length).toBe(0);
-  });
-});
-
diff --git a/app/addons/fauxton/notifications/__tests__/reducers.test.js b/app/addons/fauxton/notifications/__tests__/reducers.test.js
deleted file mode 100644
index 66da88b..0000000
--- a/app/addons/fauxton/notifications/__tests__/reducers.test.js
+++ /dev/null
@@ -1,131 +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.
-
-import reducer from '../reducers';
-import ActionTypes from '../actiontypes';
-
-describe('Notifications Reducer', () => {
-
-  it('sets reasonable defaults', () => {
-    const newState = reducer(undefined, { type: 'DO_NOTHING'});
-    expect(newState.notifications.length).toBe(0);
-    expect(newState.notificationCenterVisible).toBe(false);
-    expect(newState.selectedNotificationFilter).toBe('all');
-  });
-
-  it('confirm only known notification types get added', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: 'Hey there!', type: 'info' }
-      }
-    };
-
-    let newState = reducer(undefined, action);
-    expect(newState.notifications.length).toBe(1);
-
-    action.options.info.type = 'success';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(2);
-
-    action.options.info.type = 'error';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(3);
-
-    action.options.info.type = 'rhubarb';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(3);
-  });
-
-  it('notifications should be escaped by default', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: '<script>window.whatever=1;</script>', type: 'info' }
-      }
-    };
-    let newState = reducer(undefined, action);
-    expect(newState.notifications[0].escape).toBe(true);
-  });
-
-  it('clears a specific notification', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: 'one', type: 'success' }
-      }
-    };
-
-    let newState = reducer(undefined, action);
-    action.options.info.msg = 'two';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'three';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'four';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(4);
-
-    const idToRemove = newState.notifications[1].toastId;
-    const msgToRemove = newState.notifications[1].msg;
-    newState = reducer(newState, {
-      type: ActionTypes.CLEAR_SINGLE_NOTIFICATION,
-      options: { toastId: idToRemove }
-    });
-    expect(newState.notifications.length).toBe(3);
-    const item = newState.notifications.find(el => {
-      return el.msg === msgToRemove;
-    });
-    expect(item).not.toBeDefined();
-  });
-
-  it('setNotificationFilter only sets for known notification types', () => {
-    const action = {
-      type: ActionTypes.SELECT_NOTIFICATION_FILTER,
-      options: { filter: 'all' }
-    };
-    let newState = reducer(undefined, { type: 'DO_NOTHING' });
-    const validFilters = ['all', 'success', 'error', 'info'];
-    validFilters.forEach(filter => {
-      action.options.filter = filter;
-      newState = reducer(newState, action);
-      expect(newState.selectedNotificationFilter).toBe(filter);
-    });
-
-    action.options.filter = 'invalid_filter';
-    newState = reducer(newState, action);
-    expect(newState.selectedNotificationFilter).toBe(validFilters[validFilters.length - 1]);
-  });
-
-  it('clear all notifications', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: 'one', type: 'success' }
-      }
-    };
-
-    let newState = reducer(undefined, action);
-    action.options.info.msg = 'two';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'three';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'four';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(4);
-
-    newState = reducer(newState, {
-      type: ActionTypes.CLEAR_ALL_NOTIFICATIONS
-    });
-    expect(newState.notifications.length).toBe(0);
-  });
-
-});
diff --git a/app/addons/fauxton/notifications/actions.js b/app/addons/fauxton/notifications/actions.js
deleted file mode 100644
index 8ef9621..0000000
--- a/app/addons/fauxton/notifications/actions.js
+++ /dev/null
@@ -1,52 +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.
-
-import ActionTypes from './actiontypes';
-
-export const addNotification = (notificationInfo) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.ADD_NOTIFICATION,
-    options: {
-      info: notificationInfo
-    }
-  });
-};
-
-export const showNotificationCenter = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_NOTIFICATION_CENTER });
-};
-
-export const hideNotificationCenter = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_NOTIFICATION_CENTER });
-};
-
-export const clearAllNotifications = () => (dispatch) => {
-  dispatch({ type: ActionTypes.CLEAR_ALL_NOTIFICATIONS });
-};
-
-export const clearSingleNotification = (toastId) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.CLEAR_SINGLE_NOTIFICATION,
-    options: {
-      toastId: toastId
-    }
-  });
-};
-
-export const selectNotificationFilter = (filter) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SELECT_NOTIFICATION_FILTER,
-    options: {
-      filter: filter
-    }
-  });
-};
diff --git a/app/addons/fauxton/notifications/actiontypes.js b/app/addons/fauxton/notifications/actiontypes.js
deleted file mode 100644
index 654925b..0000000
--- a/app/addons/fauxton/notifications/actiontypes.js
+++ /dev/null
@@ -1,22 +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.
-
-export default {
-  ADD_NOTIFICATION: 'ADD_NOTIFICATION',
-  SHOW_NOTIFICATION_CENTER: 'SHOW_NOTIFICATION_CENTER',
-  HIDE_NOTIFICATION_CENTER: 'HIDE_NOTIFICATION_CENTER',
-  CLEAR_SINGLE_NOTIFICATION: 'CLEAR_SINGLE_NOTIFICATION',
-  CLEAR_ALL_NOTIFICATIONS: 'CLEAR_ALL_NOTIFICATIONS',
-  SELECT_NOTIFICATION_FILTER: 'SELECT_NOTIFICATION_FILTER',
-  SHOW_PERMANENT_NOTIFICATION: 'SHOW_PERMANENT_NOTIFICATION',
-  HIDE_PERMANENT_NOTIFICATION: 'HIDE_PERMANENT_NOTIFICATION'
-};
diff --git a/app/addons/fauxton/notifications/components/NotificationCenterButton.js b/app/addons/fauxton/notifications/components/NotificationCenterButton.js
deleted file mode 100644
index cf458a4..0000000
--- a/app/addons/fauxton/notifications/components/NotificationCenterButton.js
+++ /dev/null
@@ -1,55 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { connect } from 'react-redux';
-import { showNotificationCenter } from '../actions';
-
-class ShowPanelButton extends React.Component {
-
-  static propTypes = {
-    onClick: PropTypes.func.isRequired,
-    visible: PropTypes.bool.isRequired
-  };
-
-  render() {
-    const classes = 'fonticon fonticon-bell' + ((!this.props.visible) ? ' hide' : '');
-    return (
-      <div className={classes} onClick={this.props.onClick}></div>
-    );
-  }
-}
-
-const mapStateToProps = ({ notifications }) => {
-  return {
-    visible: !notifications.notificationCenterVisible
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    onClick: () => {
-      dispatch(showNotificationCenter());
-    }
-  };
-};
-
-const NotificationCenterButton = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ShowPanelButton);
-
-export default NotificationCenterButton;
-
-
-
diff --git a/app/addons/fauxton/notifications/components/NotificationCenterPanel.js b/app/addons/fauxton/notifications/components/NotificationCenterPanel.js
deleted file mode 100644
index 9657035..0000000
--- a/app/addons/fauxton/notifications/components/NotificationCenterPanel.js
+++ /dev/null
@@ -1,145 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import {TransitionMotion, spring, presets} from 'react-motion';
-import NotificationPanelRow from './NotificationPanelRow';
-
-export default class NotificationCenterPanel extends React.Component {
-  static propTypes = {
-    isVisible: PropTypes.bool.isRequired,
-    filter: PropTypes.string.isRequired,
-    notifications: PropTypes.array.isRequired,
-    hideNotificationCenter: PropTypes.func.isRequired,
-    selectNotificationFilter: PropTypes.func.isRequired,
-    clearAllNotifications: PropTypes.func.isRequired,
-    clearSingleNotification: PropTypes.func.isRequired
-  };
-
-  getNotifications = (items) => {
-    let notifications;
-    if (!items.length && !this.props.notifications.length) {
-      notifications = <li className="no-notifications">
-          No notifications.
-      </li>;
-    } else {
-      notifications = items
-        .map(({key, data: notification, style}) => {
-          return (
-            <NotificationPanelRow
-              item={notification}
-              filter={this.props.filter}
-              clearSingleNotification={this.props.clearSingleNotification}
-              key={key}
-              style={style}
-            />
-          );
-        });
-    }
-    return (
-      <ul className="notification-list">
-        {notifications}
-      </ul>
-    );
-  };
-
-  getStyles = (prevItems = []) => {
-    const styles = this.props.notifications
-      .map(notification => {
-        let item = prevItems.find(style => style.key === (notification.toastId.toString()));
-        let style = !item ? {opacity: 0, height: 0} : false;
-
-        if (!style && (notification.type === this.props.filter || this.props.filter === 'all')) {
-          style = {
-            opacity: spring(1, presets.stiff),
-            height: spring(61, presets.stiff)
-          };
-        } else if (notification.type !== this.props.filter) {
-          style = {
-            opacity: spring(0, presets.stiff),
-            height: spring(0, presets.stiff)
-          };
-        }
-
-        return {
-          key: notification.toastId.toString(),
-          style,
-          data: notification
-        };
-      });
-    return styles;
-  };
-
-  render() {
-    if (!this.props.isVisible && this.props.style.x === 0) {
-      // panelClasses += ' visible';
-      return null;
-    }
-
-    const filterClasses = {
-      all: 'flex-body',
-      success: 'flex-body',
-      error: 'flex-body',
-      info: 'flex-body'
-    };
-    filterClasses[this.props.filter] += ' selected';
-
-    const maskClasses = `notification-page-mask ${((this.props.isVisible) ? ' visible' : '')}`;
-    const panelClasses = 'notification-center-panel flex-layout flex-col visible';
-    return (
-      <div id="notification-center">
-        <div className={panelClasses} style={{transform: `translate(${this.props.style.x}px)`}}>
-
-          <header className="flex-layout flex-row">
-            <span className="fonticon fonticon-bell" />
-            <h1 className="flex-body">Notifications</h1>
-            <button aria-label="Hide Notifications Center" type="button" onClick={this.props.hideNotificationCenter}>×</button>
-          </header>
-
-          <ul aria-label="Filters" className="notification-filter flex-layout flex-row">
-            <li className={filterClasses.all} title="All notifications" data-filter="all"
-              onClick={() => this.props.selectNotificationFilter('all')}>All</li>
-            <li className={filterClasses.success} title="Success notifications" data-filter="success"
-              onClick={() => this.props.selectNotificationFilter('success')}>
-              <span className="fonticon fonticon-ok-circled" />
-            </li>
-            <li className={filterClasses.error} title="Error notifications" data-filter="error"
-              onClick={() => this.props.selectNotificationFilter('error')}>
-              <span className="fonticon fonticon-attention-circled" />
-            </li>
-            <li className={filterClasses.info} title="Info notifications" data-filter="info"
-              onClick={() => this.props.selectNotificationFilter('info')}>
-              <span className="fonticon fonticon-info-circled" />
-            </li>
-          </ul>
-
-          <div className="flex-body">
-            <TransitionMotion styles={this.getStyles}>
-              {this.getNotifications}
-            </TransitionMotion>
-          </div>
-
-          <footer>
-            <input
-              type="button"
-              value="Clear All"
-              className="btn btn-small btn-secondary"
-              onClick={this.props.clearAllNotifications} />
-          </footer>
-        </div>
-
-        <div className={maskClasses} onClick={this.props.hideNotificationCenter}></div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/NotificationPanelContainer.js b/app/addons/fauxton/notifications/components/NotificationPanelContainer.js
deleted file mode 100644
index a4d37e2..0000000
--- a/app/addons/fauxton/notifications/components/NotificationPanelContainer.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { connect } from 'react-redux';
-import * as Actions from '../actions';
-import NotificationPanelWithTransition from './NotificationPanelWithTransition';
-
-const mapStateToProps = ({ notifications }) => {
-  return {
-    isVisible: notifications.notificationCenterVisible,
-    filter: notifications.selectedNotificationFilter,
-    notifications: notifications.notifications
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    hideNotificationCenter: () => {
-      dispatch(Actions.hideNotificationCenter());
-    },
-    selectNotificationFilter: (filter) => {
-      dispatch(Actions.selectNotificationFilter(filter));
-    },
-    clearAllNotifications: () => {
-      dispatch(Actions.clearAllNotifications());
-    },
-    clearSingleNotification: (toastId) => {
-      dispatch(Actions.clearSingleNotification(toastId));
-    }
-  };
-};
-
-
-const NotificationPanelContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(NotificationPanelWithTransition);
-
-export default NotificationPanelContainer;
diff --git a/app/addons/fauxton/notifications/components/NotificationPanelRow.js b/app/addons/fauxton/notifications/components/NotificationPanelRow.js
deleted file mode 100644
index 8ece5bb..0000000
--- a/app/addons/fauxton/notifications/components/NotificationPanelRow.js
+++ /dev/null
@@ -1,66 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import uuid from 'uuid';
-import Components from '../../../components/react-components';
-const {Copy} = Components;
-
-export default class NotificationPanelRow extends React.Component {
-  static propTypes = {
-    item: PropTypes.object.isRequired,
-    filter: PropTypes.string.isRequired,
-    clearSingleNotification: PropTypes.func.isRequired
-  };
-
-  clearNotification = () => {
-    const {toastId} = this.props.item;
-    this.props.clearSingleNotification(toastId);
-  };
-
-  render() {
-    const iconMap = {
-      success: 'fonticon-ok-circled',
-      error: 'fonticon-attention-circled',
-      info: 'fonticon-info-circled'
-    };
-
-    const timeElapsed = this.props.item.time.fromNow();
-
-    // we can safely do this because the store ensures all notifications are of known types
-    const rowIconClasses = 'fonticon ' + iconMap[this.props.item.type];
-    const hidden = (this.props.filter === 'all' || this.props.filter === this.props.item.type) ? false : true;
-    const {style} = this.props;
-    const {opacity, height} = style;
-    if (opacity === 0 && height === 0) {
-      return null;
-    }
-    // N.B. wrapper <div> needed to ensure smooth hide/show transitions
-    return (
-      <li style={{opactiy: opacity, height: height + 'px', borderBottomColor: `rgba(34, 34, 34, ${opacity})`}} aria-hidden={hidden}>
-        <div className="flex-layout flex-row">
-          <span className={rowIconClasses}></span>
-          <div className="flex-body">
-            <p>{this.props.item.cleanMsg}</p>
-            <div className="notification-actions">
-              <span className="time-elapsed">{timeElapsed}</span>
-              <span className="divider">|</span>
-              <Copy uniqueKey={uuid.v4()} text={this.props.item.cleanMsg} displayType="text" />
-            </div>
-          </div>
-          <button type="button" onClick={this.clearNotification}>×</button>
-        </div>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/NotificationPanelWithTransition.js b/app/addons/fauxton/notifications/components/NotificationPanelWithTransition.js
deleted file mode 100644
index f744283..0000000
--- a/app/addons/fauxton/notifications/components/NotificationPanelWithTransition.js
+++ /dev/null
@@ -1,64 +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.
-
-import React from 'react';
-import {TransitionMotion, spring} from 'react-motion';
-// import GlobalNotifications from './GlobalNotifications';
-import NotificationCenterPanel from './NotificationCenterPanel';
-
-// The one-stop-shop for Fauxton notifications. This controller handler the header notifications and the rightmost
-// notification center panel
-export default class NotificationPanelWithTransition extends React.Component {
-
-  getStyles = () => {
-    let item = {
-      key: '1',
-      style: {
-        x: 320
-      }
-    };
-
-    if (this.props.isVisible) {
-      item.style = {
-        x: spring(0)
-      };
-    } else {
-      item.style = {
-        x: spring(320)
-      };
-    }
-    return [item];
-  };
-
-  getNotificationCenterPanel = (items) => {
-    const panel = items.map(({style}) => {
-      return <NotificationCenterPanel
-        key={'1'}
-        style={style}
-        {...this.props} />;
-    });
-    return (
-      <aside aria-label="Notifications">
-        {panel}
-      </aside>
-    );
-  };
-
-  render() {
-    return (
-      <TransitionMotion
-        styles={this.getStyles}>
-        {this.getNotificationCenterPanel}
-      </TransitionMotion>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/PermanentNotification.js b/app/addons/fauxton/notifications/components/PermanentNotification.js
deleted file mode 100644
index ff5c396..0000000
--- a/app/addons/fauxton/notifications/components/PermanentNotification.js
+++ /dev/null
@@ -1,52 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class PermanentNotification extends React.Component {
-
-  static defaultProps = {
-    visible: false
-  };
-
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    message: PropTypes.string
-  };
-
-  constructor (props) {
-    super(props);
-  }
-
-  // many messages contain HTML, hence the need for dangerouslySetInnerHTML
-  getMsg () {
-    return {__html: this.props.message};
-  }
-
-  getContent () {
-    if (!this.props.visible || !this.props.message) {
-      return null;
-    }
-    return (
-      <p className="perma-warning__content" dangerouslySetInnerHTML={this.getMsg()}></p>
-    );
-  }
-
-  render () {
-    return (
-      <div id="perma-warning">
-        {this.getContent()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/PermanentNotificationContainer.js b/app/addons/fauxton/notifications/components/PermanentNotificationContainer.js
deleted file mode 100644
index 123d6db..0000000
--- a/app/addons/fauxton/notifications/components/PermanentNotificationContainer.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { connect } from 'react-redux';
-import PermanentNotification from './PermanentNotification';
-
-const mapStateToProps = ({ notifications }) => {
-  return {
-    visible: notifications.permanentNotificationVisible,
-    message: notifications.permanentNotificationMessage
-  };
-};
-
-const PermanentNotificationContainer = connect(
-  mapStateToProps
-)(PermanentNotification);
-
-export default PermanentNotificationContainer;
diff --git a/app/addons/fauxton/notifications/reducers.js b/app/addons/fauxton/notifications/reducers.js
deleted file mode 100644
index c2b4f77..0000000
--- a/app/addons/fauxton/notifications/reducers.js
+++ /dev/null
@@ -1,143 +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.
-
-import React from 'react';
-import moment from 'moment';
-import app from '../../../app';
-import ActionTypes from './actiontypes';
-import {toast} from "react-toastify";
-
-const initialState = {
-  notifications: [],
-  notificationCenterVisible: false,
-  selectedNotificationFilter: 'all',
-  permanentNotificationVisible: false,
-  permanentNotificationMessage: ''
-};
-
-let counter = 0;
-const validNotificationTypes = ['success', 'error', 'info'];
-const validFilters = ['all', 'success', 'error', 'info'];
-
-function addNotification ({ notifications }, info) {
-  const newNotifications = notifications.slice();
-  info = { ...info };
-  info.toastId = ++counter;
-  info.time = moment();
-  info.cleanMsg = app.utils.stripHTML(info.msg);
-
-  if (info.escape !== true && info.escape !== false) {
-    info.escape = true;
-  }
-
-  info.htmlMsg = {
-    __html: (info.escape ? _.escape(info.cleanMsg) : info.cleanMsg)
-  };
-
-  // clear: true causes all visible messages to be hidden
-  if (info.clear) {
-    const idsToClear = _.map(notifications, 'toastId');
-
-    // Add some delay to prevent weird flickering
-    setTimeout(() => {
-      idsToClear.forEach(id => toast.dismiss(id));
-    }, 800);
-  }
-
-  newNotifications.unshift(info);
-
-  toast(<span dangerouslySetInnerHTML={info.htmlMsg}/>, info);
-
-  return newNotifications;
-}
-
-function clearNotification({ notifications }, toastId) {
-  const idx = notifications.findIndex(el => {
-    return el.toastId === toastId;
-  });
-  if (idx === -1) {
-    // no changes
-    return notifications;
-  }
-
-  const newNotifications = [].concat(notifications);
-  newNotifications.splice(idx, 1);
-
-  toast.dismiss(toastId);
-
-  return newNotifications;
-}
-
-export default function notifications(state = initialState, action) {
-  const { options, type } = action;
-  switch (type) {
-
-    case ActionTypes.ADD_NOTIFICATION:
-      if (!validNotificationTypes.includes(options.info.type)) {
-        return state;
-      }
-      return {
-        ...state,
-        notifications: addNotification(state, options.info)
-      };
-
-    case ActionTypes.CLEAR_ALL_NOTIFICATIONS:
-      toast.dismiss();
-      return {
-        ...state,
-        notifications: []
-      };
-
-    case ActionTypes.CLEAR_SINGLE_NOTIFICATION:
-      return {
-        ...state,
-        notifications: clearNotification(state, options.toastId)
-      };
-
-    case ActionTypes.SHOW_NOTIFICATION_CENTER:
-      return {
-        ...state,
-        notificationCenterVisible: true
-      };
-
-    case ActionTypes.HIDE_NOTIFICATION_CENTER:
-      return {
-        ...state,
-        notificationCenterVisible: false
-      };
-
-    case ActionTypes.SELECT_NOTIFICATION_FILTER:
-      if (!validFilters.includes(options.filter)) {
-        return state;
-      }
-      return {
-        ...state,
-        selectedNotificationFilter: options.filter
-      };
-
-    case ActionTypes.SHOW_PERMANENT_NOTIFICATION:
-      return {
-        ...state,
-        permanentNotificationVisible: true,
-        permanentNotificationMessage: options.msg
-      };
-
-    case ActionTypes.HIDE_PERMANENT_NOTIFICATION:
-      return {
-        ...state,
-        permanentNotificationVisible: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/fauxton/tests/nightwatch/highlightsidebar.js b/app/addons/fauxton/tests/nightwatch/highlightsidebar.js
deleted file mode 100644
index 8dd1588..0000000
--- a/app/addons/fauxton/tests/nightwatch/highlightsidebar.js
+++ /dev/null
@@ -1,30 +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.
-
-
-
-module.exports = {
-  'Highlight Sidebar' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl)
-      .waitForElementPresent('.add-new-database-btn', waitTime, false)
-      .click('a[href="#/replication"]')
-      .pause(1000)
-      .waitForElementVisible('.replication__activity_header-btn', waitTime, false)
-      .assert.cssClassPresent('a[href="#/replication"]', 'faux-navbar__link--active')
-      .end();
-  }
-};
diff --git a/app/addons/fauxton/tests/nightwatch/notificationCenter.js b/app/addons/fauxton/tests/nightwatch/notificationCenter.js
deleted file mode 100644
index 2738250..0000000
--- a/app/addons/fauxton/tests/nightwatch/notificationCenter.js
+++ /dev/null
@@ -1,42 +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.
-
-
-
-module.exports = {
-  'Notification Center' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .url(baseUrl + '/#/login')
-
-      // confirm the btn doesn't appear on the login screen
-      .waitForElementPresent('a[href="#/login"]', waitTime, false)
-      .waitForElementNotPresent('#notification-center-btn div.fonticon-bell', waitTime, false)
-
-      .loginToGUI()
-      .waitForElementNotPresent('.notification-wrapper', waitTime, false)
-      .waitForElementPresent('#notification-center-btn', waitTime, false)
-      .assert.cssClassNotPresent('.notification-page-mask', 'visible')
-      .clickWhenVisible('#notification-center-btn', waitTime, false)
-      .waitForElementPresent('.notification-page-mask.visible', waitTime, false)
-      .waitForElementPresent('.notification-list div.flex-layout', waitTime, false)
-
-      .getText('.notification-center-panel', function (result) {
-        var content = result.value;
-        this.verify.ok(/You\shave\sbeen\slogged\sin\./.test(content),
-          'Confirming login message appears');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/fauxton/tests/nightwatch/updatesUrlsSameRouteobject.js b/app/addons/fauxton/tests/nightwatch/updatesUrlsSameRouteobject.js
deleted file mode 100644
index 354ad39..0000000
--- a/app/addons/fauxton/tests/nightwatch/updatesUrlsSameRouteobject.js
+++ /dev/null
@@ -1,32 +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.
-
-
-module.exports = {
-  'it updates the API url even for routes in the same routeobject' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_find')
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, false)
-      .assert.attributeContains('.faux__jsonlink-link', 'href', newDatabaseName + '/_find')
-      .clickWhenVisible('.edit-link')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, false)
-      .assert.attributeContains('.faux__jsonlink-link', 'href', newDatabaseName + '/_index')
-      .end();
-  }
-};
diff --git a/app/addons/news/assets/less/news.less b/app/addons/news/assets/less/news.less
deleted file mode 100644
index d3cd9cf..0000000
--- a/app/addons/news/assets/less/news.less
+++ /dev/null
@@ -1,23 +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.
-
-.news-page {
-  width: 100%;
-  height: 100%;
-
-  .news-checkbox {
-    margin-top: 8px;
-    input {
-      margin: 0 4px 0 0;
-    }
-  }
-}
diff --git a/app/addons/news/base.js b/app/addons/news/base.js
deleted file mode 100644
index cebd785..0000000
--- a/app/addons/news/base.js
+++ /dev/null
@@ -1,28 +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.
-
-import FauxtonAPI from "../../core/api";
-import News from "./routes";
-import "./assets/less/news.less";
-
-News.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    id: 'News',
-    title: 'News',
-    icon: 'fonticon-clipboard',
-    href: '#/news',
-    bottomNav: true,
-    top: true
-  });
-};
-
-export default News;
diff --git a/app/addons/news/components.js b/app/addons/news/components.js
deleted file mode 100644
index b4581b8..0000000
--- a/app/addons/news/components.js
+++ /dev/null
@@ -1,81 +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.
-import app from "../../app";
-
-import React from "react";
-
-const LoadNewsButton = ({ showNews, isChecked, toggleChange }) => {
-  return (
-    <div>
-      <p>
-        When you click this button, you are requesting content and sharing your IP address with <a href="https://blog.couchdb.org/">blog.couchdb.org</a> which is edited by the Apache CouchDB PMC and maintained by <a href="https://wordpress.com/">wordpress.com</a>.
-      </p>
-      <p>
-        If you don’t want to share your IP address, do not click the button.
-      </p>
-      <button className="btn btn-primary" onClick={showNews}>Load News</button>
-      <label className="news-checkbox">
-        <input type="checkbox"
-          checked={isChecked}
-          onChange={toggleChange}
-        />
-        Remember my choice
-      </label>
-    </div>
-  );
-};
-
-class NewsPage extends React.Component {
-  constructor (props) {
-    super(props);
-    this.showNews = this.showNews.bind(this);
-    this.toggleChange = this.toggleChange.bind(this);
-
-    const allowsIpSharing = !!app.utils.localStorageGet('allow-IP-sharing');
-
-    this.state = {
-      showNews: allowsIpSharing ? true : false,
-      allowsIpSharing
-    };
-  }
-
-  showNews() {
-    this.setState({ showNews: true });
-  }
-
-  toggleChange() {
-    const allowsIpSharing = this.state.allowsIpSharing;
-    this.setState({ allowsIpSharing: !allowsIpSharing });
-    app.utils.localStorageSet('allow-IP-sharing', !allowsIpSharing);
-  }
-
-  render() {
-    let newsContent = <LoadNewsButton
-      showNews={this.showNews}
-      toggleChange={this.toggleChange}
-      isChecked={this.state.allowsIpSharing}></LoadNewsButton>;
-
-    if (this.state.showNews) {
-      newsContent = <iframe src="https://blog.couchdb.org" width="100%" height="100%"></iframe>;
-    }
-
-    return (
-      <div className="news-page">
-        {newsContent}
-      </div>
-    );
-  }
-}
-
-export default {
-  NewsPage: NewsPage
-};
diff --git a/app/addons/news/routes.js b/app/addons/news/routes.js
deleted file mode 100644
index fd152eb..0000000
--- a/app/addons/news/routes.js
+++ /dev/null
@@ -1,37 +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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import NewsComponents from "./components";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-var NewsRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'News',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-  routes: {
-    'news': 'news'
-  },
-  roles: ['fx_loggedIn'],
-  news: function () {
-    return <OnePaneSimpleLayout
-      component={<NewsComponents.NewsPage/>}
-      crumbs={[
-        {'name': 'News'}
-      ]}
-    />;
-  }
-});
-NewsRouteObject.RouteObjects = [NewsRouteObject];
-
-export default NewsRouteObject;
diff --git a/app/addons/permissions/__tests__/actions-test.js b/app/addons/permissions/__tests__/actions-test.js
deleted file mode 100644
index 5f74223..0000000
--- a/app/addons/permissions/__tests__/actions-test.js
+++ /dev/null
@@ -1,112 +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.
-
-import {
-  setPermissionOnObject,
-  deletePermissionFromObject
-} from '../actions';
-
-
-describe('Permissions Actions', () => {
-
-  describe('deleting roles', () => {
-    it('throws if a role is not in permissions', () => {
-      const p = {
-        admins: {
-          names: ['abc'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      expect(() => {
-        deletePermissionFromObject(p, 'admins', 'names', 'pizza');
-      }).toThrow();
-    });
-
-    it('deletes roles', () => {
-      const p = {
-        admins: {
-          names: ['abc', 'furbie'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      const res = deletePermissionFromObject(p, 'admins', 'names', 'abc');
-
-      expect(res).toEqual({
-        admins: {
-          names: ['furbie'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      });
-    });
-
-  });
-
-  describe('adding roles', () => {
-    it('throws if a role is already in permissions', () => {
-      const p = {
-        admins: {
-          names: ['abc'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      expect(() => {
-        setPermissionOnObject(p, 'admins', 'names', 'abc');
-      }).toThrow();
-    });
-
-    it('adds if not already present', () => {
-      const p = {
-        admins: {
-          names: ['abc'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      const res = setPermissionOnObject(p, 'admins', 'names', 'test123');
-
-      expect(res).toEqual({
-        admins: {
-          names: ['abc', 'test123'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      });
-    });
-
-  });
-});
diff --git a/app/addons/permissions/__tests__/container-test.js b/app/addons/permissions/__tests__/container-test.js
deleted file mode 100644
index 83aaf0b..0000000
--- a/app/addons/permissions/__tests__/container-test.js
+++ /dev/null
@@ -1,58 +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.
-
-import { receivedPermissions } from '../actions';
-
-import React from 'react';
-import { mount } from 'enzyme';
-
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-
-import reducer from '../reducers';
-import PermissionsContainer from '../container/PermissionsContainer';
-
-var fetchMock = require('fetch-mock');
-
-describe('Permissions Container', () => {
-
-  it('renders with new results', () => {
-
-    fetchMock.once("*", {});
-
-    const middlewares = [thunk];
-    const store = createStore(
-      combineReducers({ permissions: reducer}),
-      applyMiddleware(...middlewares)
-    );
-
-    const wrapper = mount(
-      <Provider store={store}>
-        <PermissionsContainer url="http://example.com/abc" />
-      </Provider>
-    );
-
-    store.dispatch(
-      receivedPermissions({
-        admins:  { names: ['banana'], roles: [] }
-      })
-    );
-
-    wrapper.update();
-    const item = wrapper
-      .find('.permissions__admins .permissions__entry');
-
-    expect(item.text()).toContain('banana');
-  });
-});
diff --git a/app/addons/permissions/__tests__/helpers-test.js b/app/addons/permissions/__tests__/helpers-test.js
deleted file mode 100644
index a3fd54b..0000000
--- a/app/addons/permissions/__tests__/helpers-test.js
+++ /dev/null
@@ -1,84 +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.
-
-import {
-  isValueAlreadySet,
-  addValueToPermissions
-} from '../helpers';
-
-describe('Permissions - Helpers', () => {
-
-  describe('isValueAlreadySet', () => {
-
-    it('returns false if object does not have properties', () => {
-
-      let permissions = {};
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(false);
-
-      permissions = { admins: {} };
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(false);
-
-      permissions = { admins: { names: [] } };
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(false);
-    });
-
-    it('confirms existing properties', () => {
-
-      const permissions = { admins: { names: ['michelle', 'rocko', 'garren'] } };
-
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(true);
-    });
-
-  });
-
-  describe('addValueToPermissions', () => {
-
-    it('adds values, even if properties not set', () => {
-
-      const permissions = {};
-      expect(
-        addValueToPermissions(permissions, 'admins', 'names', 'rocko')
-      ).toEqual({
-        admins: {
-          names: ['rocko']
-        }
-      });
-    });
-
-    it('adds values', () => {
-
-      const permissions = {
-        admins: {
-          names: ['rocko']
-        }
-      };
-
-      expect(
-        addValueToPermissions(permissions, 'admins', 'names', 'garren')
-      ).toEqual({
-        admins: {
-          names: ['rocko', 'garren']
-        }
-      });
-    });
-
-  });
-
-});
diff --git a/app/addons/permissions/__tests__/permissionsScreen-test.js b/app/addons/permissions/__tests__/permissionsScreen-test.js
deleted file mode 100644
index 2283a47..0000000
--- a/app/addons/permissions/__tests__/permissionsScreen-test.js
+++ /dev/null
@@ -1,97 +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.
-
-import React from 'react';
-import { mount } from 'enzyme';
-
-import PermissionsScreen from '../components/PermissionsScreen';
-
-
-describe('PermissionsScreen', () => {
-
-  it('add permississon: does not dispatch if value already exists', () => {
-
-    const security = {
-      admins:  { names: ['abc'], roles: [] },
-      members: { names: [], roles: [] }
-    };
-    const stub = jest.fn();
-
-    const wrapper = mount(
-      <PermissionsScreen
-        adminRoles={security.admins.roles}
-        adminNames={security.admins.names}
-        memberRoles={security.members.roles}
-        memberNames={security.members.names}
-        security={security}
-        dispatch={stub} />
-    );
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user input')
-      .simulate('change', {target: {value: 'abc'}});
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user')
-      .simulate('submit');
-
-    expect(stub).not.toHaveBeenCalled();
-  });
-
-  it('add permississon: dispatches if values does not exist', () => {
-
-    const security = {
-      admins:  { names: ['pineapple'], roles: [] },
-      members: { names: [], roles: [] }
-    };
-    const stub = jest.fn();
-
-    const wrapper = mount(
-      <PermissionsScreen security={security} dispatch={stub} />
-    );
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user input')
-      .simulate('change', {target: {value: 'mango'}});
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user')
-      .simulate('submit');
-
-    expect(stub).toHaveBeenCalled();
-  });
-
-  it('remove permississon: dispatches', () => {
-
-    const security = {
-      admins:  { names: ['pineapple'], roles: [] },
-      members: { names: [], roles: [] }
-    };
-    const stub = jest.fn();
-
-    const wrapper = mount(
-      <PermissionsScreen
-        adminRoles={security.admins.roles}
-        adminNames={security.admins.names}
-        memberRoles={security.members.roles}
-        memberNames={security.members.names}
-        security={security}
-        dispatch={stub} />
-    );
-
-    wrapper
-      .find('.permissions__admins .permissions__entry button')
-      .simulate('click');
-
-    expect(stub).toHaveBeenCalled();
-  });
-});
diff --git a/app/addons/permissions/actions.js b/app/addons/permissions/actions.js
deleted file mode 100644
index 2b44b49..0000000
--- a/app/addons/permissions/actions.js
+++ /dev/null
@@ -1,129 +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.
-
-import FauxtonAPI from "../../core/api";
-import 'whatwg-fetch';
-import { isValueAlreadySet, addValueToPermissions } from './helpers';
-
-
-import {
-  PERMISSIONS_UPDATE
-} from './actiontypes';
-
-
-export const receivedPermissions = json => {
-  return {
-    type: PERMISSIONS_UPDATE,
-    permissions: json
-  };
-};
-
-export const fetchPermissions = url => dispatch => {
-  return fetch(url, {
-    headers: {'Accept': 'application/json' },
-    credentials: 'include'
-  })
-    .then((res) => res.json())
-    .then(json => {
-      if (json.error && json.reason) {
-        dispatch(receivedPermissions(
-          {admins:{roles:["_admin"]}, members:{roles:["_admin"]}}));
-        throw new Error(json.reason);
-      }
-      dispatch(receivedPermissions(json));
-    })
-    .catch((err) => {
-      FauxtonAPI.addNotification({
-        msg: 'Failed to retrieve permissions. Please try again. Reason:'
-         + err.message,
-        type: 'error'
-      });
-    });
-};
-
-export const setPermissionOnObject = (p, section, type, value) => {
-  if (isValueAlreadySet(p, section, type, value)) {
-    throw new Error('Role/Name has already been added');
-  }
-
-  const res = addValueToPermissions(p, section, type, value);
-
-  return res;
-};
-
-export const deletePermissionFromObject = (p, section, type, value) => {
-  if (!isValueAlreadySet(p, section, type, value)) {
-    throw new Error('Role/Name does not exist');
-  }
-
-  p[section][type] = p[section][type].filter((el) => {
-    return el !== value;
-  });
-
-  return p;
-};
-
-export const updatePermission = (url, permissions, section, type, value) => dispatch => {
-  setPermissionOnObject(permissions, section, type, value);
-
-  updatePermissionUnsafe(url, permissions, dispatch)
-    .catch((err) => {
-      FauxtonAPI.addNotification({
-        msg: err.message,
-        type: 'error'
-      });
-    });
-};
-
-export const deletePermission = (url, permissions, section, type, value) => dispatch => {
-  deletePermissionFromObject(permissions, section, type, value);
-
-  updatePermissionUnsafe(url, permissions, dispatch)
-    .catch((err) => {
-      FauxtonAPI.addNotification({
-        msg: err.message,
-        type: 'error'
-      });
-    });
-};
-
-export const updatePermissionUnsafe = (url, p, dispatch) => {
-  return fetch(url, {
-    headers: {
-      'Accept': 'application/json',
-      'Content-Type': 'application/json'
-    },
-    credentials: 'include',
-    method: 'PUT',
-    body: JSON.stringify(p)
-  })
-    .then((res) => res.json())
-    .then((json) => {
-      if (!json.ok) {
-        throw new Error(json.reason);
-      }
-      return json;
-    })
-    .then(() => {
-      FauxtonAPI.addNotification({
-        msg: 'Database permissions has been updated.'
-      });
-
-      return dispatch(receivedPermissions(p));
-    })
-    .catch((error) => {
-      FauxtonAPI.addNotification({
-        msg: 'Could not update permissions - reason: ' + error,
-        type: 'error'
-      });
-    });
-};
diff --git a/app/addons/permissions/actiontypes.js b/app/addons/permissions/actiontypes.js
deleted file mode 100644
index f474fbd..0000000
--- a/app/addons/permissions/actiontypes.js
+++ /dev/null
@@ -1,14 +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.
-
-
-export const PERMISSIONS_UPDATE = 'PERMISSIONS_UPDATE';
diff --git a/app/addons/permissions/assets/less/permissions.less b/app/addons/permissions/assets/less/permissions.less
deleted file mode 100644
index 3c206d0..0000000
--- a/app/addons/permissions/assets/less/permissions.less
+++ /dev/null
@@ -1,32 +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.
-@import "../../../../../assets/less/variables.less";
-
-.permission-items.unstyled {
-  margin-left: 0px;
-  li {
-    padding: 5px;
-    border-bottom: 1px solid #E3E3E3;
-    border-right: 1px solid #E3E3E3;
-    border-left: 3px solid #E3E3E3;
-    &:first-child {
-      border-top: 1px solid #E3E3E3;
-    }
-    &:nth-child(odd) {
-      border-left: 3px solid red;
-    }
-  }
-}
-
-#dashboard #dashboard-content div.permissions-page {
-  padding: 5px @panelPadding;
-}
diff --git a/app/addons/permissions/base.js b/app/addons/permissions/base.js
deleted file mode 100644
index c02fbba..0000000
--- a/app/addons/permissions/base.js
+++ /dev/null
@@ -1,24 +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.
-
-import FauxtonAPI from "../../core/api";
-import Permissions from "./routes";
-import reducers from './reducers';
-import "./assets/less/permissions.less";
-
-Permissions.initialize = function () {};
-
-FauxtonAPI.addReducers({
-  permissions: reducers
-});
-
-export default Permissions;
diff --git a/app/addons/permissions/components/Permissions.js b/app/addons/permissions/components/Permissions.js
deleted file mode 100644
index bb7f273..0000000
--- a/app/addons/permissions/components/Permissions.js
+++ /dev/null
@@ -1,50 +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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from 'react';
-
-import PermissionsScreen  from './PermissionsScreen';
-
-import { fetchPermissions } from '../actions';
-import { LoadLines } from '../../components/components/loadlines';
-
-
-export default class Permissions extends Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    const { dispatch, url } = this.props;
-    dispatch(fetchPermissions(url));
-  }
-
-  render () {
-    const { isLoading } = this.props;
-
-    return (
-      isLoading ? <LoadLines /> : <PermissionsScreen {...this.props} />
-    );
-  }
-}
-
-Permissions.propTypes = {
-  isLoading: PropTypes.bool.isRequired,
-  adminRoles: PropTypes.array.isRequired,
-  adminNames: PropTypes.array.isRequired,
-  memberNames: PropTypes.array.isRequired,
-  memberRoles: PropTypes.array.isRequired,
-  security: PropTypes.object.isRequired
-};
diff --git a/app/addons/permissions/components/PermissionsItem.js b/app/addons/permissions/components/PermissionsItem.js
deleted file mode 100644
index 069b77a..0000000
--- a/app/addons/permissions/components/PermissionsItem.js
+++ /dev/null
@@ -1,38 +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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-const PermissionsItem = ({removeItem, section, type, value}) => {
-
-  return (
-    <li className="permissions__entry">
-      <span>{value}</span>
-      <button
-        onClick={() => removeItem(section, type, value)}
-        type="button"
-        className="pull-right close"
-      >
-        ×
-      </button>
-    </li>
-  );
-};
-
-PermissionsItem.propTypes = {
-  value: PropTypes.string.isRequired,
-  removeItem: PropTypes.func.isRequired,
-};
-
-export default PermissionsItem;
diff --git a/app/addons/permissions/components/PermissionsScreen.js b/app/addons/permissions/components/PermissionsScreen.js
deleted file mode 100644
index a118761..0000000
--- a/app/addons/permissions/components/PermissionsScreen.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import FauxtonAPI from '../../../core/api';
-
-// 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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from 'react';
-
-import PermissionsSection from './PermissionsSection';
-import { updatePermission, deletePermission } from '../actions';
-import { isValueAlreadySet } from '../helpers';
-
-export default class PermissionsScreen extends Component {
-
-  constructor (props) {
-    super(props);
-
-    this.addItem = this.addItem.bind(this);
-    this.removeItem = this.removeItem.bind(this);
-  }
-
-  addItem ({ section, type, value }) {
-
-    if (isValueAlreadySet(this.props.security, section, type, value)) {
-      FauxtonAPI.addNotification({
-        msg: 'Role/Name has already been added',
-        type: 'error'
-      });
-
-      return null;
-    }
-
-    this.props.dispatch(
-      updatePermission(this.props.url, this.props.security, section, type, value)
-    );
-  }
-
-  removeItem (section, type, value) {
-
-    this.props.dispatch(
-      deletePermission(this.props.url, this.props.security, section, type, value)
-    );
-  }
-
-  render () {
-    const {
-      adminRoles,
-      adminNames,
-      memberRoles,
-      memberNames
-    } = this.props;
-
-    return (
-      <div className="permissions-page flex-body">
-        <div>
-          <PermissionsSection
-            roles={adminRoles}
-            names={adminNames}
-            addItem={this.addItem}
-            removeItem={this.removeItem}
-            section="admins" />
-
-          <PermissionsSection
-            roles={memberRoles}
-            names={memberNames}
-            addItem={this.addItem}
-            removeItem={this.removeItem}
-            section="members" />
-        </div>
-      </div>
-    );
-  }
-
-}
-
-PermissionsScreen.propTypes = {
-  security: PropTypes.object.isRequired
-};
diff --git a/app/addons/permissions/components/PermissionsSection.js b/app/addons/permissions/components/PermissionsSection.js
deleted file mode 100644
index da24bb6..0000000
--- a/app/addons/permissions/components/PermissionsSection.js
+++ /dev/null
@@ -1,158 +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.
-
-import React from 'react';
-
-import FauxtonAPI from '../../../core/api';
-import app from '../../../app';
-import _ from 'lodash';
-
-import PermissionsItem from './PermissionsItem';
-
-
-const getDocUrl = app.helpers.getDocUrl;
-
-class PermissionsSection extends React.Component {
-  static defaultProps = {
-    names: [],
-    roles: []
-  };
-
-  state = {
-    newRole: '',
-    newName: ''
-  };
-
-  getHelp = () => {
-    if (this.props.section === 'admins') {
-      return 'Database members can access the database. If no members are defined, the database is public. ';
-    }
-
-    return 'Database members can access the database. If no members are defined, the database is public. ';
-  };
-
-  isEmptyValue = (value, type) => {
-    if (!_.isEmpty(value)) {
-      return false;
-    }
-    FauxtonAPI.addNotification({
-      msg: 'Cannot add an empty value for ' + type + '.',
-      type: 'error'
-    });
-
-    return true;
-  };
-
-  addNames = (e) => {
-    e.preventDefault();
-    if (this.isEmptyValue(this.state.newName, 'names')) {
-      return;
-    }
-    this.props.addItem({
-      type: 'names',
-      section: this.props.section,
-      value: this.state.newName
-    });
-
-    this.setState({newName: ''});
-  };
-
-  addRoles = (e) => {
-    e.preventDefault();
-    if (this.isEmptyValue(this.state.newRole, 'roles')) {
-      return;
-    }
-    this.props.addItem({
-      type: 'roles',
-      section: this.props.section,
-      value: this.state.newRole
-    });
-
-    this.setState({newRole: ''});
-  };
-
-  getItems = (items, type) => {
-    return items.map((item, i) => {
-      return <PermissionsItem
-        key={i}
-        value={item}
-        section={this.props.section}
-        type={type}
-        removeItem={this.props.removeItem} />;
-    });
-  };
-
-  getNames = () => {
-    return this.getItems(this.props.names, 'names');
-  };
-
-  getRoles = () => {
-    return this.getItems(this.props.roles, 'roles');
-  };
-
-  nameChange = (e) => {
-    this.setState({newName: e.target.value});
-  };
-
-  roleChange = (e) => {
-    this.setState({newRole: e.target.value});
-  };
-
-  render() {
-
-    const { section } = this.props;
-
-    return (
-      <div className={"permissions__" + section}>
-        <header className="page-header">
-          <h3>{section}</h3>
-          <p className="help">
-            {this.getHelp()}
-            <a className="help-link" data-bypass="true" href={getDocUrl('DB_PERMISSION')} target="_blank" rel="noopener noreferrer">
-              <i className="icon-question-sign"></i>
-            </a>
-          </p>
-        </header>
-        <div className="row-fluid">
-          <div className="span6">
-            <header>
-              <h4>Users</h4>
-              <p>Specify users who will have {this.props.section} access to this database.</p>
-            </header>
-            <form onSubmit={this.addNames} className="permission-item-form permissions-add-user form-inline">
-              <input onChange={this.nameChange} value={this.state.newName} type="text" className="item input-small" placeholder="Username" />
-              <button type="submit" className="btn btn-primary"><i className="icon fonticon-plus-circled" /> Add User</button>
-            </form>
-            <ul className="unstyled permission-items span10">
-              {this.getNames()}
-            </ul>
-          </div>
-          <div className="span6">
-            <header>
-              <h4>Roles</h4>
-              <p>Users with any of the following role(s) will have {this.props.section} access.</p>
-            </header>
-            <form onSubmit={this.addRoles} className="permission-item-form permissions-add-role form-inline">
-              <input onChange={this.roleChange} value={this.state.newRole} type="text" className="item input-small" placeholder="Role" />
-              <button type="submit" className="btn btn-primary"><i className="icon fonticon-plus-circled" /> Add Role</button>
-            </form>
-            <ul className="unstyled permission-items span10">
-              {this.getRoles()}
-            </ul>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-export default PermissionsSection;
diff --git a/app/addons/permissions/container/PermissionsContainer.js b/app/addons/permissions/container/PermissionsContainer.js
deleted file mode 100644
index f5cbcaf..0000000
--- a/app/addons/permissions/container/PermissionsContainer.js
+++ /dev/null
@@ -1,40 +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.
-
-import { connect } from 'react-redux';
-
-import Permissions from '../components/Permissions';
-
-import {
-  getIsLoading,
-  getSecurity,
-  getAdminRoles,
-  getAdminNames,
-  getMemberNames,
-  getMemberRoles
-} from '../reducers';
-
-
-const mapStateToProps = ({permissions}) => {
-  return {
-    isLoading: getIsLoading(permissions),
-    adminRoles: getAdminRoles(permissions),
-    adminNames: getAdminNames(permissions),
-    memberNames: getMemberNames(permissions),
-    memberRoles: getMemberRoles(permissions),
-    security: getSecurity(permissions)
-  };
-};
-
-export default connect(
-  mapStateToProps
-)(Permissions);
diff --git a/app/addons/permissions/helpers.js b/app/addons/permissions/helpers.js
deleted file mode 100644
index 6658f8c..0000000
--- a/app/addons/permissions/helpers.js
+++ /dev/null
@@ -1,39 +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.
-
-export function isValueAlreadySet (p, section, type, value) {
-
-  if (!p[section]) {
-    return false;
-  }
-
-  if (!p[section][type]) {
-    return false;
-  }
-
-  return p[section][type].indexOf(value) !== -1;
-}
-
-export function addValueToPermissions (p, section, type, value) {
-
-  if (!p[section]) {
-    p[section] = {};
-  }
-
-  if (!p[section][type]) {
-    p[section][type] = [];
-  }
-
-  p[section][type].push(value);
-
-  return p;
-}
diff --git a/app/addons/permissions/layout.js b/app/addons/permissions/layout.js
deleted file mode 100644
index 435a37b..0000000
--- a/app/addons/permissions/layout.js
+++ /dev/null
@@ -1,44 +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.
-
-import React from 'react';
-import {TabsSidebarHeader} from '../documents/layouts';
-import PermissionsContainer from './container/PermissionsContainer';
-import SidebarControllerContainer from "../documents/sidebar/SidebarControllerContainer";
-import {SidebarItemSelection} from '../documents/sidebar/helpers';
-
-export const PermissionsLayout = ({docURL, database, endpoint, dbName, dropDownLinks, partitionKey}) => {
-  const selectedNavItem = new SidebarItemSelection('permissions');
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        hideQueryOptions={true}
-        hideJumpToDoc={true}
-        docURL={docURL}
-        endpoint={endpoint}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-      />
-      <div className="with-sidebar tabs-with-sidebar content-area">
-        <aside id="sidebar-content" className="scrollable">
-          <SidebarControllerContainer selectedNavItem={selectedNavItem} selectedPartitionKey={partitionKey}/>
-        </aside>
-        <section id="dashboard-content" className="flex-layout flex-col">
-          <PermissionsContainer url={endpoint} />
-        </section>
-      </div>
-    </div>
-  );
-};
-
-export default PermissionsLayout;
diff --git a/app/addons/permissions/reducers.js b/app/addons/permissions/reducers.js
deleted file mode 100644
index 20bb27d..0000000
--- a/app/addons/permissions/reducers.js
+++ /dev/null
@@ -1,67 +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.
-
-import {
-  PERMISSIONS_UPDATE
-} from './actiontypes';
-
-const initialState = {
-  isLoading: true,
-  security: {},
-  adminRoles: [],
-  adminNames: [],
-  memberNames: [],
-  memberRoles: []
-};
-
-export default function permissions (state = initialState, action) {
-  switch (action.type) {
-
-    case PERMISSIONS_UPDATE:
-      const { permissions } = action;
-      return Object.assign({}, state, {
-        isLoading: false,
-
-        security: permissions,
-        adminRoles: getRoles('admins', permissions),
-        adminNames: getNames('admins', permissions),
-        memberRoles: getRoles('members', permissions),
-        memberNames: getNames('members', permissions)
-      });
-
-    default:
-      return state;
-  }
-}
-
-function getRoles (type, permissions) {
-  if (!permissions[type]) {
-    return [];
-  }
-
-  return permissions[type].roles ? permissions[type].roles : [];
-}
-
-function getNames (type, permissions) {
-  if (!permissions[type]) {
-    return [];
-  }
-
-  return permissions[type].names ? permissions[type].names : [];
-}
-
-export const getIsLoading = state => state.isLoading;
-export const getSecurity = state => state.security;
-export const getAdminRoles = state => state.adminRoles;
-export const getAdminNames = state => state.adminNames;
-export const getMemberNames = state => state.memberNames;
-export const getMemberRoles = state => state.memberRoles;
diff --git a/app/addons/permissions/routes.js b/app/addons/permissions/routes.js
deleted file mode 100644
index f18e1e1..0000000
--- a/app/addons/permissions/routes.js
+++ /dev/null
@@ -1,72 +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.
-
-import React from 'react';
-import app from '../../app';
-import FauxtonAPI from '../../core/api';
-import Databases from '../databases/base';
-import BaseRoute from '../documents/shared-routes';
-import Layout from './layout';
-
-const PermissionsRouteObject = BaseRoute.extend({
-
-  roles: ['fx_loggedIn'],
-  routes: {
-    'database/:database/_partition/:partitionKey/permissions': {
-      route: 'permissions',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/permissions': {
-      route: 'permissions',
-      roles: ['fx_loggedIn']
-    }
-  },
-
-  initialize: function () {
-    const docOptions = app.getParams();
-
-    docOptions.include_docs = true;
-  },
-
-  permissions: function (databaseId, partitionKey) {
-
-    // XXX magic inheritance props we need to maintain for BaseRoute
-    this.database = new Databases.Model({ id: databaseId });
-
-    // XXX magic methods we have to call - originating from BaseRoute.extend
-    this.createDesignDocsCollection();
-    this.addSidebar('permissions');
-
-    const crumbs = [
-      { name: this.database.id, link: Databases.databaseUrl(databaseId)},
-      { name: 'Permissions' }
-    ];
-
-    const encodedDatabaseId = encodeURIComponent(databaseId);
-    const url = FauxtonAPI.urls('permissions', 'server', encodedDatabaseId);
-
-    return <Layout
-      docURL={FauxtonAPI.constants.DOC_URLS.DB_PERMISSION}
-      endpoint={url}
-      dbName={this.database.id}
-      dropDownLinks={crumbs}
-      database={this.database}
-      partitionKey={partitionKey} />;
-
-  }
-});
-
-const Permissions = {
-  RouteObjects: [PermissionsRouteObject]
-};
-
-export default Permissions;
diff --git a/app/addons/permissions/tests/nightwatch/permissions.js b/app/addons/permissions/tests/nightwatch/permissions.js
deleted file mode 100644
index a51db00..0000000
--- a/app/addons/permissions/tests/nightwatch/permissions.js
+++ /dev/null
@@ -1,40 +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.
-
-
-module.exports = {
-
-  'CouchDB Database Permissions Test' : (client) => {
-
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/permissions')
-
-      .waitForElementVisible('.permissions__admins', waitTime, false)
-
-      .setValue('.permissions__admins [placeholder="Username"]', 'blergie')
-      .clickWhenVisible('.permissions__admins .permissions-add-user button')
-
-      .waitForElementVisible('.permissions__admins .permissions__entry', waitTime, false)
-      .assert.containsText('.permissions__entry span', 'blergie')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/permissions')
-      .waitForElementVisible('.permissions__admins .permissions__entry', waitTime, false)
-      .assert.containsText('.permissions__entry span', 'blergie')
-
-      .end();
-  }
-};
diff --git a/app/addons/replication/__tests__/actions.test.js b/app/addons/replication/__tests__/actions.test.js
deleted file mode 100644
index b9cfa64..0000000
--- a/app/addons/replication/__tests__/actions.test.js
+++ /dev/null
@@ -1,276 +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.
-
-import {replicate, getReplicationStateFrom, deleteDocs} from '../actions';
-import ActionTypes from '../actiontypes';
-import fetchMock from 'fetch-mock';
-import FauxtonAPI from '../../../core/api';
-
-FauxtonAPI.session = {
-  user () {
-    return {
-      name: 'test-user-name'
-    };
-  }
-};
-
-describe("Replication Actions", () => {
-
-  describe('replicate', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('creates a new database if it does not exist', () => {
-      const dispatch = () => {};
-      fetchMock.postOnce('./_replicator', {
-        status: 404,
-        body: {
-          error: "not_found",
-          reason: "Database does not exist."
-        }
-      });
-
-      fetchMock.putOnce('./_replicator', {
-        status: 200,
-        body: {
-          ok: true
-        }
-      });
-
-      const finalPost = fetchMock.postOnce('./_replicator', {
-        status: 200,
-        body: {
-          ok: true
-        }
-      }, { overwriteRoutes: false });
-
-      return replicate ({
-        localSource: "animaldb",
-        localTarget: "boom123",
-        password: "testerpass",
-        remoteSource: "",
-        remoteTarget: "",
-        replicationDocName: "",
-        replicationSource: "REPLICATION_SOURCE_LOCAL",
-        replicationTarget: "REPLICATION_TARGET_NEW_LOCAL_DATABASE",
-        replicationType: "",
-        username: "tester"
-      })(dispatch).then(() => {
-        expect(finalPost.calls('./_replicator').length).toBe(3);
-
-        //fetchMock.done();
-      });
-    });
-
-    it('does not try to create new database if it already exist', () => {
-      const dispatch = () => {};
-      const mockPost = fetchMock.postOnce('./_replicator', {
-        status: 200,
-        body: {
-          ok: true
-        }
-      });
-
-      return replicate ({
-        localSource: "animaldb",
-        localTarget: "boom123",
-        password: "testerpass",
-        remoteSource: "",
-        remoteTarget: "",
-        replicationDocName: "",
-        replicationSource: "REPLICATION_SOURCE_LOCAL",
-        replicationTarget: "REPLICATION_TARGET_NEW_LOCAL_DATABASE",
-        replicationType: "",
-        username: "tester"
-      })(dispatch).then(() => {
-        expect(mockPost.calls('./_replicator').length).toBe(1);
-        fetchMock.done();
-      });
-    });
-  });
-
-  describe('getReplicationStateFrom', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    const doc = {
-      "_id": "7dcea9874a8fcb13c6630a1547001559",
-      "_rev": "2-98d29cc74e77b6dc38f5fc0dcec0033c",
-      "user_ctx": {
-        "name": "tester",
-        "roles": [
-          "_admin",
-          "_reader",
-          "_writer"
-        ]
-      },
-      "source": {
-        "headers": {
-          "Authorization": "Basic dGVzdGVyOnRlc3RlcnBhc3M="
-        },
-        "url": "http://localhost:8000/animaldb"
-      },
-      "target": {
-        "headers": {
-          "Authorization": "Basic dGVzdGVyOnRlc3RlcnBhc3M="
-        },
-        "url": "http://localhost:8000/boom123"
-      },
-      "create_target": true,
-      "continuous": false,
-      "owner": "tester",
-      "_replication_id": "90ff5a45623aa6821a6b0c20f5d3b5e8"
-    };
-
-    const docState = {
-      "replicationDocName": "7dcea9874a8fcb13c6630a1547001559",
-      "replicationType": "REPLICATION_TYPE_ONE_TIME",
-      "replicationSource": "REPLICATION_SOURCE_LOCAL",
-      "localSource": "animaldb",
-      "sourceAuthType":"BASIC_AUTH",
-      "sourceAuth":{"username":"tester", "password":"testerpass"},
-      "replicationTarget": "REPLICATION_TARGET_EXISTING_LOCAL_DATABASE",
-      "localTarget": "boom123",
-      "targetAuthType":"BASIC_AUTH",
-      "targetAuth":{"username":"tester", "password":"testerpass"},
-      "targetDatabasePartitioned": false
-    };
-
-    it('builds up correct state', (done) => {
-      const dispatch = ({type, options}) => {
-        if (ActionTypes.REPLICATION_SET_STATE_FROM_DOC === type) {
-          expect(options).toEqual(docState);
-          done();
-        }
-      };
-
-      fetchMock.getOnce('./_replicator/7dcea9874a8fcb13c6630a1547001559', doc);
-      getReplicationStateFrom(doc._id)(dispatch);
-    });
-
-    it('builds up correct state with custom auth', (done) => {
-      const docWithCustomAuth = Object.assign(
-        {}, doc, {
-          "_id": "rep_custom_auth",
-          "continuous": true,
-          "source": {
-            "headers": {},
-            "url": "http://localhost:8000/animaldb",
-            "auth": {
-              "creds": "source_user_creds"
-            }
-          },
-          "target": {
-            "headers": {},
-            "url": "http://localhost:8000/boom123",
-            "auth": {
-              "creds": "target_user_creds"
-            }
-          }
-        });
-
-      const docStateWithCustomAuth = {
-        "replicationDocName": "rep_custom_auth",
-        "replicationType": "REPLICATION_TYPE_CONTINUOUS",
-        "replicationSource": "REPLICATION_SOURCE_LOCAL",
-        "localSource": "animaldb",
-        "sourceAuthType":"TEST_CUSTOM_AUTH",
-        "sourceAuth":{"creds":"source_user_creds"},
-        "replicationTarget": "REPLICATION_TARGET_EXISTING_LOCAL_DATABASE",
-        "localTarget": "boom123",
-        "targetAuthType":"TEST_CUSTOM_AUTH",
-        "targetAuth":{"creds":"target_user_creds"},
-        "targetDatabasePartitioned": false
-      };
-      FauxtonAPI.registerExtension('Replication:Auth', {
-        typeValue: 'TEST_CUSTOM_AUTH',
-        typeLabel: 'Test Custom Auth',
-        getCredentials: (repSourceOrTarget) => {
-          if (repSourceOrTarget.auth && repSourceOrTarget.auth.creds) {
-            return { creds: repSourceOrTarget.auth.creds };
-          }
-          return undefined;
-        }
-      });
-      const dispatch = ({type, options}) => {
-        if (ActionTypes.REPLICATION_SET_STATE_FROM_DOC === type) {
-          expect(options).toEqual(docStateWithCustomAuth);
-          done();
-        }
-      };
-
-      fetchMock.getOnce('./_replicator/rep_custom_auth', docWithCustomAuth);
-      getReplicationStateFrom(docWithCustomAuth._id)(dispatch);
-    });
-  });
-
-  describe('deleteDocs', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('sends bulk doc request', (done) => {
-      const resp = [
-        {
-          "ok": true,
-          "id": "should-fail",
-          "rev": "32-14e8495723c34271ef1391adf83defc2"
-        },
-        {
-          "ok": true,
-          "id": "my-cool-id",
-          "rev": "3-f16f14d11708952b3d787846ef6ef8a9"
-        }
-      ];
-
-      const docs = [
-        {
-          _id: "should-fail",
-          _rev: "31-cdc233eb8a98e3aa3a87cd72f6a86301",
-          raw: {
-            _id: "should-fail",
-            _rev: "31-cdc233eb8a98e3aa3a87cd72f6a86301"
-          },
-        },
-        {
-          _id: "my-cool-id",
-          _rev: "2-da6af558740409e61d563769a8044a68",
-          raw: {
-            _id: "my-cool-id",
-            _rev: "2-da6af558740409e61d563769a8044a68"
-          }
-        }
-      ];
-
-      fetchMock.getOnce('./_scheduler/jobs', 404);
-      fetchMock.getOnce('./_replicator/_all_docs?include_docs=true&limit=100', {rows: []});
-      fetchMock.postOnce('./_replicator/_bulk_docs', {
-        status: 200,
-        body: resp
-      });
-
-
-      const dispatch = ({type}) => {
-        if (ActionTypes.REPLICATION_CLEAR_SELECTED_DOCS === type) {
-          done();
-        }
-      };
-
-      deleteDocs(docs)(dispatch);
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/api.tests.js b/app/addons/replication/__tests__/api.tests.js
deleted file mode 100644
index ff2db57..0000000
--- a/app/addons/replication/__tests__/api.tests.js
+++ /dev/null
@@ -1,610 +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.
-import FauxtonAPI from '../../../core/api';
-import {
-  getSource,
-  getTarget,
-  continuous,
-  createTarget,
-  addDocIdAndRev,
-  getDocUrl,
-  encodeFullUrl,
-  decodeFullUrl,
-  getCredentialsFromUrl,
-  removeCredentialsFromUrl,
-  removeSensitiveUrlInfo,
-  supportNewApi,
-  fetchReplicationDocs
-} from '../api';
-import Constants from '../constants';
-import fetchMock from 'fetch-mock';
-
-describe('Replication API', () => {
-
-  describe("removeSensiteiveUrlInfo", () => {
-    it('removes password username', () => {
-      const url = 'http://tester:testerpass@127.0.0.1/fancy/db/name';
-
-      const res = removeSensitiveUrlInfo(url);
-
-      expect(res).toBe('http://127.0.0.1/fancy/db/name');
-    });
-
-    // see https://issues.apache.org/jira/browse/COUCHDB-3257
-    // CouchDB accepts and returns invalid urls
-    it('does not throw on invalid urls', () => {
-      const url = 'http://tester:tes#terpass@127.0.0.1/fancy/db/name';
-
-      const res = removeSensitiveUrlInfo(url);
-
-      expect(res).toBe('http://tester:tes#terpass@127.0.0.1/fancy/db/name');
-    });
-  });
-
-  describe('getSource', () => {
-
-    it('encodes remote db', () => {
-      const remoteSource = 'http://remote-couchdb.com/my/db/here';
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource
-      });
-
-      expect(source.url).toEqual('http://remote-couchdb.com/my%2Fdb%2Fhere');
-    });
-
-    it('returns local source with auth info and encoded', () => {
-      const localSource = 'my/db';
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localSource,
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(source.url).toMatch(/my%2Fdb/);
-    });
-
-    it('returns local source with auth info and encoded when use relative url', () => {
-      const localSource = 'my/db';
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localSource,
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:6767', pathname:'/db/_utils'});
-
-      expect(source.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(source.url).toMatch(/\/db\/my%2Fdb/);
-    });
-
-    it('returns remote source url and auth header', () => {
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local",
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(source.url).toBe('http://my-couchdb.com/my-db');
-    });
-
-    it('returns source with no auth', () => {
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local",
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.headers).toEqual({});
-
-      const source2 = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local"
-      }, {origin: 'http://dev:6767'});
-
-      expect(source2.headers).toEqual({});
-    });
-
-    it('returns source with custom auth', () => {
-      FauxtonAPI.registerExtension('Replication:Auth', {
-        typeValue: 'TEST_CUSTOM_AUTH',
-        typeLabel: 'Test Custom Auth',
-        setCredentials: (repSourceOrTarget, auth) => {
-          repSourceOrTarget.auth = {
-            auth_creds: auth.creds
-          };
-        }
-      });
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local",
-        sourceAuth: { creds: 'sample_creds' },
-        sourceAuthType: 'TEST_CUSTOM_AUTH'
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.auth).toEqual({ auth_creds: 'sample_creds' });
-    });
-  });
-
-  describe('getTarget', () => {
-
-    it('returns remote encoded target', () => {
-      const remoteTarget = 'http://remote-couchdb.com/my/db';
-
-      const url = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE,
-        remoteTarget: remoteTarget
-      }).url;
-      expect(url).toBe("http://remote-couchdb.com/my%2Fdb");
-    });
-
-    it("encodes username and password for remote", () => {
-      const remoteTarget = 'http://remote-couchdb.com/my/db';
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE,
-        remoteTarget: remoteTarget,
-        targetAuth: {
-          username: 'jimi',
-          password: 'my-password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      });
-
-      expect(target.url).toEqual('http://remote-couchdb.com/my%2Fdb');
-      expect(target.headers).toEqual({Authorization:"Basic amltaTpteS1wYXNzd29yZA=="});
-    });
-
-    it('returns existing local database', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE,
-        localTarget: 'my-existing/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      });
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-existing%2Fdb/);
-    });
-
-    it('returns existing local database even with relative urls', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE,
-        localTarget: 'my-existing/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin:'http://dev:6767', pathname:'/db/_utils'});
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-existing%2Fdb/);
-    });
-
-    it('returns new local database', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localTarget: 'my-new/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      });
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-new%2Fdb/);
-    });
-
-    it('returns new local for remote source', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        localTarget: 'my-new/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:5555'});
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-new%2Fdb/);
-    });
-
-    it("doesn't encode username and password if it is not supplied", () => {
-      const location = {
-        host: "dev:8000",
-        hostname: "dev",
-        href: "http://dev:8000/#database/animaldb/_all_docs",
-        origin: "http://dev:8000",
-        pathname: "/",
-        port: "8000",
-        protocol: "http:",
-      };
-
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        localTarget: 'my-new/db'
-      }, location);
-
-      expect(target.url).toBe("http://dev:8000/my-new%2Fdb");
-      expect(target.headers).toEqual({});
-
-      const targetNoAuth = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        localTarget: 'my-new/db',
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH
-      }, location);
-      expect(targetNoAuth.headers).toEqual({});
-    });
-
-    it('returns target with custom auth', () => {
-      FauxtonAPI.registerExtension('Replication:Auth', {
-        typeValue: 'TEST_CUSTOM_AUTH',
-        typeLabel: 'Test Custom Auth',
-        setCredentials: (repSourceOrTarget, auth) => {
-          repSourceOrTarget.auth = {
-            auth_creds: auth.creds
-          };
-        }
-      });
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localTarget: 'my-new/db',
-        targetAuth: { creds: 'sample_creds' },
-        targetAuthType: 'TEST_CUSTOM_AUTH'
-      });
-
-      expect(target.auth).toEqual({ auth_creds: 'sample_creds' });
-    });
-
-  });
-
-  describe('continuous', () => {
-
-    it('returns true for continuous', () => {
-      expect(continuous(Constants.REPLICATION_TYPE.CONTINUOUS)).toBeTruthy();
-    });
-
-    it('returns false for once', () => {
-      expect(continuous(Constants.REPLICATION_TYPE.ONE_TIME)).toBeFalsy();
-    });
-  });
-
-  describe('create target', () => {
-
-    it('returns true for new local', () => {
-      expect(createTarget(Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE)).toBeTruthy();
-    });
-
-    it('returns true for new remote', () => {
-      expect(createTarget(Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE)).toBeTruthy();
-    });
-
-    it('returns false for existing', () => {
-      expect(createTarget(Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE)).toBeFalsy();
-    });
-
-  });
-
-  describe('addDocId', () => {
-
-    it('adds doc id if it exists', () => {
-      const docId = 'docId';
-
-      expect(addDocIdAndRev(docId, null,  {})).toEqual({
-        _id: docId
-      });
-    });
-
-    it('adds doc and Rev if it exists', () => {
-      const docId = 'docId';
-      const _rev = "1-rev123";
-
-      expect(addDocIdAndRev(docId, _rev, {})).toEqual({
-        _id: docId,
-        _rev: _rev
-      });
-    });
-
-    it('does not add doc id if it does not exists', () => {
-      expect(addDocIdAndRev(null, null, {})).toEqual({});
-    });
-  });
-
-  describe("getDocUrl", () => {
-    it("scrubs passwords and decodes", () => {
-      const url = "http://userone:theirpassword@couchdb-host.com/my%2Fdb%2fhere";
-      const cleanedUrl = "http://couchdb-host.com/my/db/here";
-
-      expect(getDocUrl(url)).toEqual(cleanedUrl);
-    });
-  });
-
-  describe("encodeFullUrl", () => {
-    it("encodes db correctly", () => {
-      const url = "http://dev:5984/boom/aaaa";
-      const encodedUrl = encodeFullUrl(url);
-
-      expect(encodedUrl).toBe("http://dev:5984/boom%2Faaaa");
-    });
-
-  });
-
-  describe("decodeFullUrl", () => {
-
-    it("encodes db correctly", () => {
-      const url = "http://dev:5984/boom%2Faaaa";
-      const encodedUrl = decodeFullUrl(url);
-
-      expect(encodedUrl).toBe("http://dev:5984/boom/aaaa");
-    });
-
-  });
-
-  describe("getCredentialsFromUrl", () => {
-
-    it("can get username and password", () => {
-      const {username, password } = getCredentialsFromUrl("https://bob:marley@my-couchdb.com/db");
-
-      expect(username).toBe('bob');
-      expect(password).toBe('marley');
-    });
-
-    it("can get username and password with special characters", () => {
-      const {username, password } = getCredentialsFromUrl("http://bob:m@:/rley@my-couchdb.com/db");
-
-      expect(username).toBe('bob');
-      expect(password).toBe('m@:/rley');
-    });
-
-    it("returns nothing for no username and password", () => {
-      const {username, password } = getCredentialsFromUrl("http://my-couchdb.com/db");
-
-      expect(username).toBe('');
-      expect(password).toBe('');
-    });
-  });
-
-  describe("removeCredentialsFromUrl", () => {
-
-    it("can remove username and password", () => {
-      const url = removeCredentialsFromUrl("https://bob:marley@my-couchdb.com/db");
-      expect(url).toBe('https://my-couchdb.com/db');
-    });
-
-    it("returns url if no password", () => {
-      const url = removeCredentialsFromUrl("https://my-couchdb.com/db");
-      expect(url).toBe('https://my-couchdb.com/db');
-    });
-
-    it("can remove username and password with special characters", () => {
-      const url = removeCredentialsFromUrl("https://bob:m@:/rley@my-couchdb.com/db");
-      expect(url).toBe('https://my-couchdb.com/db');
-    });
-  });
-
-  describe('supportNewApi', () => {
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('returns true for support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {});
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeTruthy();
-        });
-    });
-
-    it('returns false for no support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {
-        status: 404,
-        body: {error: "missing"}
-      });
-
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeFalsy();
-        });
-    });
-
-  });
-
-  describe('setCredentials', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('returns true for support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {});
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeTruthy();
-        });
-    });
-
-    it('returns false for no support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {
-        status: 404,
-        body: {error: "missing"}
-      });
-
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeFalsy();
-        });
-    });
-
-  });
-
-  describe("fetchReplicationDocs", () => {
-    const _repDocs = {
-      "total_rows":2,
-      "offset":0,
-      "rows":[
-        {
-          "id":"_design/_replicator",
-          "key":"_design/_replicator",
-          "value":{
-            "rev":"1-1390740c4877979dbe8998382876556c"
-          },
-          "doc":{"_id":"_design/_replicator",
-            "_rev":"1-1390740c4877979dbe8998382876556c",
-            "language":"javascript",
-            "validate_doc_update":"\n    function(newDoc, oldDoc, userCtx) {\n        function reportError(error_msg) {\n            log('Error writing document `' + newDoc._id +\n                '\\' to the replicator database: ' + error_msg);\n            throw({forbidden: error_msg});\n        }\n\n        function validateEndpoint(endpoint, fieldName) {\n            if ((typeof endpoint !== 'string') &&\n                ((typeof endpoint !== 'object') || (endpoint === null))) {\n\n                reportError('The `' + fieldName + '\\' property must exist' +\n                    ' and be either a string or an object.');\n            }\n\n            if (typeof endpoint === 'object') {\n                if ((typeof endpoint.url !== 'string') || !endpoint.url) {\n                    reportError('The url property must exist in the `' +\n                        fieldName + '\\' field and must be a non-empty string.');\n                }\n\n                if ((typeof endpoint.auth !== 'undefined') &&\n                    ((typeof endpoint.auth !== 'object') ||\n                        endpoint.auth === null)) {\n\n                    reportError('`' + fieldName +\n                        '.auth\\' must be a non-null object.');\n                }\n\n                if ((typeof endpoint.headers !== 'undefined') &&\n                    ((typeof endpoint.headers !== 'object') ||\n                        endpoint.headers === null)) {\n\n                    reportError('`' + fieldName +\n                        '.headers\\' must be a non-null object.');\n                }\n            }\n        }\n\n        var isReplicator = (userCtx.roles.indexOf('_replicator') >= 0);\n        var isAdmin = (userCtx.roles.indexOf('_admin') >= 0);\n\n        if (oldDoc && !newDoc._deleted && !isReplicator &&\n            (oldDoc._replication_state === 'triggered')) {\n            reportError('Only the replicator can edit replication documents ' +\n                'that are in the triggered state.');\n        }\n\n        if (!newDoc._deleted) {\n            validateEndpoint(newDoc.source, 'source');\n            validateEndpoint(newDoc.target, 'target');\n\n            if ((typeof newDoc.create_target !== 'undefined') &&\n                (typeof newDoc.create_target !== 'boolean')) {\n\n                reportError('The `create_target\\' field must be a boolean.');\n            }\n\n            if ((typeof newDoc.continuous !== 'undefined') &&\n                (typeof newDoc.continuous !== 'boolean')) {\n\n                reportError('The `continuous\\' field must be a boolean.');\n            }\n\n            if ((typeof newDoc.doc_ids !== 'undefined') &&\n                !isArray(newDoc.doc_ids)) {\n\n                reportError('The `doc_ids\\' field must be an array of strings.');\n            }\n\n            if ((typeof newDoc.selector !== 'undefined') &&\n                (typeof newDoc.selector !== 'object')) {\n\n                reportError('The `selector\\' field must be an object.');\n            }\n\n            if ((typeof newDoc.filter !== 'undefined') &&\n                ((typeof newDoc.filter !== 'string') || !newDoc.filter)) {\n\n                reportError('The `filter\\' field must be a non-empty string.');\n            }\n\n            if ((typeof newDoc.doc_ids !== 'undefined') &&\n                (typeof newDoc.selector !== 'undefined')) {\n\n                reportError('`doc_ids\\' field is incompatible with `selector\\'.');\n            }\n\n            if ( ((typeof newDoc.doc_ids !== 'undefined') ||\n                  (typeof newDoc.selector !== 'undefined')) &&\n                 (typeof newDoc.filter !== 'undefined') ) {\n\n                reportError('`filter\\' field is incompatible with `selector\\' and `doc_ids\\'.');\n            }\n\n            if ((typeof newDoc.query_params !== 'undefined') &&\n                ((typeof newDoc.query_params !== 'object') ||\n                    newDoc.query_params === null)) {\n\n                reportError('The `query_params\\' field must be an object.');\n            }\n\n            if (newDoc.user_ctx) {\n                var user_ctx = newDoc.user_ctx;\n\n                if ((typeof user_ctx !== 'object') || (user_ctx === null)) {\n                    reportError('The `user_ctx\\' property must be a ' +\n                        'non-null object.');\n                }\n\n                if (!(user_ctx.name === null ||\n                    (typeof user_ctx.name === 'undefined') ||\n                    ((typeof user_ctx.name === 'string') &&\n                        user_ctx.name.length > 0))) {\n\n                    reportError('The `user_ctx.name\\' property must be a ' +\n                        'non-empty string or null.');\n                }\n\n                if (!isAdmin && (user_ctx.name !== userCtx.name)) {\n                    reportError('The given `user_ctx.name\\' is not valid');\n                }\n\n                if (user_ctx.roles && !isArray(user_ctx.roles)) {\n                    reportError('The `user_ctx.roles\\' property must be ' +\n                        'an array of strings.');\n                }\n\n                if (!isAdmin && user_ctx.roles) {\n                    for (var i = 0; i < user_ctx.roles.length; i++) {\n                        var role = user_ctx.roles[i];\n\n                        if (typeof role !== 'string' || role.length === 0) {\n                            reportError('Roles must be non-empty strings.');\n                        }\n                        if (userCtx.roles.indexOf(role) === -1) {\n                            reportError('Invalid role (`' + role +\n                                '\\') in the `user_ctx\\'');\n                        }\n                    }\n                }\n            } else {\n                if (!isAdmin) {\n                    reportError('The `user_ctx\\' property is missing (it is ' +\n                       'optional for admins only).');\n                }\n            }\n        } else {\n            if (!isAdmin) {\n                if (!oldDoc.user_ctx || (oldDoc.user_ctx.name !== userCtx.name)) {\n                    reportError('Replication documents can only be deleted by ' +\n                        'admins or by the users who created them.');\n                }\n            }\n        }\n    }\n"
-          }
-        },
-        {
-          "id":"_design/filters",
-          "key":"_design/filters",
-          "value":{
-            "rev":"1-1390740c4877979dbe8998382876556c"
-          },
-          "doc":{
-            "_id":"_design/filters",
-            "_rev":"1-1390740c4877979dbe8998382876556c",
-            "filters": {
-              "afilter": "\n function (doc, req) { if (doc.type === 'a-doc') { return true; } \n return false }"
-            }
-          }
-        },
-        {
-          "id":"c94d4839d1897105cb75e1251e0003ea",
-          "key":"c94d4839d1897105cb75e1251e0003ea",
-          "value":{
-            "rev":"3-4559cb522de85ce03bd0e1991025e89a"
-          },
-          "doc":{"_id":"c94d4839d1897105cb75e1251e0003ea",
-            "_rev":"3-4559cb522de85ce03bd0e1991025e89a",
-            "user_ctx":{
-              "name":"tester",
-              "roles":["_admin", "_reader", "_writer"]},
-            "source":{
-              "headers":{
-                "Authorization":"Basic dGVzdGVyOnRlc3RlcnBhc3M="
-              },
-              "url":"http://dev:5984/animaldb"},
-            "target":{
-              "headers":{
-                "Authorization":"Basic dGVzdGVyOnRlc3RlcnBhc3M="},
-              "url":"http://dev:5984/animaldb-clone"
-            },
-            "create_target":true,
-            "continuous":false,
-            "owner":"tester",
-            "_replication_state":"completed",
-            "_replication_state_time":"2017-02-28T12:16:28+00:00",
-            "_replication_id":"0ce2939af29317b5dbe11c15570ddfda",
-            "_replication_stats":{
-              "revisions_checked":14,
-              "missing_revisions_found":14,
-              "docs_read":14,
-              "docs_written":14,
-              "changes_pending":null,
-              "doc_write_failures":0,
-              "checkpointed_source_seq":"15-g1AAAAJDeJyV0N0NgjAQAOAKRnlzBJ3AcKWl9Uk20ZbSEII4gm6im-gmugke1AQJ8aFpck3u50vuakJIVIaGrJqzKSADKrYxPqixECii123bVmWoFidMLGVsqEjYtP0voTcY9f6rzHqFKcglsz5K1imHkcJTnoJVPsqxUy4jxepEioJ7KM0cI7nih9BtkDSlkAif2zjp7qRHJwW9lLNdDkZ6S08nvQZJMsNT4b_d20k_d4oVE1aK6VT1AXTajes"
-            }
-          }
-        }
-      ]};
-
-    const _schedDocs = {
-      "offset": 0,
-      "docs": [
-        {
-          "database":"_replicator",
-          "doc_id":"c94d4839d1897105cb75e1251e0003ea",
-          "id":null,
-          "state":"completed",
-          "error_count":0,
-          "info":{
-            "revisions_checked":0,
-            "missing_revisions_found":0,
-            "docs_read":0,
-            "docs_written":0,
-            "changes_pending":null,
-            "doc_write_failures":0,
-            "checkpointed_source_seq":"56-g1AAAAGweJzLYWBgYMlgTmFQTElKzi9KdUhJMjTQy00tyixJTE_VS87JL01JzCvRy0styQEqZUpkSLL___9_VgZzIm8uUIDd1NIkNSk5LYVBAW6AKXb9aLYY47ElyQFIJtVDLeIBW2ScbGJiYGJKjBloNhnisSmPBUgyNAApoGX7QbaJg21LTDEwNE8zR_aWCVGW4VCFZNkBiGVgr3GALTNLSzQ0T0xEtgyHm7MAbEaMZw"},
-          "last_updated":"2017-03-07T14:46:17Z",
-          "start_time":"2017-03-07T14:46:16Z"
-        }
-      ],
-      "total": 1
-    };
-
-    describe('old api', () => {
-      afterEach(() => {
-        fetchMock.reset();
-      });
-
-      it("returns parsedReplicationDocs and ignores all design docs", () => {
-        fetchMock.getOnce('./_scheduler/jobs', 404);
-        fetchMock.get('./_replicator/_all_docs?include_docs=true&limit=100', _repDocs);
-        return supportNewApi(true)
-          .then(fetchReplicationDocs)
-          .then(docs => {
-            expect(docs.length).toBe(1);
-            expect(docs[0]._id).toBe("c94d4839d1897105cb75e1251e0003ea");
-          });
-      });
-    });
-
-    describe('new api', () => {
-      afterEach(() => {
-        fetchMock.reset();
-      });
-
-      it("returns parsedReplicationDocs", () => {
-        fetchMock.getOnce('./_scheduler/jobs', 200);
-        fetchMock.get('./_replicator/_all_docs?include_docs=true&limit=100', _repDocs);
-        fetchMock.get('./_scheduler/docs?include_docs=true', _schedDocs);
-        return supportNewApi(true)
-          .then(fetchReplicationDocs)
-          .then(docs => {
-            expect(docs.length).toBe(1);
-            expect(docs[0]._id).toBe("c94d4839d1897105cb75e1251e0003ea");
-            expect(docs[0].stateTime.toDateString()).toBe((new Date('2017-03-07T14:46:17')).toDateString());
-          });
-      });
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/auth-options.test.js b/app/addons/replication/__tests__/auth-options.test.js
deleted file mode 100644
index b9aba5d..0000000
--- a/app/addons/replication/__tests__/auth-options.test.js
+++ /dev/null
@@ -1,57 +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.
-
-import { mount } from 'enzyme';
-import React from "react";
-import sinon from "sinon";
-import utils from "../../../../test/mocha/testUtils";
-import FauxtonAPI from '../../../core/api';
-import { ReplicationAuth } from '../components/auth-options';
-import Constants from '../constants';
-
-const {restore}  = utils;
-
-describe('ReplicationAuth', () => {
-
-  describe('custom help shows up when correct auth type is selected', () => {
-
-    afterEach(() => {
-      restore(FauxtonAPI.getExtensions);
-    });
-
-    it('returns true for local source and target selected', () => {
-      const testAuthHelp = {
-        authType: Constants.REPLICATION_AUTH_METHOD.BASIC,
-        helpText: 'test_help'
-      };
-      sinon.stub(FauxtonAPI, 'getExtensions').withArgs('Replication:Auth-help').returns([testAuthHelp]);
-
-      const newRepAuth = mount(<ReplicationAuth
-        authId="test-auth"
-        authType=""
-        credentials={{}}
-        onChangeAuth={() => {}}
-        onChangeAuthType={(newType) => {
-          newRepAuth.setProps({authType: newType});
-        }} />);
-
-      expect(newRepAuth.find('div.replication__help-tile').exists()).toBe(false);
-      newRepAuth.find('select#select-test-auth').first().simulate('change', {
-        target: {
-          value: 'BASIC_AUTH'
-        }
-      });
-      // Help is displayed after selecting the associated auth type
-      expect(newRepAuth.find('div.replication__help-tile').exists()).toBe(true);
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/common-table.test.js b/app/addons/replication/__tests__/common-table.test.js
deleted file mode 100644
index 50af1de..0000000
--- a/app/addons/replication/__tests__/common-table.test.js
+++ /dev/null
@@ -1,40 +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.
-
-import { shallow } from 'enzyme';
-import {formatUrl} from '../components/common-table';
-
-describe('Common Table Component', () => {
-
-  describe("formatUrl", () => {
-
-    beforeEach(() => {
-      window.history.pushState({}, 'Test title', '/my-db');
-    });
-
-    it("renders a url with tricky password characters", () => {
-      const url = "http://hello:h#$!^@localhost:8000/my-db";
-      const el = shallow(formatUrl(url));
-      expect(el.find('a').prop('href')).toBe('#/database/my-db/_all_docs');
-    });
-
-    it("renders a url with no password characters", () => {
-      const url = "http://localhost:8000/my-db";
-      const el = shallow(formatUrl(url));
-      expect(el.find('a').prop('href')).toBe('#/database/my-db/_all_docs');
-    });
-
-    it('renders a with a default url if no url is supplied', () => {
-      expect(formatUrl()).toBe('');
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/helpers.tests.js b/app/addons/replication/__tests__/helpers.tests.js
deleted file mode 100644
index 20b1715..0000000
--- a/app/addons/replication/__tests__/helpers.tests.js
+++ /dev/null
@@ -1,34 +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.
-
-import helpers from '../helpers';
-
-describe('Replication Helpers - getDatabaseLabel', () => {
-
-  it('returns database name for string', () => {
-    const db = 'http://tester:testerpass@127.0.0.1/db/fancy%2Fdb%2Fname';
-
-    const res = helpers.getDatabaseLabel(db);
-
-    expect(res).toBe('fancy%2Fdb%2Fname');
-  });
-
-  it('returns database name for object', () => {
-    const db = {
-      url: 'http://tester:testerpass@127.0.0.1/fancy'
-    };
-
-    const res = helpers.getDatabaseLabel(db);
-    expect(res).toBe('fancy');
-  });
-
-});
diff --git a/app/addons/replication/__tests__/newreplication.test.js b/app/addons/replication/__tests__/newreplication.test.js
deleted file mode 100644
index 11ee0c6..0000000
--- a/app/addons/replication/__tests__/newreplication.test.js
+++ /dev/null
@@ -1,416 +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.
-import React from "react";
-import utils from "../../../../test/mocha/testUtils";
-import FauxtonAPI from '../../../core/api';
-import { shallow } from 'enzyme';
-import sinon from "sinon";
-import NewReplication from '../components/newreplication';
-import Constants from '../constants';
-
-const {restore}  = utils;
-
-describe('New Replication Component', () => {
-
-  describe('validation', () => {
-
-    afterEach(() => {
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('returns true for local source and target selected', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"mydb"}
-        localSource={"anotherdb"}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        remoteSource={""}
-        remoteTarget={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeTruthy();
-    });
-
-    it('returns true for remote source and target selected', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-        remoteTarget={"https://mydb.com/db2"}
-        remoteSource={"https://mydb.com/db1"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeTruthy();
-    });
-
-    it('returns false for invalid remote source', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-        remoteTarget={"https://mydb.com/db"}
-        remoteSource={"anotherdb"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeFalsy();
-    });
-
-    it('returns false for invalid remote target', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-        remoteTarget={"anotherdb"}
-        remoteSource={"https://mydb.com/db"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeFalsy();
-    });
-
-    it("warns if new local database exists", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={["existingdb"]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"existingdb"}
-        localSource={"anotherdb"}
-        remoteTarget={""}
-        remoteSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/database already exists/);
-    });
-
-    it("warns if database name is wrong", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"existing db"}
-        localSource={"anotherdb"}
-        remoteTarget={""}
-        remoteSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/may not contain any spaces/);
-    });
-
-    it("warns if database is same for local", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"samedb"}
-        localSource={"samedb"}
-        remoteTarget={""}
-        remoteSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/Cannot replicate a database to itself/);
-    });
-
-    it("warns if database is same for remote", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={"http://localhost/samedb"}
-        remoteSource={"http://localhost/samedb"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/Cannot replicate a database to itself/);
-    });
-  });
-
-  describe('confirmButtonEnabled', () => {
-
-    it('returns false for default', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeFalsy();
-    });
-
-    it('returns false for empty remote source', () => {
-      const newreplication = shallow(<NewReplication
-        submittedNoChange={false}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        locallocalTargetKnown={false}
-        locallocalSourceKnown={false}
-        databases={[]}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeFalsy();
-    });
-
-    it('returns false for empty local source', () => {
-      const newreplication = shallow(<NewReplication
-        submittedNoChange={false}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        locallocalTargetKnown={false}
-        locallocalSourceKnown={false}
-        remoteSource={'db'}
-        databases={[]}
-        remoteTarget={""}
-        localTarget={""}
-        localSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeFalsy();
-    });
-
-    it("returns true for all details filled in", () => {
-      const newreplication = shallow(<NewReplication
-        submittedNoChange={false}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        remoteSource={'db'}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"new-db"}
-        locallocalTargetKnown={false}
-        locallocalSourceKnown={false}
-        databases={[]}
-        remoteTarget={""}
-        localSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeTruthy();
-    });
-
-  });
-
-  describe("runReplicationChecks", () => {
-
-    it("shows conflict modal for existing replication doc", (done) => {
-      const showConflictModal = () => {
-        expect(true).toBeTruthy();
-        done();
-      };
-
-      const checkReplicationDocID = () => {
-        const promise = FauxtonAPI.Deferred();
-        promise.resolve(true);
-        return promise;
-      };
-      const newreplication = shallow(<NewReplication
-        replicationDocName="my-doc-id"
-        checkReplicationDocID={checkReplicationDocID}
-        showConflictModal={showConflictModal}
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().runReplicationChecks();
-    });
-
-    it("calls auth checks", () => {
-      let called = false;
-      const checkAuth = () => {called = true;};
-      const checkReplicationDocID = () => {
-        const promise = FauxtonAPI.Deferred();
-        promise.resolve(false);
-        return promise;
-      };
-      const newreplication = shallow(<NewReplication
-        replicationDocName={''}
-        checkReplicationDocID={checkReplicationDocID}
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkAuth = checkAuth;
-      newreplication.instance().runReplicationChecks();
-      expect(called).toBeTruthy();
-    });
-
-  });
-
-  describe("checkAuth", () => {
-
-    afterEach(() => {
-      restore(FauxtonAPI.addNotification);
-      FauxtonAPI.session = undefined;
-    });
-
-    it("prompts user for local target auth method", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-      FauxtonAPI.session = {
-        isAdminParty: () => false
-      };
-      const newreplication = shallow(<NewReplication
-        replicationDocName="my-doc-id"
-        checkReplicationDocID={() => {}}
-        showConflictModal={() => {}}
-        databases={[]}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        targetAuthType={Constants.REPLICATION_AUTH_METHOD.NO_AUTH}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationType={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkAuth();
-      sinon.assert.calledWith(spy, {
-        msg: 'Missing credentials for local target database.',
-        clear: true,
-        type: 'error'
-      });
-    });
-  });
-
-});
diff --git a/app/addons/replication/__tests__/target.test.js b/app/addons/replication/__tests__/target.test.js
deleted file mode 100644
index 16b879b..0000000
--- a/app/addons/replication/__tests__/target.test.js
+++ /dev/null
@@ -1,81 +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.
-
-import React from 'react';
-import { mount } from 'enzyme';
-import { ReplicationTarget } from '../components/target';
-import Constants from '../constants';
-
-describe('ReplicationTarget', () => {
-
-  describe('NewTargetDatabaseOptionsRow', () => {
-
-    const defaultProps = {
-      databases: ["db1"],
-      onTargetChange: () => {},
-      onLocalTargetChange: () => {},
-      onRemoteTargetChange: () => {},
-      remoteTarget: "",
-      localTarget: "",
-      replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-      onTargetDatabasePartitionedChange: () => {},
-      targetDatabasePartitioned: false,
-      allowNewPartitionedLocalDbs: false
-    };
-
-    it('Does not show partitioned option for existing remote database', () => {
-      const repRemoteTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE}
-      />);
-
-      expect(repRemoteTarget.find('input#target-db-is-partitioned').exists()).toBe(false);
-    });
-
-    it('Does not show partitioned option for existing local database', () => {
-      const repLocalTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE}
-      />);
-
-      expect(repLocalTarget.find('input#target-db-is-partitioned').exists()).toBe(false);
-    });
-
-    it('Shows partitioned option for new remote database', () => {
-      const repRemoteTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-      />);
-
-      expect(repRemoteTarget.find('input#target-db-is-partitioned').exists()).toBe(true);
-    });
-
-    it('Shows partitioned option for new local database', () => {
-      const repLocalTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        allowNewPartitionedLocalDbs={false}
-      />);
-
-      var input = repLocalTarget.find('input#target-db-is-partitioned');
-      expect(input.exists()).toBe(true);
-      expect(input.prop("disabled")).toBeTruthy();
-
-      repLocalTarget.setProps({allowNewPartitionedLocalDbs: true});
-      input = repLocalTarget.find('input#target-db-is-partitioned');
-      expect(input.exists()).toBe(true);
-      expect(input.prop("disabled")).toBeFalsy();
-    });
-
-  });
-
-});
diff --git a/app/addons/replication/actions.js b/app/addons/replication/actions.js
deleted file mode 100644
index 745a361..0000000
--- a/app/addons/replication/actions.js
+++ /dev/null
@@ -1,418 +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.
-import base64 from 'base-64';
-import FauxtonAPI from '../../core/api';
-import {get, post} from '../../core/ajax';
-import ActionTypes from './actiontypes';
-import Helpers from './helpers';
-import MainHelper from '../../helpers';
-import Constants from './constants';
-import {
-  supportNewApi,
-  createReplicationDoc,
-  fetchReplicateInfo,
-  fetchReplicationDocs,
-  decodeFullUrl,
-  deleteReplicatesApi,
-  createReplicatorDB
-} from './api';
-
-
-export const initReplicator = (routeLocalSource, localSource) => dispatch => {
-  if (routeLocalSource && routeLocalSource !== localSource) {
-    dispatch({
-      type: ActionTypes.INIT_REPLICATION,
-      options: {
-        localSource: routeLocalSource
-      }
-    });
-  }
-};
-
-export const getDatabasesList = () => dispatch => {
-  const url = MainHelper.getServerUrl("/_all_dbs");
-  get(url)
-    .then((databases) => {
-      dispatch({
-        type: ActionTypes.REPLICATION_DATABASES_LOADED,
-        options: {
-          databases
-        }
-      });
-    });
-};
-
-export const replicate = (params) => dispatch => {
-  const replicationDoc = createReplicationDoc(params);
-  const url = MainHelper.getServerUrl("/_replicator");
-  const promise = post(url, replicationDoc);
-
-  const source = Helpers.getDatabaseLabel(replicationDoc.source);
-  const target = Helpers.getDatabaseLabel(replicationDoc.target);
-
-  dispatch({
-    type: ActionTypes.REPLICATION_STARTING,
-  });
-
-  const handleError = (json) => {
-    FauxtonAPI.addNotification({
-      msg: json.reason,
-      type: 'error',
-      clear: true
-    });
-  };
-
-  // Return promise for testing
-  return promise
-    .then(json => {
-      if (!json.ok) {
-        throw json;
-      }
-
-      FauxtonAPI.addNotification({
-        msg: `Replication from <code>${decodeURIComponent(source)}</code> to <code>${decodeURIComponent(target)}</code> has been scheduled.`,
-        type: 'success',
-        escape: false,
-        clear: true
-      });
-
-      dispatch(getReplicationActivity());
-      FauxtonAPI.navigate('#/replication');
-    }).catch(json => {
-      if (json.error && json.error === "not_found") {
-        return createReplicatorDB().then(() => {
-          return replicate(params)(dispatch);
-        }).catch(handleError);
-      }
-      handleError(json);
-    });
-};
-
-export const updateFormField = (fieldName, value) => {
-  return {
-    type: ActionTypes.REPLICATION_UPDATE_FORM_FIELD,
-    options: {
-      fieldName: fieldName,
-      value: value
-    }
-  };
-};
-
-export const clearReplicationForm = () => {
-  return { type: ActionTypes.REPLICATION_CLEAR_FORM };
-};
-
-export const getReplicationActivity = () => dispatch => {
-  dispatch({
-    type: ActionTypes.REPLICATION_FETCHING_STATUS,
-  });
-
-  supportNewApi()
-    .then(supportNewApi => {
-      return fetchReplicationDocs(supportNewApi);
-    })
-    .then(docs => {
-      dispatch({
-        type: ActionTypes.REPLICATION_STATUS,
-        options: docs
-      });
-    });
-};
-
-export const getReplicateActivity = () => dispatch => {
-  supportNewApi()
-    .then(newApi => {
-      if (!newApi) {
-        return;
-      }
-
-      dispatch({
-        type: ActionTypes.REPLICATION_FETCHING_REPLICATE_STATUS,
-      });
-
-      fetchReplicateInfo()
-        .then(replicateInfo => {
-          dispatch({
-            type: ActionTypes.REPLICATION_REPLICATE_STATUS,
-            options: replicateInfo
-          });
-        });
-    });
-};
-
-export const filterDocs = (filter) => {
-  return {
-    type: ActionTypes.REPLICATION_FILTER_DOCS,
-    options: filter
-  };
-};
-
-export const filterReplicate = (filter) => {
-  return {
-    type: ActionTypes.REPLICATION_FILTER_REPLICATE,
-    options: filter
-  };
-};
-
-export const selectAllDocs = () => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_ALL_DOCS
-  };
-};
-
-export const selectDoc = (id) => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_DOC,
-    options: id
-  };
-};
-
-export const selectAllReplicates = () => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_ALL_REPLICATE
-  };
-};
-
-export const selectReplicate = (id) => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_REPLICATE,
-    options: id
-  };
-};
-
-export const clearSelectedDocs = () => {
-  return {
-    type: ActionTypes.REPLICATION_CLEAR_SELECTED_DOCS
-  };
-};
-
-export const clearSelectedReplicates = () => {
-  return {
-    type: ActionTypes.REPLICATION_CLEAR_SELECTED_REPLICATES
-  };
-};
-
-export const deleteDocs = (docs) => dispatch => {
-  const bulkDocs = docs.map(({raw: doc}) => {
-    doc._deleted = true;
-    return doc;
-  });
-
-  FauxtonAPI.addNotification({
-    msg: `Deleting doc${bulkDocs.length > 1 ? 's' : ''}.`,
-    type: 'success',
-    escape: false,
-    clear: true
-  });
-
-  const url = MainHelper.getServerUrl('/_replicator/_bulk_docs');
-  post(url, {docs: bulkDocs}, {raw: true})
-    .then(resp => {
-      if (!resp.ok) {
-        throw resp;
-      }
-      return resp;
-    })
-    .then(() => {
-
-      let msg = 'The selected documents have been deleted.';
-      if (docs.length === 1) {
-        msg = `Document <code>${docs[0]._id}</code> has been deleted`;
-      }
-
-      FauxtonAPI.addNotification({
-        msg: msg,
-        type: 'success',
-        escape: false,
-        clear: true
-      });
-
-      dispatch(clearSelectedDocs());
-      dispatch(getReplicationActivity());
-    })
-    .catch(resp => {
-      resp.json()
-        .then(error => {
-          FauxtonAPI.addNotification({
-            msg: error.reason,
-            type: 'error',
-            clear: true
-          });
-        });
-
-    });
-};
-
-export const deleteReplicates = (replicates) => dispatch => {
-  FauxtonAPI.addNotification({
-    msg: `Deleting _replicate${replicates.length > 1 ? 's' : ''}.`,
-    type: 'success',
-    escape: false,
-    clear: true
-  });
-
-  deleteReplicatesApi(replicates)
-    .then(() => {
-      let msg = 'The selected replications have been deleted.';
-      if (replicates.length === 1) {
-        msg = `Replication <code>${replicates[0]._id}</code> has been deleted`;
-      }
-
-      dispatch(clearSelectedReplicates());
-      dispatch(getReplicateActivity());
-
-      FauxtonAPI.addNotification({
-        msg: msg,
-        type: 'success',
-        escape: false,
-        clear: true
-      });
-    }, (xhr) => {
-      const errorMessage = JSON.parse(xhr.responseText);
-      FauxtonAPI.addNotification({
-        msg: errorMessage.reason,
-        type: 'error',
-        clear: true
-      });
-    });
-};
-
-const getAuthTypeAndCredentials = (repSourceOrTarget) => {
-  const authTypeAndCreds = {
-    type: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-    creds: {}
-  };
-  if (repSourceOrTarget.headers && repSourceOrTarget.headers.Authorization) {
-    // Removes 'Basic ' prefix
-    const encodedCreds = repSourceOrTarget.headers.Authorization.substring(6);
-    const decodedCreds = base64.decode(encodedCreds);
-    authTypeAndCreds.type = Constants.REPLICATION_AUTH_METHOD.BASIC;
-    authTypeAndCreds.creds = {
-      username: decodedCreds.split(':')[0],
-      password: decodedCreds.split(':')[1]
-    };
-    return authTypeAndCreds;
-  }
-
-  // Tries to get creds using one of the custom auth methods
-  // The extension should provide:
-  //   - 'getCredentials(obj)' method that extracts the credentials from obj which is the 'target'/'source' field of the replication doc.
-  //   - 'typeValue' field with an arbitrary ID representing the auth type the extension supports.
-  const authExtensions = FauxtonAPI.getExtensions('Replication:Auth');
-  let credentials = undefined;
-  let customAuthType = undefined;
-  if (authExtensions) {
-    authExtensions.map(ext => {
-      if (!credentials && ext.getCredentials) {
-        credentials = ext.getCredentials(repSourceOrTarget);
-        customAuthType = ext.typeValue;
-      }
-    });
-  }
-  if (credentials) {
-    authTypeAndCreds.type = customAuthType;
-    authTypeAndCreds.creds = credentials;
-  }
-  return authTypeAndCreds;
-};
-
-const getTargetDatabasePartitioned = (createTargetParams) => {
-  if (createTargetParams && createTargetParams.partitioned === true) {
-    return true;
-  }
-  return false;
-};
-
-export const getReplicationStateFrom = (id) => dispatch => {
-  dispatch({
-    type: ActionTypes.REPLICATION_FETCHING_FORM_STATE
-  });
-
-  const url = MainHelper.getServerUrl(`/_replicator/${encodeURIComponent(id)}`);
-  get(url)
-    .then((doc) => {
-      const stateDoc = {
-        replicationDocName: doc._id,
-        replicationType: doc.continuous ? Constants.REPLICATION_TYPE.CONTINUOUS : Constants.REPLICATION_TYPE.ONE_TIME,
-      };
-
-      const sourceUrl = _.isObject(doc.source) ? doc.source.url : doc.source;
-      const targetUrl = _.isObject(doc.target) ? doc.target.url : doc.target;
-
-      if (sourceUrl.indexOf(window.location.hostname) > -1) {
-        const url = new URL(sourceUrl);
-        stateDoc.replicationSource = Constants.REPLICATION_SOURCE.LOCAL;
-        stateDoc.localSource = decodeURIComponent(url.pathname.slice(1));
-      } else {
-        stateDoc.replicationSource = Constants.REPLICATION_SOURCE.REMOTE;
-        stateDoc.remoteSource = decodeFullUrl(sourceUrl);
-      }
-      const sourceAuth = getAuthTypeAndCredentials(doc.source);
-      stateDoc.sourceAuthType = sourceAuth.type;
-      stateDoc.sourceAuth = sourceAuth.creds;
-
-      if (targetUrl.indexOf(window.location.hostname) > -1) {
-        const url = new URL(targetUrl);
-        stateDoc.replicationTarget = Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE;
-        stateDoc.localTarget = decodeURIComponent(url.pathname.slice(1));
-      } else {
-        stateDoc.replicationTarget = Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE;
-        stateDoc.remoteTarget = decodeFullUrl(targetUrl);
-      }
-      const targetAuth = getAuthTypeAndCredentials(doc.target);
-      stateDoc.targetAuthType = targetAuth.type;
-      stateDoc.targetAuth = targetAuth.creds;
-
-      stateDoc.targetDatabasePartitioned = getTargetDatabasePartitioned(doc.create_target_params);
-
-      dispatch({
-        type: ActionTypes.REPLICATION_SET_STATE_FROM_DOC,
-        options: stateDoc
-      });
-
-    })
-    .catch(error => {
-      FauxtonAPI.addNotification({
-        msg: error.reason,
-        type: 'error',
-        clear: true
-      });
-    });
-};
-
-export const showConflictModal = () => {
-  return {
-    type: ActionTypes.REPLICATION_SHOW_CONFLICT_MODAL
-  };
-};
-
-export const hideConflictModal = () => {
-  return {
-    type: ActionTypes.REPLICATION_HIDE_CONFLICT_MODAL
-  };
-};
-
-export const changeActivitySort = (sort) => {
-  return {
-    type: ActionTypes.REPLICATION_CHANGE_ACTIVITY_SORT,
-    options: sort
-  };
-};
-
-export const checkForNewApi = () => dispatch => {
-  supportNewApi().then(newApi => {
-    dispatch({
-      type: ActionTypes.REPLICATION_SUPPORT_NEW_API,
-      options: newApi
-    });
-  });
-};
diff --git a/app/addons/replication/actiontypes.js b/app/addons/replication/actiontypes.js
deleted file mode 100644
index 7143868..0000000
--- a/app/addons/replication/actiontypes.js
+++ /dev/null
@@ -1,42 +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.
-
-export default {
-  INIT_REPLICATION: 'INIT_REPLICATION',
-  CHANGE_REPLICATION_SOURCE: 'CHANGE_REPLICATION_SOURCE',
-  REPLICATION_DATABASES_LOADED: 'REPLICATION_DATABASES_LOADED',
-  REPLICATION_UPDATE_FORM_FIELD: 'REPLICATION_UPDATE_FORM_FIELD',
-  REPLICATION_CLEAR_FORM: 'REPLICATION_CLEAR_FORM',
-  REPLICATION_STARTING: 'REPLICATION_STARTING',
-  REPLICATION_STATUS: 'REPLICATION_STATUS',
-  REPLICATION_FETCHING_STATUS: 'REPLICATION_FETCHING_STATUS',
-  REPLICATION_FILTER_DOCS: 'REPLICATION_FILTER_DOCS',
-  REPLICATION_TOGGLE_ALL_DOCS: 'REPLICATION_TOGGLE_ALL_DOCS',
-  REPLICATION_TOGGLE_DOC: 'REPLICATION_TOGGLE_DOC',
-  REPLICATION_DELETE_DOCS: 'REPLICATION_DELETE_DOCS',
-  REPLICATION_SET_STATE_FROM_DOC: 'REPLICATION_SET_STATE_FROM_DOC',
-  REPLICATION_SHOW_CONFLICT_MODAL: 'REPLICATION_SHOW_CONFLICT_MODAL',
-  REPLICATION_HIDE_CONFLICT_MODAL: 'REPLICATION_HIDE_CONFLICT_MODAL',
-  REPLICATION_CHANGE_ACTIVITY_SORT: 'REPLICATION_CHANGE_ACTIVITY_SORT',
-  REPLICATION_CLEAR_SELECTED_DOCS: 'REPLICATION_CLEAR_SELECTED_DOCS',
-  REPLICATION_CHANGE_TAB_SECTION: 'REPLICATION_CHANGE_TAB_SECTION',
-  REPLICATION_FETCHING_REPLICATE_STATUS: 'REPLICATION_FETCHING_REPLICATE_STATUS',
-  REPLICATION_REPLICATE_STATUS: 'REPLICATION_REPLICATE_STATUS',
-  REPLICATION_SUPPORT_NEW_API: 'REPLICATION_SUPPORT_NEW_API',
-  REPLICATION_FILTER_REPLICATE: 'REPLICATION_FILTER_REPLICATE',
-  REPLICATION_TOGGLE_ALL_REPLICATE: 'REPLICATION_TOGGLE_ALL_REPLICATE',
-  REPLICATION_TOGGLE_REPLICATE: 'REPLICATION_TOGGLE_REPLICATE',
-  REPLICATION_CLEAR_SELECTED_REPLICATES: 'REPLICATION_CLEAR_SELECTED_REPLICATES',
-  REPLICATION_FETCHING_FORM_STATE: 'REPLICATION_FETCHING_FORM_STATE',
-  REPLICATION_HIDE_PASSWORD_MODAL: 'REPLICATION_HIDE_PASSWORD_MODAL',
-  REPLICATION_SHOW_PASSWORD_MODAL: 'REPLICATION_SHOW_PASSWORD_MODAL'
-};
diff --git a/app/addons/replication/api.js b/app/addons/replication/api.js
deleted file mode 100644
index 75dee5f..0000000
--- a/app/addons/replication/api.js
+++ /dev/null
@@ -1,418 +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.
-
-import '@webcomponents/url';
-import Constants from './constants';
-import FauxtonAPI from '../../core/api';
-import Helpers from '../../helpers';
-import {get, post, put} from '../../core/ajax';
-import base64 from 'base-64';
-import _ from 'lodash';
-
-let newApiPromise = null;
-export const supportNewApi = (forceCheck) => {
-  if (!newApiPromise || forceCheck) {
-    newApiPromise = new FauxtonAPI.Promise((resolve) => {
-      const url = Helpers.getServerUrl('/_scheduler/jobs');
-      get(url, {raw: true})
-        .then(resp => {
-          if (resp.status > 202) {
-            return resolve(false);
-          }
-          resolve(true);
-        });
-    });
-  }
-
-  return newApiPromise;
-};
-
-export const encodeFullUrl = (fullUrl) => {
-  if (!fullUrl) {return '';}
-  const url = new URL(fullUrl);
-  return `${url.origin}/${encodeURIComponent(url.pathname.slice(1))}`;
-};
-
-export const decodeFullUrl = (fullUrl) => {
-  if (!fullUrl) {return '';}
-  const url = new URL(fullUrl);
-  return `${url.origin}/${decodeURIComponent(url.pathname.slice(1))}`;
-};
-
-export const getUsername = () => {
-  return FauxtonAPI.session.user().name;
-};
-
-export const getAuthHeaders = (username, password) => {
-  if (!username || !password) {
-    return {};
-  }
-  return {
-    'Authorization': 'Basic ' + base64.encode(username + ':' + password)
-  };
-};
-
-export const getCredentialsFromUrl = (url) => {
-  const index = url.lastIndexOf('@');
-  if (index === -1) {
-    return {
-      username: '',
-      password: ''
-    };
-  }
-
-  const startIndex = url.startsWith("https") ? 8 : 7;
-  const rawCreds = url.slice(startIndex, index);
-  const colonIndex = rawCreds.indexOf(':');
-  const username = rawCreds.slice(0, colonIndex);
-  const password = rawCreds.slice(colonIndex + 1, rawCreds.length);
-
-  return {
-    username,
-    password
-  };
-};
-
-export const removeCredentialsFromUrl = (url) => {
-  const index = url.lastIndexOf('@');
-  if (index === -1) {
-    return url;
-  }
-
-  const protocol = url.startsWith("https") ? "https://" : 'http://';
-  const cleanUrl = url.slice(index + 1);
-  return protocol + cleanUrl;
-};
-
-export const getSource = ({
-  replicationSource,
-  localSource,
-  remoteSource,
-  sourceAuthType,
-  sourceAuth
-},
-{origin, pathname} = window.location) => {
-
-  const source = {};
-  if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL) {
-    const encodedLocalTarget = encodeURIComponent(localSource);
-
-    const root = Helpers.getRootUrl({origin, pathname});
-    source.url = `${root}${encodedLocalTarget}`;
-  } else {
-    source.url = encodeFullUrl(removeCredentialsFromUrl(remoteSource));
-  }
-
-  setCredentials(source, sourceAuthType, sourceAuth);
-  return source;
-};
-
-export const getTarget = ({
-  replicationTarget,
-  localTarget,
-  remoteTarget,
-  targetAuthType,
-  targetAuth
-},
-//this allows us to mock out window.location for our tests
-{origin, pathname} = window.location) => {
-
-  const target = {};
-  if (replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE ||
-        replicationTarget === Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE) {
-    target.url = encodeFullUrl(removeCredentialsFromUrl(remoteTarget));
-  } else {
-    const encodedLocalTarget = encodeURIComponent(localTarget);
-    const root = Helpers.getRootUrl({origin, pathname});
-    target.url = `${root}${encodedLocalTarget}`;
-  }
-
-  setCredentials(target, targetAuthType, targetAuth);
-  return target;
-};
-
-const setCredentials = (target, authType, auth) => {
-  if (!authType || authType === Constants.REPLICATION_AUTH_METHOD.NO_AUTH) {
-    target.headers = {};
-  } else if (authType === Constants.REPLICATION_AUTH_METHOD.BASIC) {
-    target.headers = getAuthHeaders(auth.username, auth.password);
-  } else {
-    // Tries to set creds using one of the custom auth methods
-    // The extension should provide:
-    //   - 'setCredentials(target, auth)' method which sets the 'auth' credentials into 'target' which is the 'target'/'source' field of the replication doc.
-    const authExtensions = FauxtonAPI.getExtensions('Replication:Auth');
-    if (authExtensions) {
-      authExtensions.filter(ext => ext.typeValue === authType).map(ext => {
-        if (ext.setCredentials) {
-          ext.setCredentials(target, auth);
-        }
-      });
-    }
-  }
-};
-
-export const createTarget = (replicationTarget) => {
-  if (_.includes([
-    Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-    Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE],
-  replicationTarget)) {
-    return true;
-  }
-
-  return false;
-};
-
-export const continuous = (replicationType) => {
-  if (replicationType === Constants.REPLICATION_TYPE.CONTINUOUS) {
-    return true;
-  }
-
-  return false;
-};
-
-export const addDocIdAndRev = (docId, _rev, doc) => {
-  if (docId) {
-    doc._id = docId;
-  }
-
-  if (_rev) {
-    doc._rev = _rev;
-  }
-
-  return doc;
-};
-
-export const createReplicationDoc = ({
-  replicationTarget,
-  replicationSource,
-  replicationType,
-  replicationDocName,
-  localTarget,
-  localSource,
-  remoteTarget,
-  remoteSource,
-  _rev,
-  sourceAuthType,
-  sourceAuth,
-  targetAuthType,
-  targetAuth,
-  targetDatabasePartitioned
-}) => {
-  const username = getUsername();
-  const replicationDoc = {
-    user_ctx: {
-      name: username,
-      roles: ['_admin', '_reader', '_writer']
-    },
-    source: getSource({
-      replicationSource,
-      localSource,
-      remoteSource,
-      sourceAuthType,
-      sourceAuth
-    }),
-    target: getTarget({
-      replicationTarget,
-      replicationSource,
-      remoteTarget,
-      localTarget,
-      targetAuthType,
-      targetAuth
-    }),
-    create_target: createTarget(replicationTarget),
-    continuous: continuous(replicationType),
-  };
-  if (targetDatabasePartitioned) {
-    replicationDoc.create_target_params = {
-      partitioned: true
-    };
-  }
-  return addDocIdAndRev(replicationDocName, _rev, replicationDoc);
-};
-
-export const removeSensitiveUrlInfo = (url) => {
-  try {
-    const urlObj = new URL(url);
-    return `${urlObj.origin}/${decodeURIComponent(urlObj.pathname.slice(1))}`;
-  } catch (e) {
-    return url;
-  }
-};
-
-export const getDocUrl = (doc) => {
-  let url = doc;
-  if (!doc) {
-    return '';
-  }
-
-  if (typeof doc === "object") {
-    url = doc.url;
-  }
-  return removeSensitiveUrlInfo(url);
-};
-
-export const parseReplicationDocs = (rows) => {
-  return rows.map(row => row.doc).map(doc => {
-    return {
-      _id: doc._id,
-      _rev: doc._rev,
-      selected: false, //use this field for bulk delete in the ui
-      source: getDocUrl(doc.source),
-      target: getDocUrl(doc.target),
-      createTarget: doc.create_target,
-      continuous: doc.continuous === true ? true : false,
-      status: doc._replication_state,
-      errorMsg: doc._replication_state_reason ? doc._replication_state_reason : '',
-      statusTime: new Date(doc._replication_state_time),
-      startTime: new Date(doc._replication_start_time),
-      url: `#/database/_replicator/${encodeURIComponent(doc._id)}`,
-      raw: doc
-    };
-  });
-};
-
-export const convertState = (state) => {
-  if (state.toLowerCase() === 'error' || state.toLowerCase() === 'crashing') {
-    return 'retrying';
-  }
-
-  return state;
-};
-
-export const combineDocsAndScheduler = (docs, schedulerDocs) => {
-  return docs.map(doc => {
-    const schedule = schedulerDocs.find(s => s.doc_id === doc._id);
-    if (!schedule) {
-      return doc;
-    }
-
-    doc.status = convertState(schedule.state);
-    if (schedule.start_time) {
-      doc.startTime = new Date(schedule.start_time);
-    }
-
-    if (schedule.last_updated) {
-      doc.stateTime = new Date(schedule.last_updated);
-    }
-
-    return doc;
-  });
-};
-
-export const fetchReplicationDocs = () => {
-  return supportNewApi()
-    .then(newApi => {
-      const url = Helpers.getServerUrl('/_replicator/_all_docs?include_docs=true&limit=100');
-      const docsPromise = get(url)
-        .then((res) => {
-          if (res.error) {
-            return [];
-          }
-
-          return parseReplicationDocs(res.rows.filter(row => row.id.indexOf("_design/") === -1));
-        });
-
-      if (!newApi) {
-        return docsPromise;
-      }
-      const schedulerPromise = fetchSchedulerDocs();
-      return FauxtonAPI.Promise.join(docsPromise, schedulerPromise, (docs, schedulerDocs) => {
-        return combineDocsAndScheduler(docs, schedulerDocs);
-      })
-        .catch(() => {
-          return [];
-        });
-    });
-};
-
-export const fetchSchedulerDocs = () => {
-  const url = Helpers.getServerUrl('/_scheduler/docs?include_docs=true');
-  return get(url)
-    .then((res) => {
-      if (res.error) {
-        return [];
-      }
-
-      return res.docs;
-    });
-};
-
-export const checkReplicationDocID = (docId) => {
-  return new Promise((resolve) => {
-    const url = Helpers.getServerUrl(`/_replicator/${docId}`);
-    get(url)
-      .then(resp => {
-        if (resp.error === "not_found") {
-          resolve(false);
-          return;
-        }
-        resolve(true);
-      });
-  });
-};
-
-export const parseReplicateInfo = (resp) => {
-  return resp.jobs.filter(job => job.database === null).map(job => {
-    return {
-      _id: job.id,
-      source: getDocUrl(job.source.slice(0, job.source.length - 1)),
-      target: getDocUrl(job.target.slice(0, job.target.length - 1)),
-      startTime: new Date(job.start_time),
-      statusTime: new Date(job.last_updated),
-      //making an asumption here that the first element is the latest
-      status: convertState(job.history[0].type),
-      errorMsg: '',
-      selected: false,
-      continuous: /continuous/.test(job.id),
-      raw: job
-    };
-  });
-};
-
-export const fetchReplicateInfo = () => {
-  return supportNewApi()
-    .then(newApi => {
-      if (!newApi) {
-        return [];
-      }
-
-      const url = Helpers.getServerUrl('/_scheduler/jobs');
-      return get(url)
-        .then(resp => {
-          return parseReplicateInfo(resp);
-        });
-    });
-};
-
-export const deleteReplicatesApi = (replicates) => {
-  const promises = replicates.map(replicate => {
-    const data = {
-      replication_id: replicate._id,
-      cancel: true
-    };
-    const url = Helpers.getServerUrl('/_replicate');
-    return post(url, data);
-  });
-
-  return FauxtonAPI.Promise.all(promises);
-};
-
-export const createReplicatorDB = () => {
-  const url = Helpers.getServerUrl('/_replicator');
-  return put(url)
-    .then(res => {
-      if (!res.ok) {
-        throw {reason: 'Failed to create the _replicator database.'};
-      }
-      return true;
-    });
-};
diff --git a/app/addons/replication/assets/less/replication.less b/app/addons/replication/assets/less/replication.less
deleted file mode 100644
index ec1c0ad..0000000
--- a/app/addons/replication/assets/less/replication.less
+++ /dev/null
@@ -1,376 +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.
-
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/mixins.less";
-
-@replication_input_field_width: 400px;
-
-div.replication__page {
-  padding-top: 25px !important;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-
-.replication__section {
-  display: flex;
-  flex-flow: row wrap;
-  justify-content: flex-start;
-  & input {
-    width: @replication_input_field_width;
-    font-size: 14px;
-  }
-}
-
-.replication__seperator {
-  margin: 6px 0 15px;
-  width: 100%;
-}
-
-.replication__help-tile {
-  width: 400px;
-}
-
-.replication__input-checkbox {
-  display: flex;
-  align-items: center;
-  width: 400px;
-  height: 55px;
-
-  input[type="checkbox"] {
-    width: auto;
-    margin-right: 0.65rem;
-  }
-
-  label {
-    padding-bottom: 10px;
-  }
-
-  &--disabled label {
-    cursor: not-allowed;
-  }
-}
-
-.replication__input-label {
-  padding-right: 15px;
-  width: 165px;
-  text-align: right;
-  margin-top: 12px;
-  font-size: 14px;
-  margin-right: 10px;
-}
-
-.replication__input-select {
-  width: 540px;
-  select {
-    font-size: 14px;
-    width: @replication_input_field_width;
-    margin-bottom: 10px;
-    background-color: white;
-    border: 1px solid #cccccc;
-  }
-  .styled-select {
-    width: @replication_input_field_width;
-  }
-}
-
-.replication__input-react-select {
-  font-size: 14px;
-  padding-bottom: 10px;
-
-  .Select .Select-menu-outer {
-    width: @replication_input_field_width;
-  }
-
-  .Select div.Select-control {
-    padding: 6px;
-    border: 1px solid #cccccc;
-    width: @replication_input_field_width;
-
-    .Select-value, .Select-placeholder {
-      padding: 6px 15px 6px 10px;
-    }
-
-    input {
-      margin-left: -6px;
-    }
-
-    .Select-arrow-zone {
-      padding: 0;
-      width: 18px;
-      color: black;
-    }
-  }
-}
-
-.replication__remote-connection-url[type="text"] {
-  font-size: 14px;
-  width: @replication_input_field_width;
-  color: #333;
-}
-
-.replication__remote-connection-url-text {
-  font-size: 9pt;
-  color: #999999;
-  margin-bottom: 8px;
-}
-
-.replication__new-input[type="text"] {
-  width: @replication_input_field_width;
-  font-size: 14px;
-  color: #333;
-}
-
-.replication__doc-name {
-  position: relative;
-  width: @replication_input_field_width;
-
-}
-
-.replication__doc-name-icon {
-  cursor: pointer;
-  position: absolute;
-  right: 6px;
-  top: 8px;
-  font-size: 11px;
-  padding: 8px;
-  color: #333;
-  .transition(all 0.25s linear);
-}
-
-.replication__doc-name-icon:hover {
-  color: @hoverHighlight;
-}
-
-//use attribute selector to strengthen this to override bootstraps default font size for inputs
-.replication__doc-name-input[type="text"] {
-  padding-right: 32px;
-  font-size: 14px;
-  width: @replication_input_field_width;
-  color: #333;
-}
-
-.replication__button-row {
-  margin-top: 10px;
-  width: 378px;
-  display: flex;
-  justify-content: flex-end;
-}
-
-.replication__clear-link {
-  padding: 12px;
-  font-size: 14px;
-  padding: 12px 0 12px 24px;
-}
-
-.replication__clear-link:focus,
-.replication__clear-link:hover {
-  text-decoration: none;
-}
-
-.replication__activity {
-  padding: 0 10px 0 10px !important;
-  width:100%;
-}
-
-.replication__table-row {
-  font-size: 14px;
-  height: 50px;
-}
-
-td.replication__table-col {
-  vertical-align: middle;
-}
-
-.replication__table--selected {
-  color: @hoverHighlight;
-}
-
-.replication__table-header-source {
-  width: 30%;
-  font-weight: bold;
-  cursor: pointer;
-}
-
-.replication__table-header-target {
-  width: 30%;
-  font-weight: bold;
-  cursor: pointer;
-}
-
-.replication__table-header-type {
-  font-weight: bold;
-  width: 9%;
-  cursor: pointer;
-}
-
-.replication__table-header-status {
-  font-weight: bold;
-  width: 9%;
-  cursor: pointer;
-}
-
-.replication__table-header-time {
-  font-weight: bold;
-  width: 13%;
-  cursor: pointer;
-}
-
-.replication__table-header-actions {
-  font-weight: bold;
-  width: 13%;
-}
-
-td.replication__row-status {
-  text-transform: capitalize;
-  vertical-align: middle;
-}
-
-.replication__row-status--completed {
-  color: #5cb85c;
-}
-
-.replication__row-status--error {
-  color: #d9534f;
-}
-
-.replication__table-header-icon {
-  margin-left: 6px;
-  width: 16px;
-}
-
-.replication__activity_header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-.replication__activity_header-btn {
-  height: 42px;
-}
-
-a.replication__activity_header-btn:active,
-a.replication__activity_header-btn:visited {
-  color: #fff;
-}
-
-.replication__table-bulk-select {
-  width: 68px;
-}
-
-.replication__bulk-select-wrapper {
-  display: flex;
-}
-
-.replication__bulk-select-header {
-  width: 30px;
-  border: 1px solid #aaa;
-}
-
-input.replication__bulk-select-input[type="checkbox"] {
-  margin: 8px;
-}
-
-.bulk-select-trash {
-  color: #505050;
-  border: 1px solid #aaa;
-  background-color: rgba(0, 0, 0, 0);
-  margin-left: 3px;
-  padding-left: 8px;
-  &:hover{
-    color: @hoverHighlight}
-}
-
-.replication__row-actions-list {
-  margin: 0px;
-  text-decoration: none;
-}
-
-.replication__row-list {
-  display: inline;
-}
-
-.replication__row-btn {
-  font-size: 16px;
-  text-decoration: none;
-  cursor: pointer;
-  padding-right: 8px;
-  padding-left: 8px;
-  color: #333;
-  &:visited {
-    color: #333;
-    text-decoration: none;
-  }
-  &:hover {
-    color: @hoverHighlight;
-    text-decoration: none;
-  }
-
-}
-
-.replication__row-btn--no-left-pad {
-  padding-left: 0px;
-}
-
-.replication__row-btn--warning {
-  color: @dangerRed;
-}
-
-.replication__filter-icon {
-  padding-right: 8px;
-}
-
-input.replication__filter-input[type="text"] {
-  font-size: 14px;
-  border: 0;
-  padding: 10px;
-  margin-bottom: 0;
-}
-
-button.replication__error-continue {
-  margin-left: 20px !important; //needed to override bootstrap
-}
-
-.replication__error-cancel,
-.replication__error-continue {
-  background-color: @secondaryBlue;
-  color: #FFF;
-}
-
-.replication__error-cancel:hover,
-.replication__error-continue:hover {
-  background-color: @hoverHighlight;
-  color: #FFF;
-}
-
-td.replication__empty-row {
-  text-align: center;
-}
-
-.replication__remote_icon_help {
-  color: @secondaryBlue
-}
-
-.replication__remote_icon_help:hover {
-  color: @hoverHighlight;
-}
-
-.replication__tooltip {
-  .tooltip-inner {
-    text-align: left
-  }
-}
-
-.replication__activity-caveat {
-  padding-left: 80px;
-}
diff --git a/app/addons/replication/base.js b/app/addons/replication/base.js
deleted file mode 100644
index 951a335..0000000
--- a/app/addons/replication/base.js
+++ /dev/null
@@ -1,36 +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.
-
-import FauxtonAPI from '../../core/api';
-import Helpers from "../../helpers";
-import replication from './route';
-import './assets/less/replication.less';
-import { checkForNewApi } from './actions';
-import replicationReducer from './reducers';
-
-replication.initialize = function () {
-  FauxtonAPI.addHeaderLink({ title: 'Replication', href: '#/replication', icon: 'fonticon-replicate' });
-  FauxtonAPI.session.isAuthenticated().then(() => {
-    checkForNewApi();
-  });
-};
-
-FauxtonAPI.addReducers({
-  replication: replicationReducer
-});
-
-FauxtonAPI.registerUrls('replication', {
-  app: (db) => '#/replication/_create/' + db,
-  api: () => Helpers.getApiUrl('/_replicator')
-});
-
-export default replication;
diff --git a/app/addons/replication/components/activity.js b/app/addons/replication/components/activity.js
deleted file mode 100644
index 0d1ae98..0000000
--- a/app/addons/replication/components/activity.js
+++ /dev/null
@@ -1,116 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {DeleteModal} from './modals';
-import {ReplicationTable} from './common-table';
-import {ReplicationHeader} from './common-activity';
-
-export default class Activity extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    };
-  }
-
-  closeModal () {
-    this.setState({
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    });
-  }
-
-  showModal (doc) {
-    this.setState({
-      modalVisible: true,
-      unconfirmedDeleteDocId: doc
-    });
-  }
-
-  confirmDeleteDocs () {
-    let docs = [];
-    if (this.state.unconfirmedDeleteDocId) {
-      const doc = this.props.docs.find(doc => doc._id === this.state.unconfirmedDeleteDocId);
-      docs.push(doc);
-    } else {
-      docs = this.props.docs.filter(doc => doc.selected);
-    }
-
-    this.props.deleteDocs(docs);
-    this.closeModal();
-  }
-
-  numDocsSelected () {
-    return this.props.docs.filter(doc => doc.selected).length;
-  }
-
-  render () {
-    const {
-      onFilterChange,
-      activitySort,
-      changeActivitySort,
-      docs,
-      filter,
-      selectAllDocs,
-      someDocsSelected,
-      allDocsSelected,
-      selectDoc
-    } = this.props;
-
-    const {modalVisible} = this.state;
-    return (
-      <div className="replication__activity">
-        <p className="replication__activity-caveat">
-          Replications must have a replication document to display in the following table.
-        </p>
-        <ReplicationHeader
-          filter={filter}
-          onFilterChange={onFilterChange}
-        />
-        <ReplicationTable
-          someDocsSelected={someDocsSelected}
-          allDocsSelected={allDocsSelected}
-          selectAllDocs={selectAllDocs}
-          docs={docs}
-          selectDoc={selectDoc}
-          deleteDocs={this.showModal.bind(this)}
-          descending={activitySort.descending}
-          column={activitySort.column}
-          changeSort={changeActivitySort}
-        />
-        <DeleteModal
-          isReplicationDB={true}
-          multipleDocs={this.numDocsSelected()}
-          visible={modalVisible}
-          onClose={this.closeModal.bind(this)}
-          onClick={this.confirmDeleteDocs.bind(this)}
-        />
-      </div>
-    );
-  }
-}
-
-Activity.propTypes = {
-  docs: PropTypes.array.isRequired,
-  filter: PropTypes.string.isRequired,
-  selectAllDocs: PropTypes.func.isRequired,
-  allDocsSelected: PropTypes.bool.isRequired,
-  someDocsSelected: PropTypes.bool.isRequired,
-  selectDoc: PropTypes.func.isRequired,
-  onFilterChange: PropTypes.func.isRequired,
-  deleteDocs: PropTypes.func.isRequired,
-  activitySort: PropTypes.object.isRequired,
-  changeActivitySort: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/auth-options.js b/app/addons/replication/components/auth-options.js
deleted file mode 100644
index f21f855..0000000
--- a/app/addons/replication/components/auth-options.js
+++ /dev/null
@@ -1,198 +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.
-import PropTypes from 'prop-types';
-import FauxtonAPI from '../../../core/api';
-import app from '../../../app';
-import React from 'react';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-
-const { StyledSelect } = Components;
-
-export class ReplicationAuth extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.onChangeType = this.onChangeType.bind(this);
-    this.onChangeValue = this.onChangeValue.bind(this);
-
-    // init auth extensions
-    // The extension should provide:
-    //   - 'inputComponent' a React component that will be displayed when the user selects the auth method.
-    //   - 'typeValue' field with an arbitrary ID representing the auth type the extension supports.
-    //   - 'typeLabel' field containing the display label for the authentication method.
-    this.customAuths = FauxtonAPI.getExtensions('Replication:Auth');
-    if (!this.customAuths) {
-      this.customAuths = [];
-    }
-    this.customAuthTypes = this.customAuths.map(auth => auth.typeValue);
-
-    // The extension should provide:
-    //   - 'authType' is a string representing the auth type.
-    //   - 'helpText' string with the text to be displayed when the auth type is selected.
-    this.customAuthHelp = FauxtonAPI.getExtensions('Replication:Auth-help');
-    if (!this.customAuthHelp) {
-      this.customAuthHelp = [];
-    }
-  }
-
-  getAuthOptions = () => {
-    const userPasswordLabel = app.i18n.en_US['replication-user-password-auth-label'];
-    const authOptions = [
-      { value: Constants.REPLICATION_AUTH_METHOD.NO_AUTH, label: 'None' },
-      { value: Constants.REPLICATION_AUTH_METHOD.BASIC, label: userPasswordLabel }
-    ];
-    this.customAuths.map(auth => {
-      authOptions.push({ value: auth.typeValue, label: auth.typeLabel });
-    });
-
-    return authOptions.map(option => <option value={option.value} key={option.value}>{option.label}</option>);
-  }
-
-  onChangeType(newType) {
-    this.props.onChangeAuthType(newType);
-  }
-
-  onChangeValue(newValue) {
-    this.props.onChangeAuth(newValue);
-  }
-
-  getAuthInputFields(authValue, authType) {
-    const {authId} = this.props;
-    if (authType == Constants.REPLICATION_AUTH_METHOD.BASIC) {
-      return <UserPasswordAuthInput onChange={this.onChangeValue} auth={authValue} authId={authId}/>;
-    }
-    const matchedAuths = this.customAuths.filter(el => el.typeValue === authType);
-    if (matchedAuths && matchedAuths.length > 0) {
-      const InputComp = matchedAuths[0].inputComponent;
-      return <InputComp onChange={this.onChangeValue} auth={authValue} />;
-    }
-
-    return null;
-  }
-
-  getHelpText(authType) {
-    const helpText = this.customAuthHelp.filter(el => authType === el.authType).map(el => el.helpText);
-    if (helpText.length == 0) {
-      return null;
-    }
-
-    return (
-      <div className="replication__section">
-        <div className="replication__input-label"></div>
-        <div className="replication__help-tile">{helpText[0]}</div>
-      </div>);
-  }
-
-  render () {
-    const {credentials, authType, authId} = this.props;
-    return (<React.Fragment>
-      <div className="replication__section">
-        <div className="replication__input-label">
-          Authentication:
-        </div>
-        <div className="replication__input-select">
-          <StyledSelect
-            selectContent={this.getAuthOptions()}
-            selectChange={(e) => this.onChangeType(e.target.value)}
-            selectId={'select-' + authId}
-            selectValue={authType} />
-        </div>
-      </div>
-      {this.getAuthInputFields(credentials, authType)}
-      {this.getHelpText(authType)}
-    </React.Fragment>);
-  }
-}
-
-ReplicationAuth.propTypes = {
-  authId: PropTypes.string.isRequired,
-  authType: PropTypes.string.isRequired,
-  credentials: PropTypes.object,
-  onChangeAuth: PropTypes.func.isRequired,
-  onChangeAuthType: PropTypes.func.isRequired
-};
-
-ReplicationAuth.defaultProps = {
-  authType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-  onChangeAuthType: () => {},
-  onChangeAuth: () => {}
-};
-
-export class UserPasswordAuthInput extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.updatePassword = this.updatePassword.bind(this);
-    this.updateUsername = this.updateUsername.bind(this);
-    this.state = {
-      username: props.auth && props.auth.username ? props.auth.username : '',
-      password: props.auth && props.auth.password ? props.auth.password : ''
-    };
-  }
-
-  updatePassword(newValue) {
-    this.setState({password: newValue});
-    this.props.onChange({
-      username: this.state.username,
-      password: newValue
-    });
-  }
-
-  updateUsername(newValue) {
-    this.setState({username: newValue});
-    this.props.onChange({
-      username: newValue,
-      password: this.state.password
-    });
-  }
-
-  render () {
-    const usernamePlaceholder = app.i18n.en_US['replication-username-input-placeholder'];
-    const passwordPlaceholder = app.i18n.en_US['replication-password-input-placeholder'];
-    const { authId } = this.props;
-    return (
-      <React.Fragment>
-        <div className="replication__section">
-          <div className="replication__input-label"></div>
-          <div>
-            <input
-              id={authId + '-username'}
-              type="text"
-              placeholder={usernamePlaceholder}
-              value={this.state.username}
-              onChange={(e) => this.updateUsername(e.target.value)}
-              readOnly={this.props.usernameReadOnly}
-            />
-          </div>
-        </div>
-        <div className="replication__section">
-          <div className="replication__input-label"></div>
-          <div>
-            <input
-              id={authId + '-password'}
-              type="password"
-              placeholder={passwordPlaceholder}
-              value={this.state.password}
-              onChange={(e) => this.updatePassword(e.target.value)}
-            />
-          </div>
-        </div>
-      </React.Fragment>
-    );
-  }
-}
-
-UserPasswordAuthInput.propTypes = {
-  auth: PropTypes.object.isRequired,
-  onChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/common-activity.js b/app/addons/replication/components/common-activity.js
deleted file mode 100644
index 3b503fe..0000000
--- a/app/addons/replication/components/common-activity.js
+++ /dev/null
@@ -1,52 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export const ReplicationFilter = ({value, onChange}) => {
-  return (
-    <div className="replication__filter">
-      <i className="replication__filter-icon fonticon-filter" />
-      <input
-        type="text"
-        placeholder="Filter replications"
-        className="replication__filter-input"
-        value={value}
-        onChange={(e) => {onChange(e.target.value);}}
-      />
-    </div>
-  );
-};
-
-ReplicationFilter.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-export const ReplicationHeader = ({filter, onFilterChange}) => {
-  return (
-    <div className="replication__activity_header">
-      <div></div>
-      <ReplicationFilter value={filter} onChange={onFilterChange} />
-      <a href="#/replication/_create" className="btn save replication__activity_header-btn btn-primary">
-        <i className="icon fonticon-plus-circled"></i>
-        New Replication
-      </a>
-    </div>
-  );
-};
-
-ReplicationHeader.propTypes = {
-  filter: PropTypes.string.isRequired,
-  onFilterChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/common-table.js b/app/addons/replication/components/common-table.js
deleted file mode 100644
index f12b382..0000000
--- a/app/addons/replication/components/common-table.js
+++ /dev/null
@@ -1,428 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {Table, Tooltip, OverlayTrigger} from "react-bootstrap";
-import moment from 'moment';
-import {ErrorModal} from './modals';
-import {removeCredentialsFromUrl} from '../api';
-import Helpers from '../../../helpers';
-
-const getDbNameFromUrl = (urlObj, root) => {
-  try {
-    const urlWithoutDb = new URL(root);
-    const dbName = urlObj.pathname.substring(urlWithoutDb.pathname.length);
-    return encodeURIComponent(dbName);
-  } catch (e) {
-    return '';
-  }
-};
-
-export const formatUrl = (url) => {
-  let urlObj;
-  let encoded;
-  try {
-    urlObj = new URL(removeCredentialsFromUrl(url));
-  } catch (e) {
-    return '';
-  }
-  const root = Helpers.getRootUrl();
-  encoded = getDbNameFromUrl(urlObj, root);
-  if (url.indexOf(window.location.hostname) > -1) {
-    return (
-      <span>
-        {root}
-        <a href={`#/database/${encoded}/_all_docs`}>{decodeURIComponent(encoded)}</a>
-      </span>
-    );
-  }
-
-  return `${urlObj.origin}${urlObj.pathname}`;
-};
-
-class RowStatus extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      modalVisible: false,
-    };
-  }
-
-  showModal () {
-    this.setState({modalVisible: true});
-  }
-
-  closeModal () {
-    this.setState({modalVisible: false});
-  }
-
-  getErrorIcon () {
-    const {status} = this.props;
-    if (status !== 'error' && status !== 'retrying') {
-      return null;
-    }
-
-    return (
-      <span>
-        <a
-          data-bypass="true"
-          className="replication__row-btn replication__row-btn--warning icon-exclamation-sign"
-          onClick={this.showModal.bind(this)}
-          title="View error message">
-        </a>
-        <ErrorModal
-          onClick={this.closeModal.bind(this)}
-          onClose={this.closeModal.bind(this)}
-          errorMsg={this.props.errorMsg}
-          visible={this.state.modalVisible}
-          status={status}
-        />
-      </span>
-    );
-  }
-
-  render () {
-    const {statusTime, status} = this.props;
-    let momentTime = moment(statusTime);
-    let statusValue = <span>{status}</span>;
-
-    if (momentTime.isValid()) {
-      const formattedStatusTime = momentTime.format("MMM Do, h:mm a");
-      const stateTimeTooltip = <Tooltip id="">Last updated: {formattedStatusTime}</Tooltip>;
-      statusValue =
-        <OverlayTrigger placement="top" overlay={stateTimeTooltip}>
-          <span>{status}</span>
-        </OverlayTrigger>;
-    }
-
-    return (
-      <td className={`replication__row-status replication__row-status--${status}`}>
-        {statusValue}
-        {this.getErrorIcon()}
-      </td>
-    );
-  }
-}
-
-RowStatus.propTypes = {
-  statusTime: PropTypes.any,
-  status: PropTypes.string,
-  errorMsg: PropTypes.string.isRequired,
-};
-
-RowStatus.defaultProps = {
-  status: ''
-};
-
-const RowActions = ({onlyDeleteAction, _id, url, deleteDocs}) => {
-  const actions = [];
-  if (!onlyDeleteAction) {
-    actions.push(
-      <li className="replication__row-list" key={1}>
-        <a
-          href={`#replication/id/${encodeURIComponent(_id)}`}
-          className="replication__row-btn icon-wrench replication__row-btn--no-left-pad"
-          title={'Edit replication'}
-          data-bypass="true"
-        >
-        </a>
-      </li>
-    );
-    actions.push(
-      <li className="replication__row-list" key={2}>
-        <a
-          className="replication__row-btn fonticon-document"
-          title={'Edit replication document'}
-          href={url}
-          data-bypass="true"
-        >
-        </a>
-      </li>
-    );
-  }
-
-  actions.push(
-    <li className="replication__row-list" key={3}>
-      <a
-        className={`replication__row-btn icon-trash ${onlyDeleteAction ? 'replication__row-btn--no-left-pad' : ''} `}
-        title={`Delete ${onlyDeleteAction ? 'job' : 'document'} ${_id}`}
-        onClick={() => deleteDocs(_id)}>
-      </a>
-    </li>
-  );
-
-  return (
-    <ul className="replication__row-actions-list">
-      {actions}
-    </ul>
-  );
-};
-
-RowActions.propTypes = {
-  _id: PropTypes.string.isRequired,
-  url: PropTypes.string,
-  error: PropTypes.bool.isRequired,
-  errorMsg: PropTypes.string.isRequired,
-  deleteDocs: PropTypes.func.isRequired
-};
-
-const Row = ({
-  _id,
-  source,
-  target,
-  type,
-  startTime,
-  status,
-  statusTime,
-  url,
-  selected,
-  selectDoc,
-  errorMsg,
-  deleteDocs,
-  onlyDeleteAction,
-  showStateRow
-}) => {
-  let momentTime = moment(startTime);
-  const formattedStartTime = momentTime.isValid() ? momentTime.format("MMM Do, h:mm a") : '';
-  let stateRow = null;
-
-  if (showStateRow) {
-    stateRow = <RowStatus
-      statusTime={statusTime}
-      status={status}
-      errorMsg={errorMsg}
-    />;
-  }
-
-  return (
-    <tr className="replication__table-row">
-      <td className="replication__table-col"><input checked={selected} type="checkbox" onChange={() => selectDoc(_id)} /> </td>
-      <td className="replication__table-col">{formatUrl(source)}</td>
-      <td className="replication__table-col">{formatUrl(target)}</td>
-      <td className="replication__table-col">{formattedStartTime}</td>
-      <td className="replication__table-col">{type}</td>
-      {stateRow}
-      <td className="replication__table-col">
-        <RowActions
-          onlyDeleteAction={onlyDeleteAction}
-          deleteDocs={deleteDocs}
-          _id={_id}
-          url={url}
-          error={status === "error" || status === 'retrying'}
-          errorMsg={errorMsg}
-        />
-      </td>
-    </tr>
-
-  );
-};
-
-Row.propTypes = {
-  _id: PropTypes.string.isRequired,
-  source: PropTypes.string.isRequired,
-  target: PropTypes.string.isRequired,
-  type: PropTypes.string.isRequired,
-  status: PropTypes.string,
-  url: PropTypes.string,
-  statusTime: PropTypes.object.isRequired,
-  startTime: PropTypes.object,
-  selected: PropTypes.bool.isRequired,
-  selectDoc: PropTypes.func.isRequired,
-  errorMsg: PropTypes.string.isRequired,
-  deleteDocs: PropTypes.func.isRequired,
-  onlyDeleteAction: PropTypes.bool.isRequired,
-  showStateRow: PropTypes.bool.isRequired
-};
-
-const BulkSelectHeader = ({isSelected, deleteDocs, someDocsSelected, onCheck}) => {
-  const trash = someDocsSelected ?
-    <button
-      onClick={() => deleteDocs()}
-      className="bulk-select-trash fonticon fonticon-trash"
-      title="Delete all selected">
-    </button> : null;
-
-  return (
-    <div className="replication__bulk-select-wrapper">
-      <div className="replication__bulk-select-header">
-        <input className="replication__bulk-select-input" checked={isSelected} type="checkbox" onChange={onCheck} />
-      </div>
-      {trash}
-    </div>
-  );
-};
-
-BulkSelectHeader.propTypes = {
-  isSelected: PropTypes.bool.isRequired,
-  someDocsSelected: PropTypes.bool.isRequired,
-  onCheck: PropTypes.func.isRequired,
-  deleteDocs: PropTypes.func.isRequired
-};
-
-const EmptyRow = ({msg}) => {
-  return (
-    <tr>
-      <td colSpan="7" className="replication__empty-row">
-        {msg}
-      </td>
-    </tr>
-  );
-};
-
-EmptyRow.defaultProps = {
-  msg: "There is no replicator-db activity or history to display."
-};
-
-
-export class ReplicationTable extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  sort(column, descending, docs) {
-    let orderChanged = false;
-    const sorted = docs.sort((a, b) => {
-      if (a[column] < b[column]) {
-        orderChanged = true;
-        return -1;
-      }
-
-      if (a[column] > b[column]) {
-        orderChanged = true;
-        return 1;
-      }
-
-      return 0;
-
-    });
-
-    if (!descending && orderChanged) {
-      sorted.reverse();
-    }
-
-    return sorted;
-  }
-
-  renderRows () {
-    if (this.props.docs.length === 0) {
-      return <EmptyRow />;
-    }
-
-    return this.sort(this.props.column, this.props.descending, this.props.docs).map((doc, i) => {
-      return <Row
-        key={i}
-        _id={doc._id}
-        selected={doc.selected}
-        selectDoc={this.props.selectDoc}
-        source={doc.source}
-        target={doc.target}
-        type={doc.continuous === true ? 'Continuous' : 'One time'}
-        status={doc.status}
-        statusTime={doc.statusTime}
-        startTime={doc.startTime}
-        url={doc.url}
-        deleteDocs={this.props.deleteDocs}
-        errorMsg={doc.errorMsg}
-        doc={doc}
-        onlyDeleteAction={this.props.onlyDeleteAction}
-        showStateRow={this.props.showStateRow}
-      />;
-    });
-  }
-
-  iconDirection (column) {
-    if (column === this.props.column && !this.props.descending) {
-      return 'fonticon-up-dir';
-    }
-
-    return 'fonticon-down-dir';
-  }
-
-  onSort (column) {
-    return () => {
-      this.props.changeSort({
-        descending: column === this.props.column ? !this.props.descending : true,
-        column
-      });
-    };
-  }
-
-  isSelected (header) {
-    if (header === this.props.column) {
-      return 'replication__table--selected';
-    }
-
-    return '';
-  }
-
-  stateCol () {
-    if (this.props.showStateRow) {
-      return (
-        <th className="replication__table-header-status" onClick={this.onSort('status')}>
-          State
-          <span className={`replication__table-header-icon ${this.iconDirection('status')} ${this.isSelected('status')}`} />
-        </th>
-      );
-    }
-
-    return null;
-  }
-
-  render () {
-
-    return (
-      <Table striped>
-        <thead>
-          <tr>
-            <th className="replication__table-bulk-select">
-              <BulkSelectHeader
-                isSelected={this.props.allDocsSelected}
-                onCheck={this.props.selectAllDocs}
-                someDocsSelected={this.props.someDocsSelected}
-                deleteDocs={this.props.deleteDocs}
-              />
-            </th>
-            <th className="replication__table-header-source" onClick={this.onSort('source')}>
-              Source
-              <span className={`replication__table-header-icon ${this.iconDirection('source')} ${this.isSelected('source')}`} />
-            </th>
-            <th className="replication__table-header-target" onClick={this.onSort('target')}>
-              Target
-              <span className={`replication__table-header-icon ${this.iconDirection('target')} ${this.isSelected('target')}`} />
-            </th>
-            <th className="replication__table-header-time" onClick={this.onSort('statusTime')}>
-              Start Time
-              <span className={`replication__table-header-icon ${this.iconDirection('statusTime')} ${this.isSelected('statusTime')}`} />
-            </th>
-            <th className="replication__table-header-type" onClick={this.onSort('continuous')}>
-              Type
-              <span className={`replication__table-header-icon ${this.iconDirection('continuous')} ${this.isSelected('continuous')}`} />
-            </th>
-            {this.stateCol()}
-            <th className="replication__table-header-actions">
-              Actions
-            </th>
-          </tr>
-        </thead>
-        <tbody>
-          {this.renderRows()}
-        </tbody>
-      </Table>
-    );
-  }
-}
-
-ReplicationTable.defaultProps = {
-  onlyDeleteAction: false,
-  showStateRow: true
-};
diff --git a/app/addons/replication/components/modals.js b/app/addons/replication/components/modals.js
deleted file mode 100644
index 73cfda5..0000000
--- a/app/addons/replication/components/modals.js
+++ /dev/null
@@ -1,154 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {Modal} from 'react-bootstrap';
-import Components from '../../components/react-components';
-
-const {ConfirmButton} = Components;
-
-
-export const DeleteModal = ({
-  visible,
-  onClose,
-  onClick,
-  multipleDocs,
-  isReplicationDB
-}) => {
-
-  if (!visible) {
-    return null;
-  }
-
-  let header = "";
-  let btnText = `Delete ${isReplicationDB ? 'Document' : 'Replication Job'}`;
-  let infoSection = `Deleting a replication ${isReplicationDB ? 'document' : 'job'} stops continuous replication
-          and incomplete one-time replication, but does not affect replicated documents.`;
-
-  if (multipleDocs > 1) {
-    header = `You are deleting <strong>${multipleDocs}</strong> replication ${isReplicationDB ? 'documents' : 'jobs'}.`;
-    btnText = `Delete ${isReplicationDB ? 'Documents' : 'Replication Jobs'}`;
-  }
-
-  return (
-    <Modal dialogClassName="replication_delete-doc-modal" show={visible} onHide={() => onClose()}>
-      <Modal.Header closeButton={true}>
-        <Modal.Title>Verify Deletion</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>
-        <p dangerouslySetInnerHTML={{__html: header}}></p>
-        <p>{infoSection}</p>
-      </Modal.Body>
-      <Modal.Footer>
-        <a className="cancel-link" onClick={onClose}>Cancel</a>
-        <ConfirmButton
-          customIcon={"icon-trash"}
-          text={btnText}
-          onClick={onClick}
-        />
-      </Modal.Footer>
-    </Modal>
-  );
-};
-
-DeleteModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  isReplicationDB: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  multipleDocs: PropTypes.number.isRequired
-};
-
-DeleteModal.defaultProps = {
-  isReplicationDB: true
-};
-
-export const ErrorModal = ({visible, onClose, errorMsg, status}) => {
-
-  if (!visible) {
-    return null;
-  }
-
-  let title = "Replication Error";
-  let warning = <p>The replication job will be tried at increasing intervals</p>;
-
-  if (status.toLowerCase() === 'failed') {
-    title = "Replication Error - Failed";
-    warning = null;
-  }
-
-  return (
-    <Modal dialogClassName="replication__error-doc-modal" show={visible} onHide={() => onClose()}>
-      <Modal.Header closeButton={true}>
-        <Modal.Title>{title}</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>
-        <p>
-          {errorMsg}
-        </p>
-        {warning}
-      </Modal.Body>
-      <Modal.Footer>
-      </Modal.Footer>
-    </Modal>
-  );
-};
-
-ErrorModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  errorMsg: PropTypes.string.isRequired
-};
-
-export const ConflictModal = ({visible, docId, onClose, onClick}) => {
-
-  if (!visible) {
-    return null;
-  }
-
-  return (
-    <Modal dialogClassName="replication__error-doc-modal" show={visible} onHide={() => onClose()}>
-      <Modal.Header closeButton={true}>
-        <Modal.Title>Custom ID Conflict</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>
-        <p>
-          A replication document with ID <code>{docId}</code> already exists.
-        </p>
-        <p>
-          You can overwrite the existing document, or change the new replication job’s document ID.
-        </p>
-        <p>
-          If you overwrite the existing document, any replication job currently using the replication document will stop,
-          and that job will not appear in Replicator DB Activity. Replicated documents will not be affected.
-        </p>
-      </Modal.Body>
-      <Modal.Footer>
-        <button onClick={onClose} className="btn replication__error-cancel">
-          Change Document ID
-        </button>
-        <button onClick={onClick} className="btn replication__error-continue">
-          <i className="icon icon-eraser" /> Overwrite Existing Document
-        </button>
-      </Modal.Footer>
-    </Modal>
-  );
-};
-
-ConflictModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  docId: PropTypes.string.isRequired
-};
diff --git a/app/addons/replication/components/newreplication.js b/app/addons/replication/components/newreplication.js
deleted file mode 100644
index 08da3b3..0000000
--- a/app/addons/replication/components/newreplication.js
+++ /dev/null
@@ -1,399 +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.
-
-import base64 from 'base-64';
-import React from 'react';
-import Helpers from '../../../helpers';
-import {json} from '../../../core/ajax';
-import FauxtonAPI from '../../../core/api';
-import {ReplicationSource} from './source';
-import {ReplicationTarget} from './target';
-import {ReplicationOptions} from './options';
-import {ReplicationSubmit} from './submit';
-import {ReplicationAuth} from './auth-options';
-import Constants from '../constants';
-import {ConflictModal} from './modals';
-import {isEmpty} from 'lodash';
-
-export default class NewReplicationController extends React.Component {
-  constructor (props) {
-    super(props);
-    this.submit = this.submit.bind(this);
-    this.checkAuth = this.checkAuth.bind(this);
-    this.runReplicationChecks = this.runReplicationChecks.bind(this);
-  }
-
-  checkAuth () {
-    this.props.hideConflictModal();
-    const { replicationSource, replicationTarget,
-      sourceAuthType, targetAuthType, sourceAuth, targetAuth } = this.props;
-
-    const isLocalSource = replicationSource === Constants.REPLICATION_SOURCE.LOCAL;
-    const isLocalTarget = replicationTarget === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE ||
-      replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE;
-
-    // Ask user to select an auth method for local source/target when one is not selected
-    // and not on admin party
-    if (!FauxtonAPI.session.isAdminParty()) {
-      if (isLocalSource && sourceAuthType === Constants.REPLICATION_AUTH_METHOD.NO_AUTH) {
-        FauxtonAPI.addNotification({
-          msg: 'Missing credentials for local source database.',
-          type: 'error',
-          clear: true
-        });
-        return;
-      }
-      if (isLocalTarget && targetAuthType === Constants.REPLICATION_AUTH_METHOD.NO_AUTH) {
-        FauxtonAPI.addNotification({
-          msg: 'Missing credentials for local target database.',
-          type: 'error',
-          clear: true
-        });
-        return;
-      }
-    }
-
-    this.checkLocalAccountCredentials(sourceAuthType, sourceAuth, 'source', isLocalSource).then(() => {
-      this.checkLocalAccountCredentials(targetAuthType, targetAuth, 'target', isLocalTarget).then(() => {
-        this.submit();
-      }, () => {});
-    }, () => {});
-  }
-
-  checkLocalAccountCredentials(authType, auth, label, isLocal) {
-    // Skip check if it's a remote tb or not using BASIC auth
-    if (authType !== Constants.REPLICATION_AUTH_METHOD.BASIC || !isLocal) {
-      return FauxtonAPI.Promise.resolve(true);
-    }
-
-    if (!auth.username || !auth.password) {
-      const err = `Missing ${label} credentials.`;
-      FauxtonAPI.addNotification({
-        msg: err,
-        type: 'error',
-        clear: true
-      });
-      return FauxtonAPI.Promise.reject(new Error(err));
-    }
-
-    return this.checkCredentials(auth.username, auth.password).then((resp) => {
-      if (resp.error) {
-        throw (resp);
-      }
-      return true;
-    }).catch(err => {
-      FauxtonAPI.addNotification({
-        msg: `Your username or password for ${label} database is incorrect.`,
-        type: 'error',
-        clear: true
-      });
-      throw err;
-    });
-  }
-
-  checkCredentials(username, password) {
-    return json(Helpers.getServerUrl('/'), 'GET', {
-      credentials: 'omit',
-      headers: {
-        'Authorization':'Basic ' + base64.encode(username + ':' + password)
-      }
-    });
-  }
-
-  checkReplicationDocID () {
-    const {showConflictModal, replicationDocName, checkReplicationDocID} = this.props;
-    checkReplicationDocID(replicationDocName).then(existingDoc => {
-      if (existingDoc) {
-        showConflictModal();
-        return;
-      }
-
-      this.checkAuth();
-    });
-  }
-
-  runReplicationChecks () {
-    const {replicationDocName} = this.props;
-    if (!this.checkSourceTargetDatabases()) {
-      return;
-    }
-    if (replicationDocName) {
-      this.checkReplicationDocID();
-      return;
-    }
-
-    this.checkAuth();
-  }
-
-  checkSourceTargetDatabases () {
-    const {
-      remoteTarget,
-      remoteSource,
-      replicationSource,
-      replicationTarget,
-      localTarget,
-      localSource,
-      databases
-    } = this.props;
-
-    if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE && _.includes(databases, localTarget)) {
-      FauxtonAPI.addNotification({
-        msg: 'The <code>' + localTarget + '</code> database already exists locally. Please enter another database name.',
-        type: 'error',
-        escape: false,
-        clear: true
-      });
-      return false;
-    }
-    if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE ||
-        replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE) {
-      let error = '';
-      if (/\s/.test(localTarget)) {
-        error = 'The target database may not contain any spaces.';
-      } else if (/^_/.test(localTarget)) {
-        error = 'The target database may not start with an underscore.';
-      }
-
-      if (error) {
-        FauxtonAPI.addNotification({
-          msg: error,
-          type: 'error',
-          escape: false,
-          clear: true
-        });
-        return false;
-      }
-    }
-
-    //check if remote source/target URL is valid
-    const isRemoteSource = replicationSource === Constants.REPLICATION_SOURCE.REMOTE;
-    if (isRemoteSource && !isEmpty(remoteSource)) {
-      let errorMessage = '';
-      try {
-        const url = new URL(remoteSource);
-        if (url.pathname.slice(1) === '') {
-          errorMessage = 'Invalid source database URL. Database name is missing.';
-        }
-      } catch (err) {
-        errorMessage = 'Invalid source database URL.';
-      }
-      if (errorMessage) {
-        FauxtonAPI.addNotification({
-          msg: errorMessage,
-          type: 'error',
-          escape: false,
-          clear: true
-        });
-        return false;
-      }
-    }
-    const isRemoteTarget = replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE ||
-      replicationTarget === Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE;
-    if (isRemoteTarget && !isEmpty(remoteTarget)) {
-      let errorMessage = '';
-      try {
-        const url = new URL(remoteTarget);
-        if (url.pathname.slice(1) === '') {
-          errorMessage = 'Invalid target database URL. Database name is missing.';
-        }
-      } catch (err) {
-        errorMessage = 'Invalid target database URL.';
-      }
-      if (errorMessage) {
-        FauxtonAPI.addNotification({
-          msg: errorMessage,
-          type: 'error',
-          escape: false,
-          clear: true
-        });
-        return false;
-      }
-    }
-
-    //check that source and target are not the same. They can trigger a false positive if they are ""
-    if ((remoteTarget === remoteSource && !isEmpty(remoteTarget))
-        || (localSource === localTarget && !isEmpty(localSource))) {
-      FauxtonAPI.addNotification({
-        msg: 'Cannot replicate a database to itself',
-        type: 'error',
-        escape: false,
-        clear: true
-      });
-
-      return false;
-    }
-
-    return true;
-  }
-
-  submit () {
-    const {
-      replicationTarget,
-      replicationSource,
-      replicationType,
-      replicationDocName,
-      remoteTarget,
-      remoteSource,
-      localTarget,
-      localSource,
-      sourceAuthType,
-      sourceAuth,
-      targetAuthType,
-      targetAuth,
-      targetDatabasePartitioned
-    } = this.props;
-
-    let _rev;
-    if (replicationDocName) {
-      const doc = this.props.docs.find(doc => doc._id === replicationDocName);
-      if (doc) {
-        _rev = doc._rev;
-      }
-    }
-
-    this.props.replicate({
-      replicationTarget,
-      replicationSource,
-      replicationType,
-      replicationDocName,
-      localTarget,
-      localSource,
-      remoteTarget,
-      remoteSource,
-      _rev,
-      sourceAuthType,
-      sourceAuth,
-      targetAuthType,
-      targetAuth,
-      targetDatabasePartitioned
-    });
-  }
-
-  confirmButtonEnabled () {
-    const {
-      remoteSource,
-      localSourceKnown,
-      replicationSource,
-      replicationTarget,
-      localTargetKnown,
-      localTarget,
-      submittedNoChange,
-    } = this.props;
-
-    if (submittedNoChange) {
-      return false;
-    }
-
-    if (!replicationSource || !replicationTarget) {
-      return false;
-    }
-
-    if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL && !localSourceKnown) {
-      return false;
-    }
-    if (replicationTarget === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE && !localTargetKnown) {
-      return false;
-    }
-
-    if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE && !localTarget) {
-      return false;
-    }
-
-    if (replicationSource === Constants.REPLICATION_SOURCE.REMOTE && remoteSource === "") {
-      return false;
-    }
-
-    return true;
-  }
-
-  render () {
-    const {
-      replicationSource,
-      replicationTarget,
-      replicationType,
-      replicationDocName,
-      conflictModalVisible,
-      databases,
-      localSource,
-      remoteSource,
-      remoteTarget,
-      localTarget,
-      targetDatabasePartitioned,
-      allowNewPartitionedLocalDbs,
-      updateFormField,
-      clearReplicationForm,
-      sourceAuthType,
-      sourceAuth,
-      targetAuthType,
-      targetAuth
-    } = this.props;
-
-    return (
-      <div style={ {paddingBottom: 20} }>
-        <ReplicationSource
-          replicationSource={replicationSource}
-          localSource={localSource}
-          databases={databases}
-          remoteSource={remoteSource}
-          onSourceSelect={updateFormField('replicationSource')}
-          onRemoteSourceChange={updateFormField('remoteSource')}
-          onLocalSourceChange={updateFormField('localSource')}
-        />
-        <ReplicationAuth
-          credentials={sourceAuth}
-          authType={sourceAuthType}
-          onChangeAuthType={updateFormField('sourceAuthType')}
-          onChangeAuth={updateFormField('sourceAuth')}
-          authId={'replication-source-auth'}
-        />
-        <hr className="replication__seperator" size="1"/>
-        <ReplicationTarget
-          replicationTarget={replicationTarget}
-          onTargetChange={updateFormField('replicationTarget')}
-          databases={databases}
-          localTarget={localTarget}
-          remoteTarget={remoteTarget}
-          allowNewPartitionedLocalDbs={allowNewPartitionedLocalDbs}
-          targetDatabasePartitioned={targetDatabasePartitioned}
-          onRemoteTargetChange={updateFormField('remoteTarget')}
-          onLocalTargetChange={updateFormField('localTarget')}
-          onTargetDatabasePartitionedChange={updateFormField('targetDatabasePartitioned')}
-        />
-        <ReplicationAuth
-          credentials={targetAuth}
-          authType={targetAuthType}
-          onChangeAuthType={updateFormField('targetAuthType')}
-          onChangeAuth={updateFormField('targetAuth')}
-          authId={'replication-target-auth'}
-        />
-        <hr className="replication__seperator" size="1"/>
-        <ReplicationOptions
-          replicationType={replicationType}
-          replicationDocName={replicationDocName}
-          onDocChange={updateFormField('replicationDocName')}
-          onTypeChange={updateFormField('replicationType')}
-        />
-        <ReplicationSubmit
-          disabled={!this.confirmButtonEnabled()}
-          onClick={this.runReplicationChecks}
-          onClear={clearReplicationForm}
-        />
-        <ConflictModal
-          visible={conflictModalVisible}
-          onClick={this.checkAuth}
-          onClose={this.props.hideConflictModal}
-          docId={replicationDocName}
-        />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/replication/components/options.js b/app/addons/replication/components/options.js
deleted file mode 100644
index 686413a..0000000
--- a/app/addons/replication/components/options.js
+++ /dev/null
@@ -1,99 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-
-const { StyledSelect } = Components;
-
-const getReplicationTypeOptions = () => {
-  return [
-    { value: Constants.REPLICATION_TYPE.ONE_TIME, label: 'One time' },
-    { value: Constants.REPLICATION_TYPE.CONTINUOUS, label: 'Continuous' }
-  ].map(option => <option value={option.value} key={option.value}>{option.label}</option>);
-};
-
-const ReplicationType = ({value, onChange}) => {
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Replication type:
-      </div>
-      <div className="replication__input-select">
-        <StyledSelect
-          selectContent={getReplicationTypeOptions()}
-          selectChange={(e) => onChange(e.target.value)}
-          selectId="replication-target"
-          selectValue={value} />
-      </div>
-    </div>
-  );
-};
-
-ReplicationType.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ReplicationDoc = ({value, onChange}) =>
-  <div className="replication__section">
-    <div className="replication__input-label">
-    Replication document:
-    </div>
-    <div className="replication__doc-name">
-      <span className="fonticon fonticon-cancel replication__doc-name-icon" title="Clear field"
-        onClick={() => onChange('')} />
-      <input
-        type="text"
-        className="replication__doc-name-input"
-        placeholder="Custom ID (optional)"
-        value={value}
-        onChange={(e) => onChange(e.target.value)}
-      />
-    </div>
-  </div>;
-
-ReplicationDoc.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-export class ReplicationOptions extends React.Component {
-
-  render () {
-    const {replicationType, replicationDocName, onDocChange, onTypeChange} = this.props;
-
-    return (
-      <div>
-        <h3>Options</h3>
-        <ReplicationType
-          onChange={onTypeChange}
-          value={replicationType}
-        />
-        <ReplicationDoc
-          onChange={onDocChange}
-          value={replicationDocName}
-        />
-      </div>
-    );
-  }
-
-}
-
-ReplicationOptions.propTypes = {
-  replicationDocName: PropTypes.string.isRequired,
-  replicationType: PropTypes.string.isRequired,
-  onDocChange: PropTypes.func.isRequired,
-  onTypeChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/remoteexample.js b/app/addons/replication/components/remoteexample.js
deleted file mode 100644
index ddde70a..0000000
--- a/app/addons/replication/components/remoteexample.js
+++ /dev/null
@@ -1,50 +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.
-import React from 'react';
-import {OverlayTrigger, Tooltip} from 'react-bootstrap';
-
-const tooltipExisting = (
-  <Tooltip id="tooltip" className="replication__tooltip">
-    <p>
-      If you know the credentials for the remote account, you can use that remote username and password.
-    </p>
-    <p>
-      If a remote database granted permissions to your local account, you can use the local-account username and password.
-    </p>
-    <p>
-      If the remote database granted permissions to unauthenticated connections, you do not need to enter a username or password.
-    </p>
-  </Tooltip>
-);
-
-const tooltipNew = (
-  <Tooltip id="tooltip" className="replication__tooltip">
-    Enter the username and password of the remote account.
-  </Tooltip>
-);
-
-const RemoteExample = ({newRemote}) => {
-  const newRemoteText = newRemote ? 'If a "new" database already exists, data will replicate into that existing database.' : null;
-  return (
-    <div
-      className="replication__remote-connection-url-text">
-      https://$USERNAME:$PASSWORD@$REMOTE_SERVER/$DATABASE
-      &nbsp;
-      <OverlayTrigger placement="right" overlay={newRemote ? tooltipNew : tooltipExisting}>
-        <i className="replication__remote_icon_help icon icon-question-sign"/>
-      </OverlayTrigger>
-      <p>{newRemoteText}</p>
-    </div>
-  );
-};
-
-export default RemoteExample;
diff --git a/app/addons/replication/components/replicate-activity.js b/app/addons/replication/components/replicate-activity.js
deleted file mode 100644
index 931185a..0000000
--- a/app/addons/replication/components/replicate-activity.js
+++ /dev/null
@@ -1,118 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {DeleteModal} from './modals';
-import {ReplicationTable} from './common-table';
-import {ReplicationHeader} from './common-activity';
-
-export default class Activity extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    };
-  }
-
-  closeModal () {
-    this.setState({
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    });
-  }
-
-  showModal (docId) {
-    this.setState({
-      modalVisible: true,
-      unconfirmedDeleteDocId: docId
-    });
-  }
-
-  confirmDeleteDocs () {
-    let docs = [];
-    if (this.state.unconfirmedDeleteDocId) {
-      const doc = this.props.docs.find(doc => doc._id === this.state.unconfirmedDeleteDocId);
-      docs.push(doc);
-    } else {
-      docs = this.props.docs.filter(doc => doc.selected);
-    }
-
-    this.props.deleteDocs(docs);
-    this.closeModal();
-  }
-
-  numDocsSelected () {
-    return this.props.docs.filter(doc => doc.selected).length;
-  }
-
-  render () {
-    const {
-      onFilterChange,
-      activitySort,
-      changeActivitySort,
-      docs,
-      filter,
-      selectAllDocs,
-      someDocsSelected,
-      allDocsSelected,
-      selectDoc
-    } = this.props;
-
-    const {modalVisible} = this.state;
-    return (
-      <div className="replication__activity">
-        <p className="replication__activity-caveat">
-          Active _replicate jobs are displayed. Completed and failed jobs are not.
-        </p>
-        <ReplicationHeader
-          filter={filter}
-          onFilterChange={onFilterChange}
-        />
-        <ReplicationTable
-          onlyDeleteAction={true}
-          showStateRow={false}
-          someDocsSelected={someDocsSelected}
-          allDocsSelected={allDocsSelected}
-          selectAllDocs={selectAllDocs}
-          docs={docs}
-          selectDoc={selectDoc}
-          deleteDocs={this.showModal.bind(this)}
-          descending={activitySort.descending}
-          column={activitySort.column}
-          changeSort={changeActivitySort}
-        />
-        <DeleteModal
-          isReplicationDB={false}
-          multipleDocs={this.numDocsSelected()}
-          visible={modalVisible}
-          onClose={this.closeModal.bind(this)}
-          onClick={this.confirmDeleteDocs.bind(this)}
-        />
-      </div>
-    );
-  }
-}
-
-Activity.propTypes = {
-  docs: PropTypes.array.isRequired,
-  filter: PropTypes.string.isRequired,
-  selectAllDocs: PropTypes.func.isRequired,
-  allDocsSelected: PropTypes.bool.isRequired,
-  someDocsSelected: PropTypes.bool.isRequired,
-  selectDoc: PropTypes.func.isRequired,
-  onFilterChange: PropTypes.func.isRequired,
-  deleteDocs: PropTypes.func.isRequired,
-  activitySort: PropTypes.object.isRequired,
-  changeActivitySort: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/source.js b/app/addons/replication/components/source.js
deleted file mode 100644
index e4b6c33..0000000
--- a/app/addons/replication/components/source.js
+++ /dev/null
@@ -1,170 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-import ReactSelect from 'react-select';
-
-const { StyledSelect } = Components;
-
-const RemoteSourceInput = ({onChange, value}) =>
-  <div className="replication__section">
-    <div className="replication__input-label">Database URL:</div>
-    <div className="">
-      <input
-        type="text"
-        className="replication__remote-connection-url"
-        placeholder="https://"
-        value={value}
-        onChange={(e) => onChange(e.target.value)}
-      />
-    </div>
-  </div>;
-
-RemoteSourceInput.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const LocalSourceInput = ({value, onChange, databases}) => {
-  const options = databases.map(db => ({value: db, label: db}));
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Name:
-      </div>
-      <div className="replication__input-react-select">
-        <ReactSelect
-          name="source-name"
-          value={value}
-          placeholder="Database name"
-          options={options}
-          clearable={false}
-          onChange={({value}) => onChange(value)} />
-      </div>
-    </div>
-  );
-};
-
-LocalSourceInput.propTypes = {
-  value: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ReplicationSourceRow = ({replicationSource, databases, localSource, remoteSource, onChangeRemote, onChangeLocal}) => {
-  if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL) {
-    return <LocalSourceInput
-      value={localSource}
-      databases={databases}
-      onChange={onChangeLocal}
-    />;
-  }
-
-  return <RemoteSourceInput value={remoteSource} onChange={onChangeRemote} />;
-};
-
-ReplicationSourceRow.propTypes = {
-  replicationSource: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  localSource: PropTypes.string.isRequired,
-  remoteSource: PropTypes.string.isRequired,
-  onChangeRemote: PropTypes.func.isRequired,
-  onChangeLocal: PropTypes.func.isRequired
-};
-
-const replicationSourceSelectOptions = () => {
-  return [
-    { value: '', label: 'Select source type' },
-    { value: Constants.REPLICATION_SOURCE.LOCAL, label: 'Local database' },
-    { value: Constants.REPLICATION_SOURCE.REMOTE, label: 'Remote database' }
-  ].map((option) => {
-    return (
-      <option value={option.value} key={option.value}>{option.label}</option>
-    );
-  });
-};
-
-export const ReplicationSourceSelect = ({onChange, value}) => {
-
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Type:
-      </div>
-      <div className="replication__input-select">
-        <StyledSelect
-          selectContent={replicationSourceSelectOptions()}
-          selectChange={(e) => onChange(e.target.value)}
-          selectId="replication-source"
-          selectValue={value} />
-      </div>
-    </div>
-  );
-};
-
-ReplicationSourceSelect.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-export class ReplicationSource extends React.Component {
-
-  getReplicationSourceRow () {
-    const {
-      replicationSource,
-      localSource,
-      onLocalSourceChange,
-      onRemoteSourceChange,
-      remoteSource,
-      databases
-    } = this.props;
-
-    if (!replicationSource) {
-      return null;
-    }
-
-    return <ReplicationSourceRow
-      replicationSource={replicationSource}
-      databases={databases}
-      localSource={localSource}
-      remoteSource={remoteSource}
-      onChangeLocal={onLocalSourceChange}
-      onChangeRemote={onRemoteSourceChange}
-    />;
-  }
-
-  render () {
-    const {replicationSource, onSourceSelect} = this.props;
-    return (
-      <div>
-        <h3>Source</h3>
-        <ReplicationSourceSelect
-          onChange={onSourceSelect}
-          value={replicationSource}
-        />
-        {this.getReplicationSourceRow()}
-      </div>
-    );
-  }
-}
-
-ReplicationSource.propTypes = {
-  replicationSource: PropTypes.string.isRequired,
-  localSource: PropTypes.string.isRequired,
-  remoteSource: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  onLocalSourceChange: PropTypes.func.isRequired,
-  onRemoteSourceChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/submit.js b/app/addons/replication/components/submit.js
deleted file mode 100644
index 7d94ae7..0000000
--- a/app/addons/replication/components/submit.js
+++ /dev/null
@@ -1,45 +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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import Components from '../../components/react-components';
-
-const {ConfirmButton} = Components;
-
-export const ReplicationSubmit = ({onClear, disabled, onClick}) =>
-  <div className="replication__button-row">
-    <ConfirmButton
-      customIcon="fonticon-replicate"
-      id="replicate"
-      text="Start Replication"
-      onClick={onClick}
-      disabled={disabled}
-    />
-    <a
-      className="replication__clear-link"
-      href="#"
-      data-bypass="true"
-      onClick={(e) => {
-        e.preventDefault();
-        onClear();
-      }}>
-    Clear
-    </a>
-  </div>;
-
-
-ReplicationSubmit.propTypes = {
-  disabled: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClear: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/target.js b/app/addons/replication/components/target.js
deleted file mode 100644
index 3bf3b5d..0000000
--- a/app/addons/replication/components/target.js
+++ /dev/null
@@ -1,274 +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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from 'react';
-import { OverlayTrigger, Tooltip } from 'react-bootstrap';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-import ReactSelect from 'react-select';
-
-const { StyledSelect } = Components;
-
-const replicationTargetSourceOptions = () => {
-  return [
-    { value: '', label: 'Select target type' },
-    { value: Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE, label: 'Existing local database' },
-    { value: Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE, label: 'Existing remote database' },
-    { value: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE, label: 'New local database' },
-    { value: Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE, label: 'New remote database' }
-  ].map((option) => {
-    return (
-      <option value={option.value} key={option.value}>{option.label}</option>
-    );
-  });
-};
-
-const ReplicationTargetSelect = ({ value, onChange }) => {
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Type:
-      </div>
-      <div id="replication-target" className="replication__input-select">
-        <StyledSelect
-          selectContent={replicationTargetSourceOptions()}
-          selectChange={(e) => onChange(e.target.value)}
-          selectId="replication-target"
-          selectValue={value} />
-      </div>
-    </div>
-  );
-};
-
-ReplicationTargetSelect.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const RemoteTargetReplicationRow = ({ onChange, value }) => {
-  return (
-    <div>
-      <input
-        type="text"
-        className="replication__remote-connection-url"
-        placeholder="https://"
-        value={value}
-        onChange={(e) => onChange(e.target.value)}
-      />
-    </div>
-  );
-};
-
-RemoteTargetReplicationRow.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ExistingLocalTargetReplicationRow = ({ onChange, value, databases }) => {
-  const options = databases.map(db => ({ value: db, label: db }));
-  return (
-    <div id="replication-target-local" className="replication__input-react-select">
-      <ReactSelect
-        value={value}
-        options={options}
-        placeholder="Database name"
-        clearable={false}
-        onChange={({ value }) => onChange(value)}
-      />
-    </div>
-  );
-};
-
-ExistingLocalTargetReplicationRow.propTypes = {
-  value: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const NewLocalTargetReplicationRow = ({ onChange, value }) =>
-  <input
-    type="text"
-    className="replication__new-input"
-    placeholder="Database name"
-    value={value}
-    onChange={(e) => onChange(e.target.value)}
-  />;
-
-NewLocalTargetReplicationRow.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ReplicationTargetRow = ({
-  replicationTarget,
-  onLocalTargetChange,
-  onRemoteTargetChange,
-  localTarget,
-  remoteTarget,
-  databases
-}) => {
-  if (!replicationTarget) {
-    return null;
-  }
-  let input;
-
-  if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE) {
-    targetLabel = 'New database:';
-    input = <NewLocalTargetReplicationRow
-      value={localTarget}
-      onChange={onLocalTargetChange}
-    />;
-  } else if (replicationTarget === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE) {
-    input = <ExistingLocalTargetReplicationRow
-      onChange={onLocalTargetChange}
-      databases={databases}
-      value={localTarget}
-    />;
-  } else {
-    input = <RemoteTargetReplicationRow
-      onChange={onRemoteTargetChange}
-      value={remoteTarget}
-      newRemote={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE === replicationTarget}
-    />;
-  }
-
-  let targetLabel = 'Name:';
-
-  if (replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE ||
-    replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE) {
-    targetLabel = 'New database:';
-  }
-
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">{targetLabel}</div>
-      <div>
-        {input}
-      </div>
-    </div>
-  );
-};
-
-ReplicationTargetRow.propTypes = {
-  databases: PropTypes.array.isRequired,
-  onLocalTargetChange: PropTypes.func.isRequired,
-  onRemoteTargetChange: PropTypes.func.isRequired,
-  remoteTarget: PropTypes.string.isRequired,
-  localTarget: PropTypes.string.isRequired,
-  replicationTarget: PropTypes.string.isRequired
-};
-
-const NewTargetDatabaseOptionsRow = ({
-  replicationTarget,
-  targetDatabasePartitioned,
-  onTargetDatabasePartitionedChange,
-  allowNewPartitionedLocalDbs
-}) => {
-  if (!replicationTarget) {
-    return null;
-  }
-
-  if (replicationTarget !== Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE &&
-    replicationTarget !== Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE) {
-    return null;
-  }
-
-  const disablePartitionedOption = replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE &&
-    !allowNewPartitionedLocalDbs;
-  let msg = disablePartitionedOption ? "Local server does not support partitioned databases" :
-    "Creates a new partitioned database";
-  const tooltip = <Tooltip id="new-db-partitioned-tooltip">{msg}</Tooltip>;
-  const togglePartitioned = () => {
-    onTargetDatabasePartitionedChange(!targetDatabasePartitioned);
-  };
-
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">New database options:</div>
-      <div className={classnames('replication__input-checkbox', { 'replication__input-checkbox--disabled': disablePartitionedOption})}>
-
-        <input id="target-db-is-partitioned"
-          type="checkbox"
-          value="true"
-          checked={targetDatabasePartitioned}
-          onChange={togglePartitioned}
-          disabled={disablePartitionedOption}
-        />
-
-
-        <OverlayTrigger placement="right" overlay={tooltip}>
-          <label htmlFor="target-db-is-partitioned" >Partitioned</label>
-        </OverlayTrigger>
-      </div >
-    </div>
-  );
-};
-
-NewTargetDatabaseOptionsRow.propTypes = {
-  onTargetDatabasePartitionedChange: PropTypes.func.isRequired,
-  targetDatabasePartitioned: PropTypes.bool.isRequired,
-  replicationTarget: PropTypes.string.isRequired,
-  allowNewPartitionedLocalDbs: PropTypes.bool.isRequired
-};
-
-export class ReplicationTarget extends React.Component {
-
-  render() {
-    const {
-      replicationTarget,
-      onLocalTargetChange,
-      onTargetChange,
-      databases,
-      localTarget,
-      onRemoteTargetChange,
-      remoteTarget,
-      targetDatabasePartitioned,
-      onTargetDatabasePartitionedChange,
-      allowNewPartitionedLocalDbs
-    } = this.props;
-    return (
-      <div>
-        <h3>Target</h3>
-        <ReplicationTargetSelect
-          value={replicationTarget}
-          onChange={onTargetChange}
-        />
-        <ReplicationTargetRow
-          remoteTarget={remoteTarget}
-          replicationTarget={replicationTarget}
-          databases={databases}
-          localTarget={localTarget}
-          onRemoteTargetChange={onRemoteTargetChange}
-          onLocalTargetChange={onLocalTargetChange}
-        />
-        <NewTargetDatabaseOptionsRow
-          replicationTarget={replicationTarget}
-          onTargetDatabasePartitionedChange={onTargetDatabasePartitionedChange}
-          targetDatabasePartitioned={targetDatabasePartitioned}
-          allowNewPartitionedLocalDbs={allowNewPartitionedLocalDbs}
-        />
-      </div>
-    );
-  }
-}
-
-ReplicationTarget.propTypes = {
-  databases: PropTypes.array.isRequired,
-  onTargetChange: PropTypes.func.isRequired,
-  onLocalTargetChange: PropTypes.func.isRequired,
-  onRemoteTargetChange: PropTypes.func.isRequired,
-  remoteTarget: PropTypes.string.isRequired,
-  localTarget: PropTypes.string.isRequired,
-  replicationTarget: PropTypes.string.isRequired
-};
diff --git a/app/addons/replication/constants.js b/app/addons/replication/constants.js
deleted file mode 100644
index 46567be..0000000
--- a/app/addons/replication/constants.js
+++ /dev/null
@@ -1,35 +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.
-
-export default {
-  REPLICATION_SOURCE: {
-    LOCAL: 'REPLICATION_SOURCE_LOCAL',
-    REMOTE: 'REPLICATION_SOURCE_REMOTE'
-  },
-
-  REPLICATION_TARGET: {
-    EXISTING_LOCAL_DATABASE: 'REPLICATION_TARGET_EXISTING_LOCAL_DATABASE',
-    EXISTING_REMOTE_DATABASE: 'REPLICATION_TARGET_EXISTING_REMOTE_DATABASE',
-    NEW_LOCAL_DATABASE: 'REPLICATION_TARGET_NEW_LOCAL_DATABASE',
-    NEW_REMOTE_DATABASE: 'REPLICATION_TARGET_NEW_REMOTE_DATABASE'
-  },
-
-  REPLICATION_TYPE: {
-    ONE_TIME: 'REPLICATION_TYPE_ONE_TIME',
-    CONTINUOUS: 'REPLICATION_TYPE_CONTINUOUS'
-  },
-
-  REPLICATION_AUTH_METHOD: {
-    NO_AUTH: 'NO_AUTH',
-    BASIC: 'BASIC_AUTH'
-  }
-};
diff --git a/app/addons/replication/container.js b/app/addons/replication/container.js
deleted file mode 100644
index 5be9079..0000000
--- a/app/addons/replication/container.js
+++ /dev/null
@@ -1,137 +0,0 @@
-import { connect } from 'react-redux';
-import ReplicationController from './controller';
-
-import {
-  checkForNewApi,
-  updateFormField,
-  clearReplicationForm,
-  initReplicator,
-  getReplicationStateFrom,
-  getReplicateActivity,
-  getReplicationActivity,
-  getDatabasesList,
-  showConflictModal,
-  hideConflictModal,
-  replicate,
-  filterReplicate,
-  filterDocs,
-  selectDoc,
-  deleteDocs,
-  selectAllDocs,
-  changeActivitySort,
-  deleteReplicates,
-  selectAllReplicates,
-  selectReplicate
-} from './actions';
-
-import {
-  isLoading,
-  isActivityLoading,
-  getDatabases,
-  getReplicationSource,
-  getLocalSource,
-  isLocalSourceKnown,
-  getRemoteSource,
-  getReplicationTarget,
-  getLocalTarget,
-  isLocalTargetKnown,
-  getRemoteTarget,
-  isConflictModalVisible,
-  getReplicationType,
-  getReplicationDocName,
-  getSubmittedNoChange,
-  getFilteredReplicationStatus,
-  getStatusFilter,
-  getReplicateFilter,
-  getAllDocsSelected,
-  getSomeDocsSelected,
-  getUsername,
-  getPassword,
-  getActivitySort,
-  getCheckingApi,
-  supportNewApi,
-  isReplicateInfoLoading,
-  getAllReplicateSelected,
-  getReplicateInfo,
-  someReplicateSelected
-} from './reducers';
-
-const mapStateToProps = ({replication, databases}, ownProps) => {
-  return {
-    allowNewPartitionedLocalDbs: databases.partitionedDatabasesAvailable,
-
-    routeLocalSource: ownProps.routeLocalSource,
-    replicationId: ownProps.replicationId,
-    tabSection: ownProps.section,
-    loading: isLoading(replication),
-    activityLoading: isActivityLoading(replication),
-    databases: getDatabases(replication),
-
-    // source fields
-    replicationSource: getReplicationSource(replication),
-    localSource: getLocalSource(replication),
-    localSourceKnown: isLocalSourceKnown(replication),
-    remoteSource: getRemoteSource(replication),
-    sourceAuthType: replication.sourceAuthType,
-    sourceAuth: replication.sourceAuth,
-
-    // target fields
-    replicationTarget: getReplicationTarget(replication),
-    localTarget: getLocalTarget(replication),
-    localTargetKnown: isLocalTargetKnown(replication),
-    remoteTarget: getRemoteTarget(replication),
-    targetAuthType: replication.targetAuthType,
-    targetAuth: replication.targetAuth,
-    targetDatabasePartitioned: replication.targetDatabasePartitioned,
-
-    // other
-    isConflictModalVisible: isConflictModalVisible(replication),
-    replicationType: getReplicationType(replication),
-    replicationDocName: getReplicationDocName(replication),
-    submittedNoChange: getSubmittedNoChange(replication),
-    statusDocs: getFilteredReplicationStatus(replication),
-    statusFilter: getStatusFilter(replication),
-    replicateFilter: getReplicateFilter(replication),
-    allDocsSelected: getAllDocsSelected(replication),
-    someDocsSelected:  getSomeDocsSelected(replication),
-    username: getUsername(replication),
-    password: getPassword(replication),
-    activitySort: getActivitySort(replication),
-    checkingApi: getCheckingApi(replication),
-    supportNewApi: supportNewApi(replication),
-    replicateLoading: isReplicateInfoLoading(replication),
-    replicateInfo: getReplicateInfo(replication),
-    allReplicateSelected: getAllReplicateSelected(replication),
-    someReplicateSelected: someReplicateSelected(replication)
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    checkForNewApi: () => dispatch(checkForNewApi()),
-    updateFormField: (fieldName) => (value) => {
-      dispatch(updateFormField(fieldName, value));
-    },
-    clearReplicationForm: () => dispatch(clearReplicationForm()),
-    initReplicator: (localSource) => dispatch(initReplicator(localSource)),
-    getReplicationActivity: () => dispatch(getReplicationActivity()),
-    getReplicateActivity: () => dispatch(getReplicateActivity()),
-    getReplicationStateFrom: (id) => dispatch(getReplicationStateFrom(id)),
-    getDatabasesList: () => dispatch(getDatabasesList()),
-    replicate: (params) => dispatch(replicate(params)),
-    showConflictModal: () => dispatch(showConflictModal()),
-    hideConflictModal: () => dispatch(hideConflictModal()),
-    filterReplicate: (filter) => dispatch(filterReplicate(filter)),
-    filterDocs: (filter) => dispatch(filterDocs(filter)),
-    selectDoc: (doc) => dispatch(selectDoc(doc)),
-    deleteDocs: (docs) => dispatch(deleteDocs(docs)),
-    selectAllDocs: () => dispatch(selectAllDocs()),
-    changeActivitySort: (sort) => dispatch(changeActivitySort(sort)),
-    selectAllReplicates: () => dispatch(selectAllReplicates()),
-    deleteReplicates: (replicates) => dispatch(deleteReplicates(replicates)),
-    selectReplicate: (replicate) => dispatch(selectReplicate(replicate))
-  };
-};
-
-
-export default connect(mapStateToProps, mapDispatchToProps)(ReplicationController);
diff --git a/app/addons/replication/controller.js b/app/addons/replication/controller.js
deleted file mode 100644
index 0c7cc00..0000000
--- a/app/addons/replication/controller.js
+++ /dev/null
@@ -1,246 +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.
-import FauxtonAPI from '../../core/api';
-import React from 'react';
-import Helpers from '../../helpers';
-import Components from '../components/react-components';
-import NewReplication from './components/newreplication';
-import Activity from './components/activity';
-import {checkReplicationDocID} from './api';
-import {OnePane, OnePaneHeader, OnePaneContent} from '../components/layouts';
-import {TabElementWrapper, TabElement} from '../components/components/tabelement';
-import ReplicateActivity from './components/replicate-activity';
-
-const {LoadLines, Polling, RefreshBtn} = Components;
-
-export default class ReplicationController extends React.Component {
-
-  loadReplicationInfo (props, oldProps) {
-    this.props.initReplicator(props.routeLocalSource, props.localSource);
-    this.getAllActivity();
-    this.loadReplicationStateFrom(props, oldProps);
-  }
-
-  loadReplicationStateFrom (props, oldProps) {
-    if (props.replicationId && props.replicationId !== oldProps.replicationId) {
-      this.props.clearReplicationForm();
-      this.props.getReplicationStateFrom(props.replicationId);
-    }
-  }
-
-  getAllActivity () {
-    this.props.getReplicationActivity();
-    this.props.getReplicateActivity();
-  }
-
-  componentDidMount () {
-    this.props.checkForNewApi();
-    this.props.getDatabasesList();
-    this.loadReplicationInfo(this.props, {});
-  }
-
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    this.loadReplicationStateFrom(nextProps, this.props);
-    if (this.props.tabSection !== 'new replication' && nextProps.tabSection === 'new replication') {
-      this.props.clearReplicationForm();
-    }
-  }
-
-  componentWillUnmount () {
-    this.props.clearReplicationForm();
-  }
-
-  showSection () {
-    const {
-      replicationSource, replicationTarget, replicationType, replicationDocName,
-      databases, localSource, remoteSource, remoteTarget,
-      localTarget, statusDocs, statusFilter, loading, allDocsSelected,
-      someDocsSelected, showConflictModal, localSourceKnown, localTargetKnown, updateFormField,
-      authenticated, activityLoading, submittedNoChange, activitySort, tabSection,
-      replicateInfo, replicateLoading, replicateFilter, allReplicateSelected, someReplicateSelected,
-      hideConflictModal, isConflictModalVisible, filterDocs,
-      filterReplicate, replicate, clearReplicationForm, selectAllDocs, changeActivitySort, selectDoc,
-      deleteDocs, deleteReplicates, selectAllReplicates, selectReplicate,
-      sourceAuthType, sourceAuth, targetAuthType, targetAuth, targetDatabasePartitioned, allowNewPartitionedLocalDbs
-    } = this.props;
-
-    if (tabSection === 'new replication') {
-      if (loading) {
-        return <LoadLines/>;
-      }
-
-      return <NewReplication
-        docs={statusDocs}
-        localTargetKnown={localTargetKnown}
-        localSourceKnown={localSourceKnown}
-        clearReplicationForm={clearReplicationForm}
-        replicate={replicate}
-        replicationSource={replicationSource}
-        replicationTarget={replicationTarget}
-        replicationType={replicationType}
-        replicationDocName={replicationDocName}
-        databases={databases}
-        localSource={localSource}
-        remoteSource={remoteSource}
-        remoteTarget={remoteTarget}
-        localTarget={localTarget}
-        sourceAuthType={sourceAuthType}
-        sourceAuth={sourceAuth}
-        targetAuthType={targetAuthType}
-        targetAuth={targetAuth}
-        targetDatabasePartitioned={targetDatabasePartitioned}
-        allowNewPartitionedLocalDbs={allowNewPartitionedLocalDbs}
-        updateFormField={updateFormField}
-        conflictModalVisible={isConflictModalVisible}
-        hideConflictModal={hideConflictModal}
-        showConflictModal={showConflictModal}
-        checkReplicationDocID={checkReplicationDocID}
-        authenticated={authenticated}
-        submittedNoChange={submittedNoChange}
-      />;
-    }
-
-    if (tabSection === '_replicate') {
-      if (replicateLoading) {
-        return <LoadLines />;
-      }
-
-      return <ReplicateActivity
-        docs={replicateInfo}
-        filter={replicateFilter}
-        onFilterChange={filterReplicate}
-        selectDoc={selectReplicate}
-        selectAllDocs={selectAllReplicates}
-        allDocsSelected={allReplicateSelected}
-        someDocsSelected={someReplicateSelected}
-        activitySort={activitySort}
-        changeActivitySort={changeActivitySort}
-        deleteDocs={deleteReplicates}
-      />;
-    }
-
-    if (activityLoading) {
-      return <LoadLines/>;
-    }
-
-    return <Activity
-      docs={statusDocs}
-      filter={statusFilter}
-      onFilterChange={filterDocs}
-      selectAllDocs={selectAllDocs}
-      selectDoc={selectDoc}
-      allDocsSelected={allDocsSelected}
-      someDocsSelected={someDocsSelected}
-      deleteDocs={deleteDocs}
-      activitySort={activitySort}
-      changeActivitySort={changeActivitySort}
-    />;
-  }
-
-  getHeaderComponents () {
-    if (this.props.tabSection === 'new replication') {
-      return null;
-    }
-    let rightHeaderclass = "right-header-flex";
-    if (Helpers.isIE1X()) {
-      rightHeaderclass += " " + rightHeaderclass + "--ie1X";
-    }
-
-    return (
-      <div className={rightHeaderclass}>
-        <Polling
-          min={60}
-          max={600}
-          startValue={300}
-          stepSize={60}
-          onPoll={this.getAllActivity.bind(this)}
-        />
-        <RefreshBtn
-          refresh={this.getAllActivity.bind(this)}
-        />
-      </div>
-    );
-  }
-
-  getTabElements () {
-    const {tabSection} = this.props;
-    const elements = [
-      <TabElement
-        key={1}
-        selected={tabSection === 'activity'}
-        text={"Replicator DB Activity"}
-        onChange={this.onTabChange.bind(this, 'activity', '#/replication')}
-      />
-    ];
-
-    if (this.props.supportNewApi) {
-      elements.push(
-        <TabElement
-          key={2}
-          selected={tabSection === '_replicate'}
-          text={"_replicate Activity"}
-          onChange={this.onTabChange.bind(this, '_replicate', '#/replication/_replicate')}
-        />
-      );
-    }
-
-    return elements;
-  }
-
-  onTabChange (section, url) {
-    // this.props.changeTabSection(section, url);
-    FauxtonAPI.navigate(url);
-  }
-
-  getCrumbs () {
-    if (this.props.tabSection === 'new replication') {
-      return [{'name': 'Job Configuration'}];
-    }
-    return [{'name': 'Replication'}];
-  }
-
-  getTabs () {
-    if (this.props.tabSection === 'new replication') {
-      return null;
-    }
-
-    return (
-      <TabElementWrapper>
-        {this.getTabElements()}
-      </TabElementWrapper>
-    );
-  }
-
-  render () {
-    const { checkingAPI } = this.props;
-
-    if (checkingAPI) {
-      return <LoadLines />;
-    }
-
-    return (
-      <OnePane>
-        <OnePaneHeader crumbs={this.getCrumbs()}>
-          {this.getHeaderComponents()}
-        </OnePaneHeader>
-        <OnePaneContent>
-          <div className="template-content flex-body flex-layout flex-col">
-            {this.getTabs()}
-            <div className="replication__page flex-layout flex-col">
-              {this.showSection()}
-            </div>
-          </div>
-        </OnePaneContent>
-      </OnePane>
-    );
-  }
-}
diff --git a/app/addons/replication/helpers.js b/app/addons/replication/helpers.js
deleted file mode 100644
index 4951bbc..0000000
--- a/app/addons/replication/helpers.js
+++ /dev/null
@@ -1,23 +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.
-
-import _ from 'lodash';
-
-const getDatabaseLabel = db => {
-  const dbString = (_.isString(db)) ? db.trim().replace(/\/$/, '') : db.url;
-  const pathName = (new URL(dbString)).pathname.slice(1);
-  return pathName.split("/").pop();
-};
-
-export default {
-  getDatabaseLabel,
-};
diff --git a/app/addons/replication/reducers.js b/app/addons/replication/reducers.js
deleted file mode 100644
index 40a276a..0000000
--- a/app/addons/replication/reducers.js
+++ /dev/null
@@ -1,409 +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.
-import FauxtonAPI from '../../core/api';
-import ActionTypes from './actiontypes';
-import Constants from './constants';
-import app from "../../app";
-
-const setActivitySort = (sort) => {
-  app.utils.localStorageSet('replication-activity-sort', sort);
-};
-
-const loadActivitySort = () => {
-  const defaultSort = {
-    descending: false,
-    column: 'statusTime'
-
-  };
-  let sort = app.utils.localStorageGet('replication-activity-sort');
-
-  if (!sort) {
-    sort = defaultSort;
-  }
-
-  setActivitySort(sort);
-  return sort;
-};
-
-const validFieldMap = {
-  remoteSource: 'remoteSource',
-  remoteTarget: 'remoteTarget',
-  localTarget: 'localTarget',
-  replicationType: 'replicationType',
-  replicationDocName: 'replicationDocName',
-  replicationSource: 'replicationSource',
-  replicationTarget: 'replicationTarget',
-  localSource: 'localSource',
-  sourceAuthType: 'sourceAuthType',
-  sourceAuth: 'sourceAuth',
-  targetAuthType: 'targetAuthType',
-  targetAuth: 'targetAuth',
-  targetDatabasePartitioned: 'targetDatabasePartitioned'
-};
-
-const initialState = {
-  loading: false,
-  databases: [],
-
-  // source fields
-  replicationSource: '',
-  localSource: '',
-  remoteSource: '',
-  sourceAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-  sourceAuth: {},
-
-  // target fields
-  replicationTarget: '',
-  localTarget: '',
-  remoteTarget: '',
-  targetAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-  targetAuth: {},
-  targetDatabasePartitioned: false,
-
-  // other
-  isConflictModalVisible: false,
-  replicationType: Constants.REPLICATION_TYPE.ONE_TIME,
-  replicationDocName: '',
-  submittedNoChange: false,
-  statusDocs: [],
-  statusFilteredStatusDocs: [],
-  statusFilter: '',
-  replicateFilter: '',
-  allDocsSelected: false,
-  allReplicateSelected: false,
-  username: '',
-  password: '',
-  activityLoading: false,
-  tabSection: 'new replication',
-  supportNewApi: false,
-  fetchingReplicateInfo: false,
-  replicateInfo: [],
-
-  checkingAPI: true,
-  activitySort: loadActivitySort()
-};
-
-const clearForm = (state) => {
-  const newState = {
-    ...state
-  };
-  Object.values(validFieldMap).forEach(field => {
-    if (field === 'sourceAuth' || field === 'targetAuth') {
-      newState[field] = {};
-    } else if (field === 'targetDatabasePartitioned') {
-      newState[field] = false;
-    } else {
-      newState[field] = '';
-    }
-  });
-  newState.sourceAuthType = Constants.REPLICATION_AUTH_METHOD.NO_AUTH;
-  newState.targetAuthType = Constants.REPLICATION_AUTH_METHOD.NO_AUTH;
-  return newState;
-};
-
-const updateFormField = (state, fieldName, value) => {
-  const updateState = {
-    ...state,
-    submittedNoChange: false,
-  };
-  updateState[validFieldMap[fieldName]] = value;
-
-  // Set default username when state is set to local target/source AND auth is user/pwd
-  if (fieldName === validFieldMap.sourceAuthType || fieldName === validFieldMap.replicationSource) {
-    const isUserPwdAuth = updateState[validFieldMap.sourceAuthType] === Constants.REPLICATION_AUTH_METHOD.BASIC;
-    const isLocalDB = updateState[validFieldMap.replicationSource] === Constants.REPLICATION_SOURCE.LOCAL;
-    const usernameNotSet = !updateState[validFieldMap.sourceAuth] || !updateState[validFieldMap.sourceAuth].username;
-    if (isUserPwdAuth && isLocalDB && usernameNotSet) {
-      updateState[validFieldMap.sourceAuth] = {
-        username: FauxtonAPI.session.user().name,
-        password: ''
-      };
-    }
-  } else if (fieldName === validFieldMap.targetAuthType || fieldName === validFieldMap.replicationTarget) {
-    const isUserPwdAuth = updateState[validFieldMap.targetAuthType] === Constants.REPLICATION_AUTH_METHOD.BASIC;
-    const isLocalDB = updateState[validFieldMap.replicationTarget] === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE ||
-      updateState[validFieldMap.replicationTarget] === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE;
-    const usernameNotSet = !updateState[validFieldMap.targetAuth] || !updateState[validFieldMap.targetAuth].username;
-    if (isUserPwdAuth && isLocalDB && usernameNotSet) {
-      updateState[validFieldMap.targetAuth] = {
-        username: FauxtonAPI.session.user().name,
-        password: ''
-      };
-    }
-  }
-
-  return updateState;
-};
-
-const toggleDoc = (state, id) => {
-  const doc = state.statusDocs.find(doc => doc._id === id);
-  if (!doc) {
-    return state;
-  }
-
-  doc.selected = !doc.selected;
-
-  return {
-    ...state,
-    allDocsSelected: false
-  };
-};
-
-const selectAllDocs = (state) => {
-  const newState = {
-    ...state,
-    allDocsSelected: !state.allDocsSelected
-  };
-
-  getFilteredReplicationStatus(newState)
-    .forEach(doc => doc.selected = newState.allDocsSelected);
-
-  return newState;
-};
-
-const selectReplicate = (state, id) => {
-  const newState = {
-    ...state
-  };
-
-  const doc = newState._replicateInfo.find(doc => doc._id === id);
-
-  if (!doc) {
-    return newState;
-  }
-
-  doc.selected = !doc.selected;
-  newState._allReplicateSelected = false;
-};
-
-const selectAllReplicate = (state) => {
-  const newState = {
-    ...state,
-    allReplicateSelected: !state.allReplicateSelected
-  };
-
-  getReplicateInfo(newState).forEach(doc => doc.selected = newState.allReplicateSelected);
-  return newState;
-};
-
-const setStateFromDoc = (state, doc) => {
-  let newState = {
-    ...state,
-    loading: false
-  };
-
-  return Object.keys(doc).reduce((state, key) => {
-    return updateFormField(state, key, doc[key]);
-  }, newState);
-};
-
-
-const replication = (state = initialState, {type, options}) => {
-  switch (type) {
-
-    case ActionTypes.INIT_REPLICATION:
-      const newState = {
-        ...state,
-        loading: true
-      };
-
-      if (options.localSource) {
-        newState.localSource = options.localSource;
-        newState.replicationSource = Constants.REPLICATION_SOURCE.LOCAL;
-        newState.remoteSource = '';
-        newState.replicationTarget = '';
-        newState.localTarget = '';
-        newState.remoteTarget = '';
-      }
-      return newState;
-
-    case ActionTypes.REPLICATION_DATABASES_LOADED:
-      return {
-        ...state,
-        loading: false,
-        databases: options.databases
-      };
-
-    case ActionTypes.REPLICATION_FETCHING_FORM_STATE:
-      return {
-        ...state,
-        loading: true
-      };
-
-    case ActionTypes.REPLICATION_UPDATE_FORM_FIELD:
-      return updateFormField(state, options.fieldName, options.value);
-
-    case ActionTypes.REPLICATION_CLEAR_FORM:
-      return clearForm(state);
-
-    case ActionTypes.REPLICATION_STARTING:
-      return {
-        ...state,
-        submittedNoChange: true
-      };
-
-    case ActionTypes.REPLICATION_FETCHING_STATUS:
-      return {
-        ...state,
-        activityLoading: true
-      };
-
-    case ActionTypes.REPLICATION_STATUS:
-      return {
-        ...state,
-        activityLoading: false,
-        statusDocs: options
-      };
-
-    case ActionTypes.REPLICATION_FILTER_DOCS:
-      return {
-        ...state,
-        statusFilter: options
-      };
-
-    case ActionTypes.REPLICATION_FILTER_REPLICATE:
-      return {
-        ...state,
-        replicateFilter: options
-      };
-
-    case ActionTypes.REPLICATION_TOGGLE_DOC:
-      return toggleDoc(state, options);
-
-    case ActionTypes.REPLICATION_TOGGLE_ALL_DOCS:
-      return selectAllDocs(state);
-
-    case ActionTypes.REPLICATION_TOGGLE_REPLICATE:
-      return selectReplicate(state, options);
-
-    case ActionTypes.REPLICATION_TOGGLE_ALL_REPLICATE:
-      return selectAllReplicate(state);
-
-    case ActionTypes.REPLICATION_SET_STATE_FROM_DOC:
-      return setStateFromDoc(state, options);
-
-    case ActionTypes.REPLICATION_SHOW_CONFLICT_MODAL:
-      return {
-        ...state,
-        isConflictModalVisible: true
-      };
-
-    case ActionTypes.REPLICATION_HIDE_CONFLICT_MODAL:
-      return {
-        ...state,
-        isConflictModalVisible: false
-      };
-
-    case ActionTypes.REPLICATION_CHANGE_ACTIVITY_SORT:
-      setActivitySort(options);
-      return {
-        ...state,
-        activitySort: loadActivitySort()
-      };
-
-    case ActionTypes.REPLICATION_CLEAR_SELECTED_DOCS:
-      return {
-        ...state,
-        allDocsSelected: false
-      };
-
-    case ActionTypes.REPLICATION_CHANGE_TAB_SECTION:
-      return {
-        ...state,
-        tabSection: options
-      };
-
-    case ActionTypes.REPLICATION_SUPPORT_NEW_API:
-      return {
-        ...state,
-        checkingApi: false,
-        supportNewApi: options
-      };
-
-    case ActionTypes.REPLICATION_FETCHING_REPLICATE_STATUS:
-      return {
-        ...state,
-        fetchingReplicateInfo: true,
-      };
-
-    case ActionTypes.REPLICATION_REPLICATE_STATUS:
-      return {
-        ...state,
-        fetchingReplicateInfo: false,
-        replicateInfo: options
-      };
-
-    case ActionTypes.REPLICATION_CLEAR_SELECTED_REPLICATES:
-      return {
-        ...state,
-        allReplicateSelected: false
-      };
-
-    default:
-      return state;
-  }
-};
-
-
-export const isLoading = (state) => state.isLoading;
-export const isActivityLoading = (state) => state.activityLoading;
-export const getDatabases = (state) => state.databases;
-
-export const getReplicationSource = (state) => state.replicationSource;
-export const getLocalSource = (state) => state.localSource;
-export const isLocalSourceKnown = (state) => _.includes(state.databases, state.localSource);
-export const getRemoteSource = (state) => state.remoteSource;
-
-
-export const getReplicationTarget = (state) => state.replicationTarget;
-export const getLocalTarget = (state) => state.localTarget;
-export const isLocalTargetKnown = (state) => _.includes(state.databases, state.localTarget);
-export const getRemoteTarget = (state) => state.remoteTarget;
-
-export const isConflictModalVisible = (state) => state.isConflictModalVisible;
-export const getReplicationType = (state) => state.replicationType;
-export const getReplicationDocName = (state) => state.replicationDocName;
-export const getSubmittedNoChange = (state) => state.submittedNoChange;
-
-export const getFilteredReplicationStatus = (state) => {
-  return state.statusDocs.filter(doc => {
-    return Object.values(doc).filter(item => {
-      if (!item) {return null;}
-      return item.toString().toLowerCase().match(state.statusFilter);
-    }).length > 0;
-  });
-};
-
-export const getStatusFilter = (state) => state.statusFilter;
-export const getReplicateFilter = (state) => state.replicateFilter;
-export const getAllDocsSelected = (state) => state.allDocsSelected;
-export const getSomeDocsSelected = (state) => getFilteredReplicationStatus(state).some(doc => doc.selected);
-export const getUsername = (state) => state.username;
-export const getPassword = (state) => state.password;
-export const getActivitySort = (state) => state.activitySort;
-export const getTabSection = (state) => state.tabSection;
-export const getCheckingApi = (state) => state.checkingAPI;
-export const supportNewApi = (state) => state.supportNewApi;
-export const isReplicateInfoLoading = (state) => state.fetchingReplicateInfo;
-export const getAllReplicateSelected = (state) => state.allReplicateSelected;
-export const someReplicateSelected = (state) => getReplicateInfo(state).some(doc => doc.selected);
-
-export const getReplicateInfo = (state) => {
-  return state.replicateInfo.filter(doc => {
-    return Object.values(doc).filter(item => {
-      if (!item) {return false;}
-      return item.toString().toLowerCase().match(state._replicateFilter);
-    }).length > 0;
-  });
-};
-
-export default replication;
diff --git a/app/addons/replication/route.js b/app/addons/replication/route.js
deleted file mode 100644
index efcd01b..0000000
--- a/app/addons/replication/route.js
+++ /dev/null
@@ -1,73 +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.
-
-import React from 'react';
-import FauxtonAPI from '../../core/api';
-import ReplicationController from './container';
-
-const ReplicationRouteObject = FauxtonAPI.RouteObject.extend({
-  routes: {
-    'replication/_create': 'createView',
-    'replication/_create/:dbname': 'createView',
-    'replication/id/:id': 'createViewFromId',
-    'replication': 'activityView',
-    'replication/_replicate': 'replicateView'
-  },
-  selectedHeader: 'Replication',
-
-  roles: ['fx_loggedIn'],
-
-  setActivityCrumbs () {
-    this.crumbs = [
-      {name: 'Replication'}
-    ];
-  },
-
-  setCreateReplicationCrumbs () {
-    this.crumbs = [
-      {name: 'Replication', link: 'replication'},
-      {name: 'New Replication'}
-    ];
-  },
-
-  createView: function (databaseName) {
-    const localSource = databaseName || '';
-
-    return <ReplicationController
-      routeLocalSource={localSource}
-      section={'new replication'}
-    />;
-  },
-
-  createViewFromId: function (replicationId) {
-    return <ReplicationController
-      replicationId={replicationId}
-      section={'new replication'}
-    />;
-  },
-
-  activityView: function () {
-    return <ReplicationController
-      section={"activity"}
-    />;
-  },
-
-  replicateView: function () {
-    return <ReplicationController
-      section={"_replicate"}
-    />;
-  }
-});
-
-export default {
-  RouteObjects: [ReplicationRouteObject]
-};
diff --git a/app/addons/replication/tests/nightwatch/replication.js b/app/addons/replication/tests/nightwatch/replication.js
deleted file mode 100644
index d05673e..0000000
--- a/app/addons/replication/tests/nightwatch/replication.js
+++ /dev/null
@@ -1,286 +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.
-
-
-
-const helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-const newDatabaseName1 = 'fauxton-selenium-tests-replication1';
-const newDatabaseName2 = 'fauxton-selenium-tests-replication2';
-const replicatedDBName = 'replicated-db';
-const docName1 = 'doc-name1';
-const docName2 = 'doc-name2';
-
-const destroyDBsAndCreateReplicator = (client, done) => {
-  var nano = helpers.getNanoInstance(client.options.db_url);
-  nano.db.destroy(newDatabaseName1, () => {
-    nano.db.destroy(newDatabaseName2, () => {
-      nano.db.destroy(replicatedDBName, () => {
-        nano.db.create('_replicator', function () {
-          done();
-        });
-      });
-    });
-  });
-};
-
-module.exports = {
-  before: destroyDBsAndCreateReplicator,
-
-  'Replicates existing local db to new local db' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const password = client.options.password;
-
-    client
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select LOCAL as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-
-      // enter our source DB
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', [password, client.Keys.ENTER])
-
-      // enter a new target name
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('option[value="REPLICATION_TARGET_NEW_LOCAL_DATABASE"]')
-      .setValue('.replication__new-input', replicatedDBName)
-
-      // select target USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-target-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-target-auth-username', waitTime, true)
-
-      // enter target username/password
-      .setValue('#replication-target-auth-password', [password, client.Keys.ENTER])
-
-      .clickWhenVisible('#replicate')
-
-      .waitForElementNotPresent('.Toastify__toast-container .Toastify__toast-body', waitTime, true)
-      .end();
-  },
-
-  'Replicates existing local db to existing local db' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const password = client.options.password;
-
-    client
-
-      // create two databases, each with a single (different) doc
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .createDatabase(newDatabaseName2)
-      .checkForDatabaseCreated(newDatabaseName2, waitTime)
-      .createDocument(docName2, newDatabaseName2)
-
-      // now login and fill in the replication form
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select the LOCAL db as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', [password, client.Keys.ENTER])
-
-      // select existing local as the target
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('#replication-target option[value="REPLICATION_TARGET_EXISTING_LOCAL_DATABASE"]')
-      .setValue('#replication-target-local .Select-input input', [newDatabaseName2, client.Keys.ENTER])
-
-      // select target USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-target-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-target-auth-username', waitTime, true)
-
-      // enter target username/password
-      .setValue('#replication-target-auth-password', [password, client.Keys.ENTER])
-
-      .getAttribute('#replicate', 'disabled', function (result) {
-        // confirm it's not disabled
-        this.assert.equal(result.value, null);
-      })
-      .clickWhenVisible('#replicate')
-
-      .waitForElementNotPresent('.Toastify__toast-container .Toastify__toast-body', waitTime, true)
-      .end();
-  },
-
-  'Replicates using existing doc id' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const password = client.options.password;
-
-    const replicatorDoc = {
-      _id: 'existing-doc-id',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-
-    client
-      // create two databases, each with a single (different) doc
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .createDatabase(newDatabaseName2)
-      .checkForDatabaseCreated(newDatabaseName2, waitTime)
-      .createDocument(docName2, newDatabaseName2)
-      .deleteDocument(replicatorDoc._id, '_replicator')
-      .createDocument(replicatorDoc._id, '_replicator', replicatorDoc)
-
-      // now login and fill in the replication form
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select the LOCAL db as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', [password, client.Keys.ENTER])
-
-      // select existing local as the target
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('#replication-target option[value="REPLICATION_TARGET_EXISTING_LOCAL_DATABASE"]')
-      .setValue('#replication-target-local .Select-input input', [newDatabaseName2, client.Keys.ENTER])
-      .setValue('.replication__doc-name-input', [replicatorDoc._id, client.Keys.ENTER])
-
-      // select target USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-target-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-target-auth-username', waitTime, true)
-
-      // enter target username/password
-      .setValue('#replication-target-auth-password', [password, client.Keys.ENTER])
-
-      .getAttribute('#replicate', 'disabled', function (result) {
-        // confirm it's not disabled
-        this.assert.equal(result.value, null);
-      })
-      .clickWhenVisible('#replicate')
-
-      // confirm overwrite of existing doc
-      .waitForElementVisible('.replication__error-doc-modal .replication__error-continue', waitTime, true)
-      .clickWhenVisible('.replication__error-doc-modal .replication__error-continue')
-
-      .waitForElementNotPresent('.Toastify__toast-container .Toastify__toast-body', waitTime, true)
-      .end();
-  },
-
-  'Show error for missing credentials' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select LOCAL as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-
-      // enter our source DB
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // enter a new target name
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('option[value="REPLICATION_TARGET_NEW_LOCAL_DATABASE"]')
-      .setValue('.replication__new-input', replicatedDBName)
-
-      .clickWhenVisible('#replicate')
-
-      .waitForElementPresent('.Toastify__toast-container .Toastify__toast--error', waitTime, true)
-      .end();
-  },
-
-  'Show error for invalid credentials' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select LOCAL as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-
-      // enter our source DB
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', ['wrong_pwd', client.Keys.ENTER])
-
-      // enter a new target name
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('option[value="REPLICATION_TARGET_NEW_REMOTE_DATABASE"]')
-      .setValue('.replication__remote-connection-url', 'http://fake.com/dummydb')
-
-      .clickWhenVisible('#replicate')
-
-      .waitForElementPresent('.Toastify__toast-container .Toastify__toast--error', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/replication/tests/nightwatch/replicationactivity.js b/app/addons/replication/tests/nightwatch/replicationactivity.js
deleted file mode 100644
index e32cfe8..0000000
--- a/app/addons/replication/tests/nightwatch/replicationactivity.js
+++ /dev/null
@@ -1,133 +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.
-
-
-module.exports = {
-
-  'Can view doc': client => {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    const replicatorDoc = {
-      _id: 'existing-doc-id-view-doc',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc._id, '_replicator', replicatorDoc)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('.replication__filter', waitTime, true)
-      .clickWhenVisible('a[href="#/database/_replicator/existing-doc-id-view-doc"]')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('#editor-container', waitTime, true)
-      .end();
-  },
-
-  'Can edit doc': client => {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    const replicatorDoc = {
-      _id: 'existing-doc-id-edit-doc',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc._id, '_replicator', replicatorDoc)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('.replication__filter', waitTime, true)
-      .clickWhenVisible('a[title="Edit replication"]')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('.replication__section', waitTime, true)
-      .pause(10000)
-      .assert.valueContains(".replication__doc-name-input", replicatorDoc._id)
-      .end();
-  },
-
-  'Can filter docs': client => {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    const replicatorDoc1 = {
-      _id: 'existing-doc-id-filter1',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-
-    const replicatorDoc2 = {
-      _id: 'existing-doc-filter2',
-      source: "http://source-db2.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc1._id, '_replicator', replicatorDoc1)
-      .createDocument(replicatorDoc2._id, '_replicator', replicatorDoc2)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementVisible('.replication__filter-input', waitTime, true)
-      .setValue('.replication__filter-input', 'filter1')
-      .waitForElementNotPresent('a[href="#/database/_replicator/existing-doc-filter2"]', waitTime, true)
-      .clearValue('.replication__filter-input')
-      .setValue('.replication__filter-input', 'filter')
-      .waitForElementPresent('a[href="#/database/_replicator/existing-doc-filter2"]', waitTime, true)
-      .end();
-  },
-  "Action click doesn't change doc's order": client =>{
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const firstRowSelector = '.replication__table-row:nth-of-type(1)';
-    let firstDoc;
-
-    const replicatorDoc1 = {
-      _id: 'existing-doc-id-filter1',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-
-    const replicatorDoc2 = {
-      _id: 'existing-doc-filter2',
-      source: "http://source-db2.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc1._id, '_replicator', replicatorDoc1)
-      .createDocument(replicatorDoc2._id, '_replicator', replicatorDoc2)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementVisible(firstRowSelector, waitTime, true)
-      .getText(firstRowSelector + ' td:nth-of-type(2)', function(result) {
-        firstDoc = result.value;
-      })
-      .clickWhenVisible(firstRowSelector + ' .replication__row-btn.icon-trash', waitTime, true)
-      .clickWhenVisible('.replication_delete-doc-modal.modal-dialog .modal-footer .cancel-link', waitTime, true)
-      .waitForElementVisible(firstRowSelector, waitTime, true)
-      .getText(firstRowSelector + ' td:nth-of-type(2)', function(result) {
-        this.verify.ok(result.value === firstDoc,
-          'Checking if the order was reserved if no documents were sorted');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/search/__tests__/components.test.js b/app/addons/search/__tests__/components.test.js
deleted file mode 100644
index 4d053d5..0000000
--- a/app/addons/search/__tests__/components.test.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.
-import {mount} from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../core/api';
-import AnalyzerDropdown from '../components/AnalyzerDropdown';
-import SearchForm from '../components/SearchForm';
-import SearchIndexEditor from '../components/SearchIndexEditor';
-import '../base';
-
-describe('SearchIndexEditor', () => {
-  const defaultProps = {
-    isLoading: false,
-    isCreatingIndex: false,
-    database: { id: 'my_db' },
-    lastSavedDesignDocName: 'last_ddoc',
-    lastSavedSearchIndexName: 'last_idx',
-    searchIndexFunction: '',
-    saveDoc: {},
-    designDocs: [],
-    searchIndexName: '',
-    ddocPartitioned: false,
-    newDesignDocPartitioned: false,
-    analyzerType: '',
-    singleAnalyzer: '',
-    defaultAnalyzer: '',
-    defaultMultipleAnalyzer: '',
-    analyzerFields: [],
-    setAnalyzerType: () => {},
-    setDefaultMultipleAnalyzer: () => {},
-    setSingleAnalyzer: () => {},
-    addAnalyzerRow: () => {},
-    setSearchIndexName: () => {},
-    saveSearchIndex: () => {},
-    selectDesignDoc: () => {},
-    updateNewDesignDocName: () => {}
-  };
-
-  it('generates the correct cancel link when db, ddoc and views have special chars', () => {
-    const editorEl = mount(<SearchIndexEditor
-      {...defaultProps}
-      database={{ id: 'db%$1' }}
-      lastSavedDesignDocName={'_design/doc/1$2'}
-      lastSavedSearchIndexName={'search?abc/123'}
-    />);
-    const expectedUrl = `/${encodeURIComponent('db%$1')}/_design/${encodeURIComponent('doc/1$2')}/_search/${encodeURIComponent('search?abc/123')}`;
-    expect(editorEl.find('a.index-cancel-link').prop('href')).toMatch(expectedUrl);
-  });
-
-  it('does not save when missing the index name', () => {
-    const spy = sinon.stub();
-    const editorEl = mount(<SearchIndexEditor
-      {...defaultProps}
-      database={{ id: 'test_db' }}
-      designDocs={[{id: '_design/d1'}, {id: '_design/d2'}]}
-      ddocName='_design/d1'
-      searchIndexName={''}
-      saveSearchIndex={spy}
-      saveDoc={{id: '_design/d'}}
-    />);
-
-    editorEl.find('button#save-index').simulate('click', {preventDefault: () => {}});
-    sinon.assert.notCalled(spy);
-  });
-});
-
-describe('AnalyzerDropdown', () => {
-
-  it('check default values and settings', () => {
-    const el = mount(<AnalyzerDropdown />);
-
-    // confirm default label
-    expect(el.find('label').length).toBe(2);
-    expect(el.find('label').first().text()).toBe('Type');
-
-    // confirm default value
-    expect(el.find('select').hasClass('standard')).toBeTruthy();
-  });
-
-  it('omits label element if empty label passed', () => {
-    const el = mount(<AnalyzerDropdown label="" />);
-
-    // (1, because there are normally 2 labels, see prev test)
-    expect(el.find('label').length).toBe(1);
-  });
-
-  it('custom ID works', () => {
-    const customID = 'myCustomID';
-    const el = mount(<AnalyzerDropdown id={customID} />);
-    expect(el.find('select').prop('id')).toBe(customID);
-  });
-
-  it('sets default value', () => {
-    const defaultSelected = 'russian';
-    const el = mount(
-      <AnalyzerDropdown defaultSelected={defaultSelected} />
-    );
-
-    expect(el.find('select').hasClass(defaultSelected)).toBeTruthy();
-  });
-
-  it('custom classes get applied', () => {
-    const el = mount(<AnalyzerDropdown classes="nuthatch vulture" />);
-    expect(el.find('.nuthatch').exists()).toBeTruthy();
-    expect(el.find('.vulture').exists()).toBeTruthy();
-  });
-
-  it('custom change handler gets called', () => {
-    const spy = sinon.spy();
-    const el = mount(<AnalyzerDropdown onChange={spy} />);
-    const newVal = 'whitespace';
-    el.find('select').simulate('change', { target: { value: newVal }});
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-});
-
-describe('SearchForm', () => {
-  const defaultProps = {
-    searchResults: [{id: 'elephant'}],
-    searchPerformed: true,
-    hasActiveQuery: false,
-    searchQuery: 'a_search',
-    database: { id: 'foo' },
-    querySearch: () => {},
-    setSearchQuery: () => {}
-  };
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').returns('/fake/url');
-  });
-
-  afterEach(() => {
-    FauxtonAPI.urls.restore();
-  });
-
-  it('renders docs from the search results', () => {
-    const el = mount(<SearchForm
-      {...defaultProps}
-    />);
-    expect(el.find('pre').first().text('elephant')).toBeTruthy();
-  });
-
-  it('renders with links', () => {
-    const el = mount(<SearchForm
-      {...defaultProps}
-    />);
-    expect(el.find('a')).toBeTruthy();
-  });
-});
diff --git a/app/addons/search/__tests__/search.actions.test.js b/app/addons/search/__tests__/search.actions.test.js
deleted file mode 100644
index 7765521..0000000
--- a/app/addons/search/__tests__/search.actions.test.js
+++ /dev/null
@@ -1,53 +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.
-
-import sinon from 'sinon';
-import utils from '../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../core/api';
-import Actions from '../actions';
-import * as API from '../api';
-import '../base';
-import '../../documents/base';
-
-const {restore} = utils;
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('search actions', () => {
-
-  afterEach(() => {
-    restore(FauxtonAPI.navigate);
-    restore(FauxtonAPI.addNotification);
-    restore(API.fetchSearchResults);
-  });
-
-  it("should show a notification and redirect if database doesn't exist", () => {
-    const navigateSpy = sinon.spy(FauxtonAPI, 'navigate');
-    const notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-    sinon.stub(API, 'fetchSearchResults').rejects(new Error('db not found'));
-    FauxtonAPI.reduxDispatch = () => {};
-
-    const params = {
-      databaseName: 'safe-id-db',
-      designDoc: 'design-doc',
-      indexName: 'idx1',
-      query: 'a_query'
-    };
-    return Actions.dispatchInitSearchIndex(params)
-      .then(() => {
-        expect(notificationSpy.calledOnce).toBeTruthy();
-        expect(/db not found/.test(notificationSpy.args[0][0].msg)).toBeTruthy();
-        expect(navigateSpy.calledOnce).toBeTruthy();
-        expect(navigateSpy.args[0][0]).toBe('database/safe-id-db/_all_docs');
-      });
-  });
-
-});
diff --git a/app/addons/search/__tests__/search.reducers.test.js b/app/addons/search/__tests__/search.reducers.test.js
deleted file mode 100644
index 01d8102..0000000
--- a/app/addons/search/__tests__/search.reducers.test.js
+++ /dev/null
@@ -1,176 +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.
-
-import reducer from '../reducers';
-import ActionTypes from '../actiontypes';
-import Constants from '../constants';
-
-describe('Search Reducer', () => {
-
-  it('adds an analyzer row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, { type: 'DO_NOTHING' });
-    expect(newState.analyzerFields).toHaveLength(0);
-    newState = reducer(newState, action);
-    expect(newState.analyzerFields).toHaveLength(1);
-    expect(newState.analyzerFields[0].analyzer).toBe('sample');
-    expect(newState.analyzerFields[0].valid).toBe(true);
-  });
-
-  it('updates field name of an existing row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, action);
-    action.options.fieldName = 'f2';
-    newState = reducer(newState, action);
-    action.options.fieldName = 'f3';
-    newState = reducer(newState, action);
-
-    const removeAction = {
-      type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME,
-      options: { rowIndex: 1, fieldName: 'f100' }
-    };
-    newState = reducer(newState, removeAction);
-    expect(newState.analyzerFields[0].fieldName).toBe('f1');
-    expect(newState.analyzerFields[1].fieldName).toBe('f100');
-    expect(newState.analyzerFields[2].fieldName).toBe('f3');
-  });
-
-  it('updates analyzer of an existing row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, action);
-    action.options.fieldName = 'f2';
-    newState = reducer(newState, action);
-    action.options.fieldName = 'f3';
-    newState = reducer(newState, action);
-
-    const removeAction = {
-      type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW,
-      options: { rowIndex: 1, analyzer: 'keyword' }
-    };
-    newState = reducer(newState, removeAction);
-    expect(newState.analyzerFields[0].analyzer).toBe('sample');
-    expect(newState.analyzerFields[1].analyzer).toBe('keyword');
-    expect(newState.analyzerFields[2].analyzer).toBe('sample');
-  });
-
-  it('removes an analyzer row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, action);
-    action.options.fieldName = 'f2';
-    newState = reducer(newState, action);
-    action.options.fieldName = 'f3';
-    newState = reducer(newState, action);
-
-    const removeAction = {
-      type: ActionTypes.SEARCH_INDEX_REMOVE_ANALYZER_ROW,
-      options: { rowIndex: 1 }
-    };
-    newState = reducer(newState, removeAction);
-    expect(newState.analyzerFields).toHaveLength(2);
-    expect(newState.analyzerFields[0].fieldName).toBe('f1');
-    expect(newState.analyzerFields[1].fieldName).toBe('f3');
-  });
-
-  it('updates search results and resets the hasActiveQuery flag', () => {
-    let newState = reducer(undefined, {
-      type: ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_MADE
-    });
-    expect(newState.hasActiveQuery).toBe(true);
-
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED,
-      options: {
-        searchResults: ['result1', 'result2']
-      }
-    };
-    newState = reducer(newState, action);
-    expect(newState.searchResults).toHaveLength(2);
-    expect(newState.hasActiveQuery).toBe(false);
-  });
-
-  it('resets the search results when the search term is empty', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED,
-      options: {
-        searchResults: ['result1', 'result2']
-      }
-    };
-    let newState = reducer(undefined, action);
-    expect(newState.searchResults).toHaveLength(2);
-
-    const initAction = {
-      type: ActionTypes.SEARCH_INDEX_INIT,
-      options: {
-        searchQuery: ''
-      }
-    };
-    newState = reducer(newState, initAction);
-    expect(newState.searchResults).toBeUndefined();
-  });
-
-  it('loads the single analyzer correctly', () => {
-    const initialState = reducer(undefined, { type: 'DO_NOTHING' });
-    expect(initialState.singleAnalyzer).toBe('standard');
-
-    const ddocID = '_design/ddoc_test';
-    const mockDesigDocModel = {
-      id: ddocID,
-      dDocModel: () => { return mockDesigDocModel; },
-      getAnalyzer: () => 'keyword',
-      getIndex: () => '',
-      analyzerType: () => Constants.ANALYZER_SINGLE
-    };
-    const designDocs = [mockDesigDocModel];
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX,
-      options: {
-        database: 'db1',
-        designDocs,
-        ddocID,
-        indexName: 'idx1'
-      }
-    };
-    // Validate the single analyzer is correct
-    const stateWithKeywordAnalyzer = reducer(initialState, action);
-    expect(stateWithKeywordAnalyzer.singleAnalyzer).toBe('keyword');
-
-    // Validate the default analyzer is set when the DDoc doesn't specify one
-    mockDesigDocModel.getAnalyzer = () => undefined;
-    const stateWithNoAnalyzer = reducer(initialState, action);
-    expect(stateWithNoAnalyzer.singleAnalyzer).toBe(Constants.DEFAULT_ANALYZER);
-  });
-
-});
diff --git a/app/addons/search/actions.js b/app/addons/search/actions.js
deleted file mode 100644
index a1181d3..0000000
--- a/app/addons/search/actions.js
+++ /dev/null
@@ -1,429 +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.
-
-import FauxtonAPI from '../../core/api';
-import ActionTypes from './actiontypes';
-import Search from './resources';
-import SidebarActions from '../documents/sidebar/actions';
-import IndexEditorActions from '../documents/index-editor/actions';
-import * as API from './api';
-
-const dispatchInitNewSearchIndex = (params) => {
-  // ensure we start with a clear slate
-  FauxtonAPI.reduxDispatch({ type: ActionTypes.SEARCH_INDEX_CLEAR });
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_LOADING,
-    options: {
-      loading: true
-    }
-  });
-
-  params.designDocs.fetch().then(() => {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SEARCH_INDEX_DESIGN_DOCS_LOADED,
-      options: {
-        designDocs: params.designDocs,
-        defaultDDoc: params.defaultDDoc,
-        database: params.database
-      }
-    });
-  });
-};
-
-const dispatchInitSearchIndex = (params)  => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_LOADING,
-    options: {
-      loading: true
-    }
-  });
-
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_INIT,
-    options: {
-      databaseName: params.databaseName,
-      partitionKey: params.partitionKey,
-      ddocName: params.designDoc,
-      indexName: params.indexName,
-      searchQuery: params.query ? params.query : ''
-    }
-  });
-
-  if (params.query) {
-    return executSearchQuery(params.databaseName, params.partitionKey, params.designDoc,
-      params.indexName, params.query, FauxtonAPI.reduxDispatch);
-  }
-};
-
-const dispatchEditSearchIndex = (params) => {
-  const {database, ddocID, designDocs, indexName} = params;
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_LOADING,
-    options: {
-      loading: true
-    }
-  });
-
-  designDocs.fetch().then(ddocs => {
-    const ddoc = ddocs.rows.find(ddoc => ddoc._id === ddocID).doc;
-    if (!ddoc.indexes || !ddoc.indexes[indexName]) {
-      throw Error(`Index "${indexName}" not found`);
-    }
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX,
-      options: {
-        indexName,
-        database,
-        ddocID,
-        designDocs,
-      }
-    });
-  }).catch(err => {
-    const details = err.message ? err.message : '';
-    FauxtonAPI.addNotification({
-      msg: `There was a problem editing the search index "${indexName}". ` + details,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const selectTab = (tab) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SELECT_TAB,
-    options: {
-      tab: tab
-    }
-  });
-};
-
-const setSearchIndexName = (str) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_NAME,
-    options: {
-      value: str
-    }
-  });
-};
-
-const setAnalyzerType = (type) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_TYPE,
-    options: {
-      value: type
-    }
-  });
-};
-
-const addAnalyzerRow = (analyzer) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-    options: {
-      analyzer: analyzer
-    }
-  });
-};
-
-const removeAnalyzerRow = (rowIndex) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_REMOVE_ANALYZER_ROW,
-    options: {
-      rowIndex: rowIndex
-    }
-  });
-};
-
-const setAnalyzerRowFieldName = (params) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME,
-    options: {
-      rowIndex: params.rowIndex,
-      fieldName: params.fieldName
-    }
-  });
-};
-
-const setAnalyzer = (params) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW,
-    options: {
-      rowIndex: params.rowIndex,
-      analyzer: params.analyzer
-    }
-  });
-};
-
-const setDefaultMultipleAnalyzer = (analyzer) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER,
-    options: {
-      analyzer: analyzer
-    }
-  });
-};
-
-const setSingleAnalyzer = (analyzer) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_SINGLE_ANALYZER,
-    options: {
-      analyzer: analyzer
-    }
-  });
-};
-
-const saveSearchIndex = (doc, info, navigateToUrl) => {
-  doc.setIndex(info.indexName, info.indexFunction, info.analyzerInfo);
-
-  if (info.lastSavedDesignDocName === doc.id && info.lastSavedSearchIndexName !== info.indexName) {
-    var indexes = doc.get('indexes') || {};
-    delete indexes[info.lastSavedSearchIndexName];
-    doc.set({ indexes: indexes });
-  }
-
-  doc.save().then(() => {
-    info.designDocs.add(doc, { merge: true });
-
-    FauxtonAPI.addNotification({
-      msg: 'The search index has been saved.',
-      type: 'success',
-      clear: true
-    });
-
-    // if the user just saved the view to a different design doc, remove the view from the old design doc and
-    // maybe even delete if it's empty
-    if (!info.isCreatingIndex && info.lastSavedDesignDocName !== doc.id) {
-      const oldDesignDoc = IndexEditorActions.helpers.findDesignDoc(info.designDocs, info.lastSavedDesignDocName);
-      IndexEditorActions.safeDeleteIndex(oldDesignDoc, info.designDocs, 'indexes', info.lastSavedSearchIndexName, {
-        onSuccess: () => {
-          SidebarActions.dispatchUpdateDesignDocs(info.designDocs);
-        }
-      });
-    }
-
-    SidebarActions.dispatchUpdateDesignDocs(info.designDocs);
-    FauxtonAPI.navigate(navigateToUrl, { trigger: true });
-  }, (xhr) => {
-    const responseText = JSON.parse(xhr.responseText).reason;
-    FauxtonAPI.addNotification({
-      msg: 'Save failed: ' + responseText,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-
-const deleteSearchIndex = (options) => {
-  const onSuccess = () => {
-
-    // if the user was on the index that was just deleted, redirect them back to all docs
-    if (options.isOnIndex) {
-      const url = FauxtonAPI.urls('allDocs', 'app', options.database.safeID());
-      FauxtonAPI.navigate(url);
-    }
-    SidebarActions.dispatchUpdateDesignDocs(options.designDocs);
-
-    FauxtonAPI.addNotification({
-      msg: 'The <code>' + _.escape(options.indexName) + '</code> search index has been deleted.',
-      type: 'info',
-      escape: false,
-      clear: true
-    });
-    SidebarActions.dispatchHideDeleteIndexModal();
-  };
-
-  IndexEditorActions.safeDeleteIndex(options.designDoc, options.designDocs, 'indexes', options.indexName, { onSuccess });
-};
-
-const cloneSearchIndex = (params) => {
-  const targetDesignDoc = getDesignDoc(params.designDocs, params.targetDesignDocName, params.newDesignDocName, params.database);
-  let indexes = targetDesignDoc.get('indexes');
-  if (indexes && _.has(indexes, params.newIndexName)) {
-    FauxtonAPI.addNotification({
-      msg: 'That index name is already used in this design doc. Please enter a new name.',
-      type: 'error',
-      clear: true
-    });
-    return;
-  }
-  if (!indexes) {
-    indexes = {};
-  }
-  const sourceDesignDoc = IndexEditorActions.helpers.findDesignDoc(params.designDocs, '_design/' + params.sourceDesignDocName);
-  const sourceDesignDocJSON = sourceDesignDoc.toJSON();
-
-  // this sets whatever content is in the source index into the target design doc under the new index name
-  indexes[params.newIndexName] = sourceDesignDocJSON.indexes[params.sourceIndexName];
-  targetDesignDoc.set({ indexes: indexes });
-
-  targetDesignDoc.save().then(function () {
-    params.onComplete();
-    FauxtonAPI.addNotification({
-      msg: 'The search index has been cloned.',
-      type: 'success',
-      clear: true
-    });
-
-    SidebarActions.dispatchUpdateDesignDocs(params.designDocs);
-  },
-  function (xhr) {
-    params.onComplete();
-    var responseText = JSON.parse(xhr.responseText).reason;
-    FauxtonAPI.addNotification({
-      msg: 'Clone failed: ' + responseText,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const gotoEditSearchIndexPage = (databaseName, partitionKey, designDocName, indexName) => {
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  FauxtonAPI.navigate('#' + FauxtonAPI.urls('search', 'edit', encodeURIComponent(databaseName),
-    encodedPartKey, encodeURIComponent(designDocName), encodeURIComponent(indexName)));
-};
-
-const selectDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SELECT_DESIGN_DOC,
-    options: {
-      value: designDoc
-    }
-  });
-};
-
-// const querySearch = (searchQuery, partitionKey) => {
-const querySearch = (databaseName, partitionKey, ddocName, indexName, searchQuery) => {
-  const encodedDatabaseName = encodeURIComponent(databaseName);
-  const encodedPartitionKey = encodeURIComponent(partitionKey);
-  const encodedDdocName = encodeURIComponent(ddocName);
-  const encodedIndexName = encodeURIComponent(indexName);
-  const encodedSearchQuery = encodeURIComponent(searchQuery);
-
-  const baseUrl = partitionKey ?
-    FauxtonAPI.urls('partitioned_search', 'app', encodedDatabaseName, encodedPartitionKey, encodedDdocName, encodedIndexName) :
-    FauxtonAPI.urls('search', 'app', encodedDatabaseName, encodedDdocName, encodedIndexName);
-  FauxtonAPI.navigate(`${baseUrl}${encodedIndexName}?${encodedSearchQuery}`, {trigger: true});
-};
-
-const executSearchQuery = (database, partitionKey, ddoc, index, searchQuery, dispatch) => {
-  dispatch({ type: ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_MADE });
-
-  return API.fetchSearchResults(database, partitionKey, ddoc, index, searchQuery)
-    .then(rows => {
-      dispatch({
-        type: ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED,
-        options: {
-          searchResults: rows
-        }
-      });
-    }).catch(err => {
-      dispatch({ type: ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_ERROR });
-
-      if (err && err.message.includes('`partition` not supported')) {
-        dispatch(partitionParamNotSupported());
-      } else if (err && err.message.includes('`partition` parameter is mandatory')) {
-        dispatch(partitionParamIsMandatory());
-      } else {
-        FauxtonAPI.addNotification({
-          msg: 'Search failed: ' + err.message,
-          type: 'error',
-          clear: true
-        });
-      }
-
-      if (err.message.includes('not found')) {
-        FauxtonAPI.navigate(FauxtonAPI.urls('allDocsSanitized', 'app', database), {trigger: true});
-      }
-    });
-};
-
-const setSearchQuery = (query) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_SEARCH_QUERY,
-    options: {
-      query: query
-    }
-  });
-};
-
-const updateNewDesignDocName = (designDocName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED,
-    options: {
-      value: designDocName
-    }
-  });
-};
-
-const updateNewDesignDocPartitioned = (isPartitioned) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED,
-    options: {
-      value: isPartitioned
-    }
-  });
-};
-
-const partitionParamNotSupported = () => ({
-  type: ActionTypes.SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED
-});
-
-const partitionParamIsMandatory = () => ({
-  type: ActionTypes.SEARCH_INDEX_PARTITION_PARAM_MANDATORY
-});
-
-
-// helpers
-
-function getDesignDoc (designDocs, targetDesignDocName, newDesignDocName, database) {
-  if (targetDesignDocName === 'new-doc') {
-    var doc = {
-      "_id": "_design/" + newDesignDocName,
-      "indexes": {},
-      "language": "javascript"
-    };
-    return new Search.Doc(doc, { database: database });
-  }
-
-  var foundDoc = designDocs.find(function (ddoc) {
-    return ddoc.id === targetDesignDocName;
-  });
-  return (!foundDoc) ? null : foundDoc.dDocModel();
-}
-
-
-export default {
-  dispatchInitNewSearchIndex,
-  dispatchInitSearchIndex,
-  dispatchEditSearchIndex,
-  selectTab,
-  setSearchIndexName,
-  setAnalyzerType,
-  addAnalyzerRow,
-  removeAnalyzerRow,
-  setAnalyzerRowFieldName,
-  setAnalyzer,
-  setDefaultMultipleAnalyzer,
-  selectDesignDoc,
-  saveSearchIndex,
-  cloneSearchIndex,
-  deleteSearchIndex,
-  gotoEditSearchIndexPage,
-  querySearch,
-  setSearchQuery,
-  setSingleAnalyzer,
-  updateNewDesignDocName,
-  updateNewDesignDocPartitioned,
-  partitionParamNotSupported,
-  partitionParamIsMandatory
-};
diff --git a/app/addons/search/actiontypes.js b/app/addons/search/actiontypes.js
deleted file mode 100644
index c99abad..0000000
--- a/app/addons/search/actiontypes.js
+++ /dev/null
@@ -1,38 +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.
-
-export default {
-  SEARCH_INDEX_DESIGN_DOCS_LOADED: 'SEARCH_INDEX_DESIGN_DOCS_LOADED',
-  SEARCH_INDEX_INIT: 'SEARCH_INDEX_INIT',
-  SEARCH_INDEX_SELECT_TAB: 'SEARCH_INDEX_SELECT_TAB',
-  SEARCH_INDEX_SET_NAME: 'SEARCH_INDEX_SET_NAME',
-  SEARCH_INDEX_SET_ANALYZER_TYPE: 'SEARCH_INDEX_SET_ANALYZER_TYPE',
-  SEARCH_INDEX_ADD_ANALYZER_ROW: 'SEARCH_INDEX_ADD_ANALYZER_ROW',
-  SEARCH_INDEX_REMOVE_ANALYZER_ROW: 'SEARCH_INDEX_REMOVE_ANALYZER_ROW',
-  SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME: 'SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME',
-  SEARCH_INDEX_SET_ANALYZER_ROW: 'SEARCH_INDEX_SET_ANALYZER_ROW',
-  SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER: 'SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER',
-  SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX: 'SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX',
-  SEARCH_INDEX_PREVIEW_MODEL_UPDATED: 'SEARCH_INDEX_PREVIEW_MODEL_UPDATED',
-  SEARCH_INDEX_PREVIEW_REQUEST_MADE: 'SEARCH_INDEX_PREVIEW_REQUEST_MADE',
-  SEARCH_INDEX_PREVIEW_REQUEST_ERROR: 'PREVIEW_MODEL_REQUEST_ERROR',
-  SEARCH_INDEX_SELECT_DESIGN_DOC: 'SEARCH_INDEX_SELECT_DESIGN_DOC',
-  SEARCH_INDEX_SET_SINGLE_ANALYZER: 'SEARCH_INDEX_SET_SINGLE_ANALYZER',
-  SEARCH_INDEX_SET_SEARCH_QUERY: 'SEARCH_INDEX_SET_SEARCH_QUERY',
-  SEARCH_INDEX_SET_LOADING: 'SEARCH_INDEX_SET_LOADING',
-  SEARCH_INDEX_CLEAR: 'SEARCH_INDEX_CLEAR',
-  SEARCH_INDEX_UPDATE_INDEX_FUNCTION: 'SEARCH_INDEX_UPDATE_INDEX_FUNCTION',
-  SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED: 'SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED',
-  SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED: 'SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED',
-  SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED: 'SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED',
-  SEARCH_INDEX_PARTITION_PARAM_MANDATORY: 'SEARCH_INDEX_PARTITION_PARAM_MANDATORY'
-};
diff --git a/app/addons/search/api.js b/app/addons/search/api.js
deleted file mode 100644
index 5711c98..0000000
--- a/app/addons/search/api.js
+++ /dev/null
@@ -1,33 +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.
-
-import FauxtonAPI from '../../core/api';
-import { get } from '../../core/ajax';
-
-function searchUrl(database, partitionKey, ddoc, index, searchQuery) {
-  //https://mycouchdb/db/_design/views101/_search/animals?q=kookaburra
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  return FauxtonAPI.urls('search', 'server', encodeURIComponent(database), encodedPartKey,
-    encodeURIComponent(ddoc), encodeURIComponent(index),
-    '?limit=10&q=' + encodeURIComponent(searchQuery));
-}
-
-export const fetchSearchResults = (database, partitionKey, ddoc, index, searchQuery) => {
-  const url = searchUrl(database, partitionKey, ddoc, index, searchQuery);
-  return get(url).then((res) => {
-    if (res.error) {
-      throw new Error(res.reason);
-    }
-
-    return res.rows;
-  });
-};
diff --git a/app/addons/search/assets/less/search.less b/app/addons/search/assets/less/search.less
deleted file mode 100644
index 9725d55..0000000
--- a/app/addons/search/assets/less/search.less
+++ /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.
-@import "../../../../../assets/less/bootstrap/mixins.less";
-@import "../../../../../assets/less/variables.less";
-
-.search-index-page-loading {
-  margin-top: 20px;
-}
-
-.edit-search-index-page-loading {
-  margin-top: 25px;
-}
-
-.index-tabs.dashboard-upper-menu {
-  position: inherit;
-  &.index-tabs {
-    border-bottom: 0;
-    .fonticon:before {
-      margin-right: 6px;
-    }
-  }
-}
-
-#queryText{
-  max-width: 300px;
-}
-
-.ace-editor-section .ace_editor {
-  font-size: 13px;
-  width: 100%;
-  line-height: 22px;
-}
-
-.search-query-save {
-  max-width: 100%;
-  .design-doc-group #new-ddoc-section {
-    margin-top: 24px;
-    label {
-      padding-top: 12px;
-    }
-  }
-}
-
-#analyzer-fields {
-  margin-top: 10px;
-
-  li {
-    margin-bottom: 5px;
-
-    &:first-child {
-      button {
-        margin-top: 27px;
-      }
-    }
-    div:first-child {
-      margin-left: 0;
-    }
-  }
-
-  .span4 {
-    margin-right: 3px;
-    width: 30%;
-
-    .styled-select, select {
-      width: 100%;
-    }
-  }
-}
-
-.delete-analyzer {
-  margin-top: 3px;
-  margin-left: 15px;
-}
-
-.search-index-content>div {
-  margin: 20px 10px 0 20px;
-  .icon-question-sign {
-    margin-left: 4px;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-}
-
-.search-index-function {
-  label {
-    margin-right: 0;
-  }
-  .ace_editor {
-    line-height: 22px;
-  }
-}
-
-#search-query-submit {
-  padding: 12px;
-}
-
-#search-index-preview-form {
-  margin: 5px 0 20px;
-  .input-append {
-    vertical-align: bottom;
-  }
-  .help-link {
-    display: inline-block;
-    margin-left: 12px;
-    padding-bottom: 23px;
-  }
-}
-
-#search-index-help {
-  h4 {
-    margin-top: 18px;
-  }
-
-  ul {
-    margin: 0 0 10px;
-    padding: 0;
-    list-style-type: none;
-  }
-  .search-index-examples {
-    li {
-      line-height: 28px;
-      span {
-        .search-index-code-section;
-      }
-    }
-  }
-}
-
-.search-index-tab-content {
-  a:hover {
-    text-decoration: none;
-  }
-}
-
-.search-index-code-section {
-  font-size: 12px;
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-  background-color: #ddd;
-  padding: 5px;
-  border-radius: 3px;
-}
-
-#search-index-query-button {
-  height: 46px;
-  .border-right-radius(@radius);
-}
-
-body #dashboard-content #search-index-form {
-  position: relative;
-}
diff --git a/app/addons/search/base.js b/app/addons/search/base.js
deleted file mode 100644
index 0562256..0000000
--- a/app/addons/search/base.js
+++ /dev/null
@@ -1,102 +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.
-import Helpers from '../../helpers';
-import FauxtonAPI from '../../core/api';
-import Actions from './actions';
-import SearchRoutes from './routes';
-import reducers from './reducers';
-import { get } from "../../core/ajax";
-import Constants from './constants';
-import './assets/less/search.less';
-
-function checkSearchFeature () {
-  // Checks if the CouchDB server supports Search
-  return get(Helpers.getServerUrl("/")).then((couchdb) => {
-    return couchdb.features && couchdb.features.includes('search');
-  }).catch(() => {
-    return false;
-  });
-}
-
-function partitionUrlComponent(partitionKey) {
-  return partitionKey ? '/_partition/' + partitionKey : '';
-}
-
-SearchRoutes.initialize = function () {
-  checkSearchFeature().then(function(enabled) {
-    if (!enabled) return;
-
-    FauxtonAPI.registerExtension('sidebar:list', {
-      selector: 'indexes',
-      name: 'Search Indexes',
-      urlNamespace: 'search',
-      indexLabel: 'search index', // used for labels
-      onDelete: Actions.deleteSearchIndex,
-      onClone: Actions.cloneSearchIndex,
-      onEdit: Actions.gotoEditSearchIndexPage
-    });
-    FauxtonAPI.registerExtension('sidebar:links', {
-      title: "New Search Index",
-      url: "new_search",
-      icon: 'fonticon-plus-circled',
-      showForPartitionedDDocs: true
-    });
-    FauxtonAPI.registerExtension('sidebar:newLinks', {
-      url: 'new_search',
-      name: 'Search Index'
-    });
-
-    // this tells Fauxton of the new Search Index type. It's used to determine when a design doc is really empty
-    FauxtonAPI.registerExtension('IndexTypes:propNames', 'indexes');
-
-    FauxtonAPI.registerExtension('mango:indexTemplates', Constants.SEARCH_MANGO_INDEX_TEMPLATES);
-  });
-};
-
-FauxtonAPI.registerUrls('partitioned_search', {
-  app: function (id, partitionKey, designDoc) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/';
-  }
-});
-
-FauxtonAPI.registerUrls('search', {
-  server: function (id, partitionKey, designDoc, searchName, query) {
-    return Helpers.getServerUrl('/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + searchName + query);
-  },
-
-  app: function (id, designDoc) {
-    return 'database/' + id + '/_design/' + designDoc + '/_search/';
-  },
-
-  edit: function (database, partitionKey, designDoc, indexName) {
-    return 'database/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + indexName + '/edit';
-  },
-
-  fragment: function (id, partitionKey, designDoc, search) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + search;
-  },
-
-  showIndex: function (id, partitionKey, designDoc, search) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/' + designDoc + '/_search/' + search;
-  },
-
-  apiurl: function (id, partitionKey, designDoc, searchName, query) {
-    return window.location.origin + '/' + encodeURIComponent(id) + '/_design/' + encodeURIComponent(designDoc) +
-      '/_search/' + encodeURIComponent(searchName) + '?q=' + encodeURIComponent(query);
-  }
-});
-
-FauxtonAPI.addReducers({
-  search: reducers
-});
-
-export default SearchRoutes;
diff --git a/app/addons/search/components/Analyzer.js b/app/addons/search/components/Analyzer.js
deleted file mode 100644
index 06807f2..0000000
--- a/app/addons/search/components/Analyzer.js
+++ /dev/null
@@ -1,125 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Constants from '../constants';
-import AnalyzerMultiple from './AnalyzerMultiple';
-import AnalyzerDropdown from './AnalyzerDropdown';
-
-// handles the entire Analyzer section: Simple and Multiple analyzers
-export default class Analyzer extends React.Component {
-  static propTypes = {
-    analyzerType: PropTypes.string.isRequired,
-    analyzerFields: PropTypes.array.isRequired,
-    defaultMultipleAnalyzer: PropTypes.string.isRequired,
-    singleAnalyzer: PropTypes.string.isRequired,
-    setAnalyzerType: PropTypes.func.isRequired,
-    setSingleAnalyzer: PropTypes.func.isRequired,
-    setDefaultMultipleAnalyzer: PropTypes.func.isRequired,
-    addAnalyzerRow: PropTypes.func.isRequired
-  };
-
-  selectAnalyzerType = (e) => {
-    this.props.setAnalyzerType(e.target.value);
-  };
-
-  validate = () => {
-    if (this.props.analyzerType === Constants.ANALYZER_SINGLE) {
-      return true;
-    }
-    return this.analyzerMultiple.validate();
-  };
-
-  getAnalyzerFieldsAsObject = () => {
-    return this.props.analyzerFields.reduce((acc, row) => {
-      const fieldName = row.fieldName.replace(/["']/g, '');
-      acc[fieldName] = row.analyzer;
-      return acc;
-    }, {});
-  };
-
-  getInfo = () => {
-    return this.props.analyzerType === Constants.ANALYZER_SINGLE
-      ? this.props.singleAnalyzer
-      : {
-        name: 'perfield',
-        default: this.props.defaultMultipleAnalyzer,
-        fields: this.getAnalyzerFieldsAsObject()
-      };
-  };
-
-  selectSingleAnalyzer = (e) => {
-    this.props.setSingleAnalyzer(e.target.value);
-  };
-
-  selectDefaultMultipleAnalyzer = (e) => {
-    this.props.setDefaultMultipleAnalyzer(e.target.value);
-  };
-
-  getAnalyzerType = () => {
-    return this.props.analyzerType === Constants.ANALYZER_SINGLE
-      ? (<AnalyzerDropdown
-        label="Type"
-        defaultSelected={this.props.singleAnalyzer}
-        onChange={this.selectSingleAnalyzer}
-      />)
-      : (<AnalyzerMultiple
-        ref={node => this.analyzerMultiple = node}
-        defaultAnalyzer={this.props.defaultMultipleAnalyzer}
-        selectDefaultMultipleAnalyzer={this.selectDefaultMultipleAnalyzer}
-        fields={this.props.analyzerFields}
-        addAnalyzerRow={this.props.addAnalyzerRow}
-        removeAnalyzerRow={this.props.removeAnalyzerRow}
-        setAnalyzerRowFieldName={this.props.setAnalyzerRowFieldName}
-        setAnalyzer={this.props.setAnalyzer}
-      />);
-  };
-
-  render() {
-    let multipleClasses = 'btn';
-    if (this.props.analyzerType === Constants.ANALYZER_MULTIPLE) {
-      multipleClasses += ' active';
-    }
-    let singleClasses = 'btn';
-    if (this.props.analyzerType === Constants.ANALYZER_SINGLE) {
-      singleClasses += ' active';
-    }
-
-    return (
-      <div className="well">
-        <div className="control-group">
-          <label htmlFor="search-analyzer">Analyzer</label>
-          <div className="btn-group toggle-btns" id="analyzer">
-            <label style={{width: '82px'}}  htmlFor="single-analyzer" className={singleClasses}>Single</label>
-            <input
-              type="radio"
-              id="single-analyzer"
-              name="search-analyzer"
-              value="single"
-              checked={this.props.analyzerType === Constants.ANALYZER_SINGLE}
-              onChange={this.selectAnalyzerType} />
-            <input
-              type="radio"
-              id="multiple-analyzer"
-              name="search-analyzer"
-              value="multiple"
-              checked={this.props.analyzerType === Constants.ANALYZER_MULTIPLE}
-              onChange={this.selectAnalyzerType} />
-            <label style={{width: '82px'}} htmlFor="multiple-analyzer" className={multipleClasses}>Multiple</label>
-          </div>
-        </div>
-        {this.getAnalyzerType()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/AnalyzerDropdown.js b/app/addons/search/components/AnalyzerDropdown.js
deleted file mode 100644
index fa28612..0000000
--- a/app/addons/search/components/AnalyzerDropdown.js
+++ /dev/null
@@ -1,78 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import GeneralComponents from '../../components/react-components';
-
-const StyledSelect = GeneralComponents.StyledSelect;
-
-export default class AnalyzerDropdown extends React.Component {
-  static defaultProps = {
-    defaultSelected: 'standard',
-    label: 'Type',
-    id: 'analyzer-default',
-    classes: '',
-    onChange: function () { }
-  };
-  static propTypes = {
-    defaultSelected: PropTypes.string.isRequired,
-    label: PropTypes.string.isRequired,
-    id: PropTypes.string.isRequired,
-    classes: PropTypes.string.isRequired,
-    onChange: PropTypes.func.isRequired
-  };
-
-  getAnalyzers = () => {
-    const analyzers = [
-      'Standard', 'Keyword', 'Simple', 'Whitespace', 'Classic', 'Email'
-    ];
-    return analyzers.map((i) => {
-      return (<option value={i.toLowerCase()} key={i}>{i}</option>);
-    });
-  };
-
-  getLanguages = () => {
-    const languages = [
-      'Arabic', 'Armenian', 'Basque', 'Bulgarian', 'Brazilian', 'Catalan', 'Cjk', 'Chinese', 'Czech',
-      'Danish', 'Dutch', 'English', 'Finnish', 'French', 'Galician', 'German', 'Greek', 'Hindi', 'Hungarian',
-      'Indonesian', 'Irish', 'Italian', 'Japanese', 'Latvian', 'Norwegian', 'Persian', 'Polish', 'Portuguese',
-      'Romanian', 'Russian', 'Spanish', 'Swedish', 'Thai', 'Turkish'
-    ];
-    return languages.map((lang) => {
-      return (<option value={lang.toLowerCase()} key={lang}>{lang}</option>);
-    });
-  };
-
-  getLabel = () => {
-    return this.props.label === '' ? null : <label htmlFor={this.props.id}>{this.props.label}</label>;
-  };
-
-  render() {
-    const languages =
-      <optgroup label="Language-specific" key="languages">
-        {this.getLanguages()}
-      </optgroup>;
-
-    return (
-      <div className={this.props.classes}>
-        {this.getLabel()}
-        <StyledSelect
-          selectChange={this.props.onChange}
-          selectValue={this.props.defaultSelected}
-          selectId={this.props.id}
-          selectContent={[this.getAnalyzers(), languages]}
-        />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/AnalyzerMultiple.js b/app/addons/search/components/AnalyzerMultiple.js
deleted file mode 100644
index 4f1ca81..0000000
--- a/app/addons/search/components/AnalyzerMultiple.js
+++ /dev/null
@@ -1,94 +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.
-
-import FauxtonAPI from '../../../core/api';
-import PropTypes from 'prop-types';
-import React from 'react';
-import AnalyzerRow from './AnalyzerRow';
-import AnalyzerDropdown from './AnalyzerDropdown';
-
-export default class AnalyzerMultiple extends React.Component {
-  static propTypes = {
-    addAnalyzerRow: PropTypes.func.isRequired,
-    defaultAnalyzer: PropTypes.string.isRequired,
-    selectDefaultMultipleAnalyzer: PropTypes.func.isRequired,
-    fields: PropTypes.array.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      showErrors: false
-    };
-  }
-
-  addRow = (e) => {
-    e.preventDefault();
-    this.props.addAnalyzerRow(this.props.defaultAnalyzer);
-  };
-
-  getRows = () => {
-    return this.props.fields.map((row, i) => {
-      return (
-        <AnalyzerRow
-          row={row}
-          key={row.key}
-          rowIndex={i}
-          showErrors={this.state.showErrors}
-          setAnalyzer={this.props.setAnalyzer}
-          setAnalyzerRowFieldName={this.props.setAnalyzerRowFieldName}
-          removeAnalyzerRow={this.props.removeAnalyzerRow}
-        />
-      );
-    });
-  };
-
-  validate = () => {
-    this.setState({ showErrors: true });
-
-    let hasDuplicate = false;
-    const fieldNames = [];
-    const allValid = this.props.fields.every((row) => {
-      if (fieldNames.includes(row.fieldName)) {
-        hasDuplicate = true;
-      }
-      fieldNames.push(row.fieldName);
-      return row.valid;
-    });
-
-    if (!allValid || hasDuplicate) {
-      FauxtonAPI.addNotification({
-        msg: 'Fieldnames cannot be empty and must be unique.',
-        type: 'error',
-        clear: true
-      });
-    }
-    return allValid;
-  };
-
-  render() {
-    return (
-      <div>
-        <AnalyzerDropdown
-          label="Default"
-          id="defaultAnalyzer"
-          defaultSelected={this.props.defaultAnalyzer}
-          onChange={this.props.selectDefaultMultipleAnalyzer}
-          isValidating={this.validate} />
-        <ul id="analyzer-fields" className="unstyled">{this.getRows()}</ul>
-        <button className="addfield btn btn-small btn-primary" onClick={this.addRow}>
-          Add Field
-        </button>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/AnalyzerRow.js b/app/addons/search/components/AnalyzerRow.js
deleted file mode 100644
index 7926b86..0000000
--- a/app/addons/search/components/AnalyzerRow.js
+++ /dev/null
@@ -1,81 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import AnalyzerDropdown from './AnalyzerDropdown';
-
-export default class AnalyzerRow extends React.Component {
-  static propTypes = {
-    rowIndex: PropTypes.number.isRequired,
-    row: PropTypes.object.isRequired,
-    showErrors: PropTypes.bool.isRequired,
-    removeAnalyzerRow: PropTypes.func.isRequired,
-    setAnalyzerRowFieldName: PropTypes.func.isRequired,
-    setAnalyzer: PropTypes.func.isRequired
-  };
-
-  deleteRow = (e) => {
-    e.preventDefault();
-    this.props.removeAnalyzerRow(this.props.rowIndex);
-  };
-
-  getFieldNameHeading = (analyzerId) => {
-    return (this.props.rowIndex === 0) && <label htmlFor={analyzerId}>Fieldname</label>;
-  };
-
-  changeFieldName = (e) => {
-    this.props.setAnalyzerRowFieldName({
-      rowIndex: this.props.rowIndex,
-      fieldName: e.target.value
-    });
-  };
-
-  selectAnalyzer = (e) => {
-    this.props.setAnalyzer({
-      rowIndex: this.props.rowIndex,
-      analyzer: e.target.value
-    });
-  };
-
-  render() {
-    const analyzerId = "analyzer-row-" + this.props.rowIndex;
-    const analyzerHeading = (this.props.rowIndex === 0) ? 'Analyzer' : '';
-
-    let fieldNameClasses = 'span12';
-    if (this.props.showErrors && !this.props.row.valid) {
-      fieldNameClasses += ' unhappy';
-    }
-
-    return (
-      <li>
-        <div className="row-fluid">
-          <div className="span4">
-            {this.getFieldNameHeading(analyzerId)}
-            <input type="text" value={this.props.row.fieldName} className={fieldNameClasses} onChange={this.changeFieldName} />
-          </div>
-
-          <AnalyzerDropdown
-            id={analyzerId}
-            label={analyzerHeading}
-            defaultSelected={this.props.row.analyzer}
-            classes="span4"
-            onChange={this.selectAnalyzer} />
-
-          <div className="span4">
-            <button className="btn btn-danger delete-analyzer" onClick={this.deleteRow}>delete</button>
-          </div>
-        </div>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/search/components/SearchForm.js b/app/addons/search/components/SearchForm.js
deleted file mode 100644
index 4c6371a..0000000
--- a/app/addons/search/components/SearchForm.js
+++ /dev/null
@@ -1,131 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../core/api';
-import GeneralComponents from '../../components/react-components';
-
-export default class SearchForm extends React.Component {
-  static propTypes = {
-    hasActiveQuery: PropTypes.bool.isRequired,
-    searchQuery: PropTypes.string.isRequired,
-    searchPerformed: PropTypes.bool.isRequired,
-    querySearch: PropTypes.func.isRequired,
-    setSearchQuery: PropTypes.func.isRequired,
-    searchResults: PropTypes.array
-  };
-
-  componentDidMount() {
-    this.searchInput.focus();
-  }
-
-  componentDidUpdate() {
-    prettyPrint();
-  }
-
-  querySearch = (e) => {
-    e.preventDefault();
-    if (this.props.searchQuery.trim() === '') {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter a search term.',
-        type: 'error',
-        clear: true
-      });
-      this.searchInput.focus();
-      return;
-    }
-    const {databaseName, partitionKey, ddocName, indexName, searchQuery} = this.props;
-    this.props.querySearch(databaseName, partitionKey, ddocName, indexName, searchQuery);
-  };
-
-  getRows = () => {
-    const database = encodeURIComponent(this.props.databaseName);
-    return this.props.searchResults.map((item) => {
-      const doc = {
-        header: item.id,
-        content: JSON.stringify(item, null, '  '),
-        url: FauxtonAPI.urls('document', 'app', database, encodeURIComponent(item.id))
-      };
-      return <GeneralComponents.Document
-        key={item.id}
-        keylabel={'id:'}
-        doc={doc}
-        header={item.id}
-        isDeletable={false}
-        docContent={doc.content}
-        onClick={this.onClick}
-        docChecked={() => { }}
-        docIdentifier={item.id} />;
-    });
-  };
-
-  onClick = (id, doc) => {
-    if (doc.url) {
-      FauxtonAPI.navigate(doc.url);
-    }
-  };
-
-  onType = (e) => {
-    this.props.setSearchQuery(e.target.value);
-  };
-
-  getResults = () => {
-    if (this.props.hasActiveQuery) {
-      return (<GeneralComponents.LoadLines />);
-    }
-
-    if (this.props.noResultsWarning) {
-      return (<div data-select="search-result-set">{this.props.noResultsWarning}</div>);
-    }
-
-    if (!this.props.searchResults) {
-      return false;
-    }
-
-    if (this.props.searchResults.length === 0) {
-      return (<div data-select="search-result-set">No results found.</div>);
-    }
-
-    return (
-      <div id="doc-list" data-select="search-result-set">
-        {this.getRows()}
-      </div>
-    );
-  };
-
-  render() {
-    const buttonLabel = this.props.hasActiveQuery ? 'Querying...' : 'Query';
-    return (
-      <div>
-        <form id="search-index-preview-form">
-          <span className="input-append">
-            <input
-              className="span4"
-              ref={el => this.searchInput = el}
-              type="text"
-              placeholder="Enter your search query"
-              onChange={this.onType}
-              value={this.props.searchQuery} />
-            <button className="btn btn-primary" id="search-index-query-button" type="submit" disabled={this.props.hasActiveQuery}
-              onClick={this.querySearch}>{buttonLabel}</button>
-          </span>
-          <a className="help-link" data-bypass="true" href={FauxtonAPI.constants.DOC_URLS.SEARCH_INDEX_QUERIES} target="_blank" rel="noopener noreferrer">
-            <i className="icon-question-sign" />
-          </a>
-        </form>
-
-        {this.getResults()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/SearchFormContainer.js b/app/addons/search/components/SearchFormContainer.js
deleted file mode 100644
index d5bbba8..0000000
--- a/app/addons/search/components/SearchFormContainer.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { connect } from 'react-redux';
-import SearchForm from './SearchForm';
-import Actions from '../actions';
-
-const mapStateToProps = ({ search }) => {
-  return {
-    databaseName: search.databaseName,
-    partitionKey: search.partitionKey,
-    ddocName: search.ddocName,
-    indexName: search.indexName,
-    hasActiveQuery: search.hasActiveQuery,
-    searchQuery: search.searchQuery,
-    searchPerformed: search.searchPerformed,
-    searchResults: search.searchResults,
-    noResultsWarning: search.noResultsWarning
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    querySearch: (databaseName, partitionKey, ddocName, indexName, searchQuery) => {
-      Actions.querySearch(databaseName, partitionKey, ddocName, indexName, searchQuery);
-    },
-
-    setSearchQuery: (query) => {
-      dispatch(Actions.setSearchQuery(query));
-    }
-  };
-};
-
-const SearchFormContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SearchForm);
-
-export default SearchFormContainer;
diff --git a/app/addons/search/components/SearchIndexEditor.js b/app/addons/search/components/SearchIndexEditor.js
deleted file mode 100644
index dbff53a..0000000
--- a/app/addons/search/components/SearchIndexEditor.js
+++ /dev/null
@@ -1,165 +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.
-
-import FauxtonAPI from '../../../core/api';
-import app from '../../../app';
-import PropTypes from 'prop-types';
-import React from 'react';
-import GeneralComponents from '../../components/react-components';
-import IndexEditorComponents from '../../documents/index-editor/components';
-import Analyzer from './Analyzer';
-
-const DesignDocSelector = IndexEditorComponents.DesignDocSelector;
-
-export default class SearchIndexEditor extends React.Component {
-  static defaultProps = {
-    isCreatingIndex: true,
-    blur: function () { },
-    isLoading: true
-  };
-
-  static propTypes = {
-    isLoading: PropTypes.bool,
-    isCreatingIndex: PropTypes.bool,
-    database: PropTypes.object.isRequired,
-    saveDoc: PropTypes.object.isRequired,
-    newDesignDocName: PropTypes.string,
-    blur: PropTypes.func,
-    setSearchIndexName: PropTypes.func.isRequired,
-    searchIndexFunction: PropTypes.string.isRequired,
-    saveSearchIndex: PropTypes.func.isRequired,
-    selectDesignDoc: PropTypes.func.isRequired,
-    updateNewDesignDocName: PropTypes.func.isRequired
-  };
-
-  updateSearchIndexName = (e) => {
-    this.props.setSearchIndexName(e.target.value);
-  };
-
-  saveIndex = (e) => {
-    e.preventDefault();
-
-    // pass off validation work to the individual form sections
-    if (!this.designDocSelector.validate() || !this.analyzer.validate()) {
-      return;
-    }
-
-    if (!this.props.searchIndexName.trim()) {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter the index name.',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-
-    const dDocNameClean = this.props.saveDoc.id.replace(/_design\//, '');
-    const encodedPartKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const url = FauxtonAPI.urls('search', 'fragment', encodeURIComponent(this.props.database.id), encodedPartKey,
-      encodeURIComponent(dDocNameClean), encodeURIComponent(this.props.searchIndexName));
-
-    this.props.saveSearchIndex(this.props.saveDoc, {
-      isCreatingIndex: this.props.isCreatingIndex,
-      indexName: this.props.searchIndexName,
-      designDocs: this.props.designDocs,
-      database: this.props.database,
-      indexFunction: this.getIndexFunction(),
-      analyzerInfo: this.analyzer.getInfo(),
-      lastSavedSearchIndexName: this.props.lastSavedSearchIndexName,
-      lastSavedDesignDocName: this.props.lastSavedDesignDocName
-    }, url);
-  };
-
-  getIndexFunction = () => {
-    return this.searchIndexEditor.getValue();
-  };
-
-  getDesignDocList = () => {
-    return this.props.designDocs.map(function (doc) {
-      return doc.id;
-    });
-  };
-
-  getCancelLink() {
-    const encodedDatabase = encodeURIComponent(this.props.database.id);
-    const encodedPartitionKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    if (!this.props.lastSavedDesignDocName || this.props.isCreatingIndex) {
-      return '#' + FauxtonAPI.urls('allDocs', 'app', encodedDatabase, encodedPartitionKey);
-    }
-
-    const cleanDDocName = this.props.lastSavedDesignDocName.replace(/^_design\//, '');
-    const encodedDDoc = '_design/' + encodeURIComponent(cleanDDocName);
-    const encodedIndex = encodeURIComponent(this.props.lastSavedSearchIndexName);
-    return '#' + FauxtonAPI.urls('search', 'showIndex', encodedDatabase,
-      encodedPartitionKey, encodedDDoc, encodedIndex);
-  }
-
-  render() {
-    if (this.props.isLoading) {
-      return (
-        <div className="search-index-page-loading">
-          <GeneralComponents.LoadLines />
-        </div>
-      );
-    }
-    // If failed to load
-    if (!this.props.database) {
-      return null;
-    }
-
-    const pageHeader = this.props.isCreatingIndex ? 'New Search Index' : 'Edit Search Index';
-    const btnLabel = this.props.isCreatingIndex ? 'Create Document and Build Index' : 'Save Document and Build Index';
-    return (
-      <form className="form-horizontal search-query-save" id="search-index">
-        <h3 className="simple-header">{pageHeader}</h3>
-
-        <DesignDocSelector
-          ref={node => this.designDocSelector = node}
-          designDocLabel="Save to design document"
-          designDocList={this.getDesignDocList()}
-          isDbPartitioned={this.props.isDbPartitioned}
-          newDesignDocName={this.props.newDesignDocName}
-          newDesignDocPartitioned={this.props.newDesignDocPartitioned}
-          selectedDesignDocName={this.props.ddocName}
-          selectedDesignDocPartitioned={this.props.ddocPartitioned}
-          onSelectDesignDoc={this.props.selectDesignDoc}
-          onChangeNewDesignDocName={this.props.updateNewDesignDocName}
-          onChangeNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned}
-          docLink={app.helpers.getDocUrl('DOC_URL_DESIGN_DOCS')} />
-
-        <div className="control-group">
-          <label htmlFor="search-name">Index name</label>
-          <input type="text" id="search-name" value={this.props.searchIndexName} onChange={this.updateSearchIndexName} />
-        </div>
-
-        <GeneralComponents.CodeEditorPanel
-          id={'search-function'}
-          className="ace-editor-section"
-          ref={node => this.searchIndexEditor = node}
-          title={"Search index function"}
-          allowZenMode={false}
-          docLink={app.helpers.getDocUrl('SEARCH_INDEXES')}
-          defaultCode={this.props.searchIndexFunction}
-          blur={this.props.blur} />
-
-        <Analyzer ref={node => this.analyzer = node} {...this.props}/>
-
-        <div className="control-group">
-          <button id="save-index" className="btn btn-primary save" onClick={this.saveIndex}>
-            <i className="icon fonticon-ok-circled" />{btnLabel}
-          </button>
-          <a href={this.getCancelLink()} className="index-cancel-link">Cancel</a>
-        </div>
-      </form>
-    );
-  }
-}
diff --git a/app/addons/search/components/SearchIndexEditorContainer.js b/app/addons/search/components/SearchIndexEditorContainer.js
deleted file mode 100644
index ebbde2d..0000000
--- a/app/addons/search/components/SearchIndexEditorContainer.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import { connect } from 'react-redux';
-import SearchIndexEditor from './SearchIndexEditor';
-import Actions from '../actions';
-import { getSaveDesignDoc, getSelectedDesignDocPartitioned } from '../reducers';
-
-const mapStateToProps = ({ search, databases }, ownProps) => {
-  const isSelectedDDocPartitioned = getSelectedDesignDocPartitioned(search, databases.isDbPartitioned);
-  return {
-    isCreatingIndex: ownProps.isCreatingIndex,
-    isLoading: search.loading,
-    database: search.database,
-    designDocs: search.designDocs,
-    searchIndexFunction: search.searchIndexFunction,
-    ddocName: search.ddocName,
-    ddocPartitioned: isSelectedDDocPartitioned,
-    lastSavedDesignDocName: search.lastSavedDesignDocName,
-    lastSavedSearchIndexName: search.lastSavedSearchIndexName,
-    searchIndexName: search.searchIndexName,
-    analyzerType: search.analyzerType,
-    analyzerFields: search.analyzerFields,
-    analyzerFieldsObj: search.analyzerFieldsObj,
-    defaultMultipleAnalyzer: search.defaultMultipleAnalyzer,
-    singleAnalyzer: search.singleAnalyzer,
-    saveDoc: getSaveDesignDoc(search, databases.isDbPartitioned),
-    newDesignDocName: search.newDesignDocName,
-    newDesignDocPartitioned: search.newDesignDocPartitioned,
-    isDbPartitioned: databases.isDbPartitioned,
-    partitionKey: ownProps.partitionKey
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    setSearchIndexName: (name) => {
-      dispatch(Actions.setSearchIndexName(name));
-    },
-
-    saveSearchIndex: (doc, info, navigateToUrl) => {
-      Actions.saveSearchIndex(doc, info, navigateToUrl);
-    },
-
-    selectDesignDoc: (designDoc) => {
-      dispatch(Actions.selectDesignDoc(designDoc));
-    },
-
-    updateNewDesignDocName: (designDocName) => {
-      dispatch(Actions.updateNewDesignDocName(designDocName));
-    },
-    updateNewDesignDocPartitioned: (isPartitioned) => {
-      dispatch(Actions.updateNewDesignDocPartitioned(isPartitioned));
-    },
-    setAnalyzerType: (type) => {
-      dispatch(Actions.setAnalyzerType(type));
-    },
-    setSingleAnalyzer: (analyzer) => {
-      dispatch(Actions.setSingleAnalyzer(analyzer));
-    },
-    setDefaultMultipleAnalyzer: (analyzer) => {
-      dispatch(Actions.setDefaultMultipleAnalyzer(analyzer));
-    },
-    addAnalyzerRow: (analyzer) => {
-      dispatch(Actions.addAnalyzerRow(analyzer));
-    },
-    removeAnalyzerRow: (rowIndex) => {
-      dispatch(Actions.removeAnalyzerRow(rowIndex));
-    },
-    setAnalyzerRowFieldName: (params) => {
-      dispatch(Actions.setAnalyzerRowFieldName(params));
-    },
-    setAnalyzer: (params) => {
-      dispatch(Actions.setAnalyzer(params));
-    }
-
-  };
-};
-
-const SearchIndexEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SearchIndexEditor);
-
-export default SearchIndexEditorContainer;
diff --git a/app/addons/search/constants.js b/app/addons/search/constants.js
deleted file mode 100644
index 432e301..0000000
--- a/app/addons/search/constants.js
+++ /dev/null
@@ -1,76 +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.
-export default {
-  ANALYZER_SINGLE: 'single',
-  ANALYZER_MULTIPLE: 'multiple',
-  DEFAULT_SEARCH_INDEX_NAME: 'newSearch',
-  DEFAULT_ANALYZER_TYPE: 'single',
-  DEFAULT_ANALYZER: 'standard',
-  DEFAULT_SEARCH_INDEX_FUNCTION: 'function (doc) {\n  index("name", doc.name);\n}',
-  SEARCH_MANGO_INDEX_TEMPLATES: [{
-    label: 'Single field (json)',
-    code: {
-      "index": {
-        "fields": ["foo"]
-      },
-      "name": "foo-json-index",
-      "type": "json"
-    }
-  }, {
-    label: 'Multiple fields (json)',
-    code: {
-      "index": {
-        "fields": ["foo", "bar"]
-      },
-      "name": "foo-bar-json-index",
-      "type": "json"
-    }
-  },
-  {
-    label: 'Single field (text)',
-    code: {
-      "index": {
-        "fields": [
-          {
-            "name": "foo",
-            "type": "string"
-          }
-        ]
-      },
-      "name": "foo-text",
-      "type": "text"
-    }
-  },
-  {
-    label: 'All fields (text)',
-    code: {
-      "index": {
-        "default_field": {
-          "enabled": false
-        },
-        "index_array_lengths": false
-      },
-      "name": "all-text",
-      "type": "text"
-    }
-  },
-  {
-    label: 'All fields with default field (text)',
-    code: {
-      "index": {
-        "index_array_lengths": false
-      },
-      "name": "all-text",
-      "type": "text"
-    }
-  }]
-};
diff --git a/app/addons/search/layout.js b/app/addons/search/layout.js
deleted file mode 100644
index 607627a..0000000
--- a/app/addons/search/layout.js
+++ /dev/null
@@ -1,102 +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.
-import PropTypes from 'prop-types';
-import React from 'react';
-import {TabsSidebarHeader} from '../documents/layouts';
-import SidebarControllerContainer from '../documents/sidebar/SidebarControllerContainer';
-import SearchFormContainer from './components/SearchFormContainer';
-import SearchIndexEditorContainer from './components/SearchIndexEditorContainer';
-
-
-const getContent = (section, database, indexName,
-  ddocName, designDocs, ddoc, partitionKey) => {
-  if (section === 'create') {
-    return <SearchIndexEditorContainer
-      designDocs={designDocs}
-      ddoc={ddoc}
-      database={database}
-      isCreatingIndex={true}
-      partitionKey={partitionKey}
-    />;
-
-  } else if (section === 'edit') {
-    return <SearchIndexEditorContainer
-      database={database}
-      indexName={indexName}
-      ddocName={ddocName}
-      isCreatingIndex={false}
-      partitionKey={partitionKey}
-    />;
-  }
-
-  return <SearchFormContainer />;
-};
-
-export const SearchLayout = ({
-  section,
-  database,
-  indexName,
-  ddocName,
-  docURL, endpoint,
-  dropDownLinks,
-  designDocs,
-  ddoc,
-  selectedNavItem,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        hideQueryOptions={true}
-        docURL={docURL}
-        endpoint={endpoint}
-        dbName={database.id}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        showPartitionKeySelector={section === 'search'}
-        partitionKey={partitionKey}
-        onPartitionKeySelected={onPartitionKeySelected}
-        onGlobalModeSelected={onGlobalModeSelected}
-        globalMode={globalMode}
-      />
-      <div className="with-sidebar tabs-with-sidebar content-area">
-        <aside id="sidebar-content" className="scrollable">
-          <SidebarControllerContainer selectedNavItem={selectedNavItem} selectedPartitionKey={partitionKey}/>
-        </aside>
-        <section id="dashboard-content" className="flex-layout flex-col">
-          <div className="flex-body" id='dashboard-lower-content'>
-            <div className="search-index-content">
-              <div className="tab-content search-index-tab-content">
-                {getContent(section, database, indexName, ddocName, designDocs, ddoc, partitionKey)}
-              </div>
-            </div>
-          </div>
-        </section>
-      </div>
-    </div>
-  );
-};
-
-SearchLayout.propTypes = {
-  section: PropTypes.string.isRequired,
-  docURL: PropTypes.string,
-  endpoint: PropTypes.string,
-  ddocName: PropTypes.string,
-  indexName: PropTypes.string,
-  dropDownLinks: PropTypes.array.isRequired,
-  database: PropTypes.object.isRequired,
-};
-
-export default SearchLayout;
diff --git a/app/addons/search/reducers.js b/app/addons/search/reducers.js
deleted file mode 100644
index 8f97055..0000000
--- a/app/addons/search/reducers.js
+++ /dev/null
@@ -1,331 +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.
-import ActionTypes from './actiontypes';
-import Constants from './constants';
-import SearchResources from './resources';
-import DocumentsHelpers from '../documents/helpers';
-
-const initialState = {
-  designDocs: new Backbone.Collection(),
-  database: {},
-  loading: true,
-  ddocName: 'new-doc',
-  partitionKey: '',
-  indexName: '',
-  databaseName: '',
-  ...softReset()
-};
-
-var keys = [];
-function getUniqueKey() {
-  function keygen () {
-    return Math.random().toString(36).substring(7);
-  }
-
-  var newKey = keygen();
-  while (keys.includes(newKey)) {
-    newKey = keygen();
-  }
-  keys.push(newKey);
-  return newKey;
-}
-
-// called on first load (e.g. editing a search index) and every time the create search index page loads
-function softReset() {
-  return {
-    noResultsWarning: '',
-    hasActiveQuery: false,
-    searchQuery: '',
-    searchResults: undefined,
-    searchPerformed: false,
-    newDesignDocName: '',
-    newDesignDocPartitioned: true,
-    lastSavedSearchIndexName: '',
-    searchIndexFunction: Constants.DEFAULT_SEARCH_INDEX_FUNCTION,
-    searchIndexName: Constants.DEFAULT_SEARCH_INDEX_NAME,
-    analyzerType: Constants.DEFAULT_ANALYZER_TYPE,
-    analyzerFields: [],
-    singleAnalyzer: Constants.DEFAULT_ANALYZER,
-    defaultMultipleAnalyzer: Constants.DEFAULT_ANALYZER
-  };
-}
-
-function addAnalyzerRow (state, { analyzer, fieldName }) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  newAnalyzerFields.push({
-    key: getUniqueKey(),
-    fieldName: (fieldName) ? fieldName : '',
-    analyzer: analyzer,
-    valid: (fieldName && fieldName.trim().length > 0)
-  });
-  return newAnalyzerFields;
-}
-
-function removeAnalyzerRowByIndex (state, rowIndex) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  rowIndex = parseInt(rowIndex, 10);
-  newAnalyzerFields.splice(rowIndex, 1);
-  return newAnalyzerFields;
-}
-
-function setAnalyzerRowFieldName (state, { fieldName, rowIndex }) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  const idx = parseInt(rowIndex, 10);
-  newAnalyzerFields[idx].fieldName = fieldName;
-  newAnalyzerFields[idx].valid = fieldName !== '';
-  return newAnalyzerFields;
-}
-
-function setAnalyzerRow (state, { analyzer, rowIndex }) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  const idx = parseInt(rowIndex, 10);
-  newAnalyzerFields[idx].analyzer = analyzer;
-  return newAnalyzerFields;
-}
-
-function initEditSearch (state, { database, designDocs, ddocID, indexName }) {
-  const ddoc = designDocs.find(ddoc => {
-    return ddoc.id === ddocID;
-  }).dDocModel();
-
-  // the selected analyzer returned in the ddoc can be applied to both the single analyzer and the default multiple
-  // analyzer. We store them separately in the store so those values don't change when toggling from Single to Multiple
-  const analyzer = ddoc.getAnalyzer(indexName);
-  let newSingleAnalyzer;
-  if (_.isString(analyzer)) {
-    newSingleAnalyzer = analyzer;
-  } else {
-    if (_.has(analyzer, 'default')) {
-      newSingleAnalyzer = analyzer.default;
-    } else {
-      newSingleAnalyzer = Constants.DEFAULT_ANALYZER;
-    }
-  }
-  const newAnalyzerFields = [];
-  if (analyzer && analyzer.fields) {
-    Object.keys(analyzer.fields).forEach(fieldName => {
-      newAnalyzerFields.push({
-        key: getUniqueKey(),
-        fieldName: (fieldName) ? fieldName : '',
-        analyzer: analyzer.fields[fieldName],
-        valid: !_.isUndefined(fieldName) && !_.isEmpty(fieldName)
-      });
-    });
-  }
-
-  return {
-    loading: false,
-    searchPerformed: false,
-    database: database,
-    designDocs: designDocs,
-    searchIndexName: indexName,
-    ddocName: ddocID,
-    lastSavedSearchIndexName: indexName,
-    lastSavedDesignDocName: ddocID,
-    searchIndexFunction: ddoc.getIndex(indexName),
-    analyzerType: ddoc.analyzerType(indexName),
-    // this either returns a simple string (single) or a complex object (multiple)
-    singleAnalyzer: newSingleAnalyzer,
-    defaultMultipleAnalyzer: newSingleAnalyzer,
-    analyzerFields: newAnalyzerFields
-  };
-}
-
-export function getSaveDesignDoc (state, isDbPartitioned) {
-  if (state.ddocName === 'new-doc') {
-    const doc = {
-      _id: '_design/' + state.newDesignDocName,
-      views: {},
-      language: 'javascript'
-    };
-    const dDoc = new SearchResources.Doc(doc, { database: state.database });
-    if (isDbPartitioned) {
-      dDoc.setDDocPartitionedOption(state.newDesignDocPartitioned);
-    }
-    return dDoc;
-  }
-
-  const foundDoc = state.designDocs.find((ddoc) => {
-    return ddoc.id === state.ddocName ||
-      ddoc.id === '_design/' + state.ddocName;
-  });
-  return (!foundDoc) ? null : foundDoc.dDocModel();
-}
-
-export function getSelectedDesignDocPartitioned(state, isDbPartitioned) {
-  const designDoc = state.designDocs.find(ddoc => {
-    return ddoc.id === state.ddocName ||
-      ddoc.id === '_design/' + state.ddocName;
-  });
-  if (designDoc) {
-    return DocumentsHelpers.isDDocPartitioned(designDoc.get('doc'), isDbPartitioned);
-  }
-  return false;
-}
-
-export default function search(state = initialState, action) {
-  const options = action.options;
-  switch (action.type) {
-
-    case ActionTypes.SEARCH_INDEX_SET_LOADING:
-      return {
-        ...state,
-        loading: options.loading
-      };
-
-    case ActionTypes.SEARCH_INDEX_DESIGN_DOCS_LOADED:
-      const newState = {
-        ...state,
-        loading: false,
-        designDocs: options.designDocs,
-        database: options.database,
-        ...softReset()
-      };
-      if (options.defaultDDoc) {
-        newState.ddocName = '_design/' + options.defaultDDoc;
-      }
-      return newState;
-
-    case ActionTypes.SEARCH_INDEX_SET_NAME:
-      return {
-        ...state,
-        searchIndexName: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_ANALYZER_TYPE:
-      return {
-        ...state,
-        analyzerType: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_SINGLE_ANALYZER:
-      return {
-        ...state,
-        singleAnalyzer: options.analyzer
-      };
-
-    case ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW:
-      return {
-        ...state,
-        analyzerFields: addAnalyzerRow(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_MADE:
-      return {
-        ...state,
-        hasActiveQuery: true
-      };
-
-    case ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_ERROR:
-      return {
-        ...state,
-        hasActiveQuery: false,
-        searchResults: []
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_SEARCH_QUERY:
-      return {
-        ...state,
-        searchQuery: options.query
-      };
-
-    case ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED:
-      return {
-        ...state,
-        searchResults: options.searchResults,
-        hasActiveQuery: false,
-        searchPerformed: true
-      };
-
-    case ActionTypes.SEARCH_INDEX_REMOVE_ANALYZER_ROW:
-      return {
-        ...state,
-        analyzerFields: removeAnalyzerRowByIndex(state, options.rowIndex)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME:
-      return {
-        ...state,
-        analyzerFields: setAnalyzerRowFieldName(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW:
-      return {
-        ...state,
-        analyzerFields: setAnalyzerRow(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER:
-      return {
-        ...state,
-        defaultMultipleAnalyzer: options.analyzer
-      };
-
-    case ActionTypes.SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX:
-      return {
-        ...state,
-        ...initEditSearch(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SELECT_DESIGN_DOC:
-      return {
-        ...state,
-        ddocName: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_CLEAR:
-      return {
-        ...initialState,
-        designDocs: new Backbone.Collection()
-      };
-
-    case ActionTypes.SEARCH_INDEX_INIT:
-      return {
-        ...state,
-        loading: false,
-        databaseName: options.databaseName,
-        partitionKey: options.partitionKey,
-        ddocName: options.ddocName,
-        indexName: options.indexName,
-        searchQuery: options.searchQuery,
-        searchResults: options.searchQuery === '' ? undefined : state.searchResults,
-        noResultsWarning: ''
-      };
-
-    case ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED:
-      return {
-        ...state,
-        newDesignDocName: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED:
-      return {
-        ...state,
-        newDesignDocPartitioned: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED:
-      return {
-        ...state,
-        noResultsWarning: 'The selected index does not support partitions. Switch back to global mode.'
-      };
-
-    case ActionTypes.SEARCH_INDEX_PARTITION_PARAM_MANDATORY:
-      return {
-        ...state,
-        noResultsWarning: 'The selected index requires a partition key. Use the selector at the top to enter a partition key.'
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/search/resources.js b/app/addons/search/resources.js
deleted file mode 100644
index 9862317..0000000
--- a/app/addons/search/resources.js
+++ /dev/null
@@ -1,72 +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.
-import Constants from './constants';
-import Documents from '../documents/resources';
-
-var Search = {};
-
-Search.Doc = Documents.Doc.extend({
-  setIndex: function (name, index, analyzer) {
-    if (!this.isDdoc()) {
-      return false;
-    }
-
-    var indexes = this.get('indexes');
-    if (!indexes) {
-      indexes = {};
-    }
-    if (!indexes[name]) {
-      indexes[name] = {};
-    }
-
-    if (analyzer) {
-      indexes[name].analyzer = analyzer;
-    }
-
-    indexes[name].index = index;
-    return this.set({indexes: indexes});
-  },
-
-  getIndex: function (indexName) {
-    return this.get('indexes')[indexName].index;
-  },
-
-  getAnalyzer: function (indexName) {
-    return this.get('indexes')[indexName].analyzer;
-  },
-
-  analyzerType: function (indexName) {
-    if (typeof this.getAnalyzer(indexName) === 'object') {
-      return Constants.ANALYZER_MULTIPLE;
-    }
-    return Constants.ANALYZER_SINGLE;
-  },
-
-  dDocModel: function () {
-    if (!this.isDdoc()) {
-      return false;
-    }
-
-    var doc = this.get('doc');
-    if (doc) {
-      return new Search.Doc(doc, { database: this.database });
-    }
-    return false;
-  }
-});
-
-Search.AllDocs = Documents.AllDocs.extend({
-  model: Search.Doc
-});
-
-
-export default Search;
diff --git a/app/addons/search/routes.js b/app/addons/search/routes.js
deleted file mode 100644
index a578067..0000000
--- a/app/addons/search/routes.js
+++ /dev/null
@@ -1,201 +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.
-import FauxtonAPI from '../../core/api';
-import Resources from './resources';
-import SearchActions from './actions';
-import DatabasesActions from '../databases/actions';
-import Databases from '../databases/base';
-import BaseRoute from '../documents/shared-routes';
-import SidebarActions from '../documents/sidebar/actions';
-import Actions from './actions';
-import Layout from './layout';
-import React from 'react';
-import {SidebarItemSelection} from '../documents/sidebar/helpers';
-
-var SearchRouteObject = BaseRoute.extend({
-  routes: {
-    'database/:database/_design/:ddoc/_search/:search(?*searchQuery)': {
-      route: 'searchNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_search/:search(?*searchQuery)': {
-      route: 'search',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_indexes/:search(?*searchQuery)': {
-      route: 'searchNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_indexes/:search(?*searchQuery)': {
-      route: 'search',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_search/:search/edit': {
-      route: 'editNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_search/:search/edit': {
-      route: 'edit',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/new_search': 'createNoPartition',
-    'database/:database/_partition/:partitionkey/new_search': 'create',
-    'database/:database/new_search/:designDoc': 'createNoPartition',
-    'database/:database/_partition/:partitionkey/new_search/:designDoc': 'create'
-  },
-
-  initialize: function (route, options) {
-    this.databaseName = options[0];
-    this.database = new Databases.Model({ id: this.databaseName });
-    this.data = {
-      database: new Databases.Model({ id: this.databaseName })
-    };
-
-    this.data.designDocs = new Resources.AllDocs(null, {
-      database: this.data.database,
-      params: {
-        startkey: '"_design"',
-        endkey: '"_design1"',
-        include_docs: true
-      }
-    });
-
-    SidebarActions.dispatchNewOptions({
-      database: this.data.database,
-      designDocs: this.data.designDocs
-    });
-  },
-
-  searchNoPartition: function (databaseName, ddocName, indexName, query) {
-    return this.search(databaseName, '', ddocName, indexName, query);
-  },
-
-  search: function (databaseName, partitionKey, ddocName, indexName, query) {
-    this.databaseName = databaseName;
-    this.ddocName     = ddocName;
-    this.indexName    = indexName;
-
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddocName,
-      designDocSection: 'Search Indexes',
-      indexName: indexName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    const dropDownLinks = this.getCrumbs(this.database);
-    Actions.dispatchInitSearchIndex({
-      databaseName: databaseName,
-      partitionKey: partitionKey,
-      designDoc: ddocName,
-      indexName: indexName,
-      query: query
-    });
-    DatabasesActions.fetchSelectedDatabaseInfo(databaseName);
-
-    const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const endpointUrl = FauxtonAPI.urls('search', 'apiurl', this.databaseName, encodedPartKey, this.ddocName,
-      this.indexName, (query ? query : '*:*'));
-
-    const encodedQuery = query ? `?${encodeURIComponent(query)}` : '';
-    const navigateToPartitionedView = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('partitioned_search', 'app', encodeURIComponent(databaseName),
-        encodeURIComponent(partKey), encodeURIComponent(ddocName));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(indexName) + encodedQuery);
-    };
-    const navigateToGlobalView = () => {
-      const baseUrl = FauxtonAPI.urls('search', 'app', encodeURIComponent(databaseName), encodeURIComponent(ddocName));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(indexName) + encodedQuery);
-    };
-    return <Layout
-      section={'search'}
-      dropDownLinks={dropDownLinks}
-      endpoint={endpointUrl}
-      docURL={FauxtonAPI.constants.DOC_URLS.SEARCH_INDEXES}
-      database={this.database}
-      indexName={indexName}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedView}
-      onGlobalModeSelected={navigateToGlobalView}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  editNoPartition: function (database, ddocName, indexName) {
-    return this.edit(database, '', ddocName, indexName);
-  },
-
-  edit: function (database, partitionKey, ddocName, indexName) {
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddocName,
-      designDocSection: 'Search Indexes',
-      indexName: indexName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    SearchActions.dispatchEditSearchIndex({
-      ddocID: '_design/' + ddocName,
-      database: this.database,
-      indexName: indexName,
-      designDocs: this.data.designDocs
-    });
-    DatabasesActions.fetchSelectedDatabaseInfo(database);
-
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <Layout
-      section={'edit'}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      indexName={indexName}
-      ddocName={ddocName}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  createNoPartition: function (database, ddoc) {
-    return this.create(database, '', ddoc);
-  },
-
-  create: function (database, partitionKey, ddoc) {
-    const selectedNavItem = new SidebarItemSelection('');
-
-    SearchActions.dispatchInitNewSearchIndex({
-      database: this.database,
-      designDocs: this.data.designDocs,
-      defaultDDoc: ddoc,
-    });
-    DatabasesActions.fetchSelectedDatabaseInfo(database);
-
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <Layout
-      section={'create'}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      designDocs={this.data.designDocs}
-      ddoc={ddoc}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  getCrumbs: function (database) {
-    return [
-      { type: "back", link: "/_all_dbs"},
-      { name: database.id }
-    ];
-  }
-});
-
-Resources.RouteObjects = [SearchRouteObject];
-
-export default Resources;
diff --git a/app/addons/search/tests/nightwatch/cloneSearchIndex.js b/app/addons/search/tests/nightwatch/cloneSearchIndex.js
deleted file mode 100644
index afb5468..0000000
--- a/app/addons/search/tests/nightwatch/cloneSearchIndex.js
+++ /dev/null
@@ -1,46 +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.
-
-module.exports = {
-  '@tags': ['search'],
-  'Clones a search index': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // create a search index
-      .waitForElementPresent('#new-design-docs-button', waitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test1')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test1-index')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', waitTime, false)
-
-      .clickWhenVisible('.index-list li span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-files-o', waitTime, true)
-      .waitForElementVisible('#new-index-name', waitTime, true)
-      .setValue('#new-index-name', 'cloned-search-index')
-      .clickWhenVisible('.clone-index-modal .btn-primary', waitTime, true)
-
-      // now wait for the sidebar to be updated with the new view
-      .waitForElementVisible('#test1_cloned-search-index', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/search/tests/nightwatch/createNewSearch.js b/app/addons/search/tests/nightwatch/createNewSearch.js
deleted file mode 100644
index 3bbec97..0000000
--- a/app/addons/search/tests/nightwatch/createNewSearch.js
+++ /dev/null
@@ -1,128 +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.
-module.exports = {
-  '@tags': ['search'],
-  'Creates new Search index for Dash': function (client) {
-    /*jshint multistr: true */
-
-    var newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var searchFunctionString = function (append) {
-      return 'function (doc) {'                  +
-        'index("name", doc.name ' + append + ');' +
-        '}';
-    };
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('.faux-header__doc-header-title', client.globals.maxWaitTime, true)
-
-      .clickWhenVisible('.styled-select select')
-      .keys(['_design/keyview', '\uE006'])
-
-      .clearValue('#search-name')
-      .setValue('#search-name', 'fancy_search')
-      .execute('\
-        var editor = ace.edit("search-function");\
-        editor.getSession().setValue("' + searchFunctionString(0) + '");\
-      ')
-
-      .clickWhenVisible('#save-index')
-      .waitForElementPresent('#keyview_fancy_search', client.globals.maxWaitTime, false)
-      .end();
-  },
-
-  'Creating a new index has a clean slate': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // 1. create a search index in _design/keyview design doc
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .clickWhenVisible('.styled-select select')
-      .keys(['_design/keyview', '\uE006'])
-
-      .clearValue('#search-name')
-      .setValue('#search-name', 'clean-slate-test')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', client.globals.maxWaitTime, false)
-
-      // 2. create a new search index. The "Save to design doc" dropdown should default to New Document
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('.styled-select select', client.globals.maxWaitTime, false)
-      .assert.value('.styled-select select', 'new-doc')
-      .end();
-  },
-
-  'Adding two indexes in a row does not add multiple indexes': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // 1. create a search index in _design/test1
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', client.globals.maxWaitTime, false)
-      .setValue('#new-ddoc', 'test1')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test1-index')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', client.globals.maxWaitTime, false)
-
-      // 2. create a second index in _design/test2
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', client.globals.maxWaitTime, false)
-      .setValue('#new-ddoc', 'test2')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test2-index')
-      .clickWhenVisible('#save-index')
-
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-
-      // 3. confirm that the nav bar shows ONLY one search index each:
-      //  _design/test1 has the single _design/test1-index
-      //  _design/test2 has the single _design/test2-index
-      .waitForElementPresent('#test1_test1-index', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('#test1_test2-index', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('#test2_test1-index', client.globals.maxWaitTime, false)
-      .waitForElementPresent('#test2_test2-index', client.globals.maxWaitTime, false)
-
-      .end();
-  }
-};
diff --git a/app/addons/search/tests/nightwatch/deleteSearchIndex.js b/app/addons/search/tests/nightwatch/deleteSearchIndex.js
deleted file mode 100644
index f25d583..0000000
--- a/app/addons/search/tests/nightwatch/deleteSearchIndex.js
+++ /dev/null
@@ -1,86 +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.
-
-module.exports = {
-  '@tags': ['search'],
-  'Deletes a search index': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // create a search index
-      .waitForElementPresent('#new-design-docs-button', waitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test1')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test1-index')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', waitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // confirm search index appears in sidebar
-      .waitForElementVisible('#test1_test1-index', waitTime, true)
-
-      // now delete it and confirm that the entire design doc gets removed (because it's the last index)
-      .clickWhenVisible('.index-list li span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-trash', waitTime, true)
-      .clickWhenVisible('.confirmation-modal button.btn.btn-primary')
-
-      // now wait for the sidebar to have removed the design doc
-      .waitForElementNotPresent('#testdesigndoc', waitTime, true)
-      .end();
-  },
-
-  'Deleting view when design doc has search index does not remove design doc': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      // this creates a view
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // now create a search index
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/new_search/testdesigndoc')
-      .waitForElementVisible('#save-index', waitTime, false)
-      .clearValue('#search-name')
-      .setValue('#search-name', 'search-index1')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', waitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // now delete the search index. Since there's a view in this design doc, the design doc should not be removed
-      .clickWhenVisible('#nav-design-function-testdesigndocindexes .index-list li span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-trash', waitTime, true)
-      .waitForElementVisible('div.confirmation-modal', waitTime, false)
-      .clickWhenVisible('.confirmation-modal button.btn.btn-primary')
-      .waitForElementNotPresent('.confirmation-modal button.btn.btn-primary', waitTime, true)
-
-      // just assert the search indexes section has been removed, but the design doc still exists
-      .waitForElementNotPresent('#nav-design-function-testdesigndocindexes', waitTime, true)
-      .waitForElementPresent('#design-doc-menu-testdesigndoc', waitTime, true)
-
-      .end();
-  }
-
-};
diff --git a/app/addons/search/tests/nightwatch/searchPageApiBar.js b/app/addons/search/tests/nightwatch/searchPageApiBar.js
deleted file mode 100644
index d23ed8c..0000000
--- a/app/addons/search/tests/nightwatch/searchPageApiBar.js
+++ /dev/null
@@ -1,56 +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.
-module.exports = {
-  '@tags': ['search'],
-  'Check API Bar is present/hidden on appropriate page and is encoded': function (client) {
-    const newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url;
-
-    const searchStr = "class:bird";
-    const searchStrEncoded = encodeURIComponent(searchStr);
-    const fullURL = baseUrl + '/' + newDatabaseName + '/_design/keyview/_search/api-bar-test?q=' + searchStrEncoded;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // start creating a search index in _design/keyview design doc
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .clickWhenVisible('.styled-select select')
-
-      // confirm there's no API URL field on the create index page
-      .pause(5000)
-      .assert.not.elementPresent('.faux__jsonlink')
-
-      // now create the rest of the index
-      .keys(['_design/keyview', '\uE006'])
-      .clearValue('#search-name')
-      .setValue('#search-name', 'api-bar-test')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-
-      // confirm the API URL field now shows up (we're on the edit search index page now)
-      .assert.elementPresent('.faux__jsonlink')
-
-      // now enter a search and confirm it's properly encoded in the api URL bar
-      .setValue('#search-index-preview-form input', searchStr)
-      .clickWhenVisible('#search-index-preview-form button')
-
-      .waitForElementNotVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', client.globals.maxWaitTime, false)
-      .assert.attributeContains('.faux__jsonlink-link', 'href', fullURL)
-      .end();
-  }
-};
diff --git a/app/addons/setup/__tests__/helpers.test.js b/app/addons/setup/__tests__/helpers.test.js
deleted file mode 100644
index 30b8bdb..0000000
--- a/app/addons/setup/__tests__/helpers.test.js
+++ /dev/null
@@ -1,70 +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.
-
-import {isInvalid} from '../helpers';
-
-describe('Setup - Helpers', () => {
-
-  const validData = {
-    username: 'foo',
-    password: 'bar',
-    bind_address: '0.0.0.0',
-    singlenode: false,
-    port: 5984,
-    nodeCount: 3
-  };
-
-  describe('isInvalid', () => {
-
-    it('should return an error if no username is define', () => {
-      let data = Object.assign({}, validData);
-      data.username = '';
-      expect(isInvalid(data)).toBe('Admin name is required');
-    });
-
-    it('should return an error if password not set', () => {
-      let data = Object.assign({}, validData);
-      data.password = '';
-      expect(isInvalid(data)).toBe('Admin password is required');
-    });
-
-    it('should return an error if bind address is 127.0.0.1', () => {
-      let data = Object.assign({}, validData);
-      data.bind_address = '127.0.0.1';
-      expect(isInvalid(data)).toBe('Bind address can not be 127.0.0.1');
-    });
-
-    it('should return error if port is not a number', () => {
-      let data = Object.assign({}, validData);
-      data.port = 'foo';
-      expect(isInvalid(data)).toBe('Bind port must be a number');
-    });
-
-    it('should return error if node count is not a number', () => {
-
-      let data = Object.assign({}, validData);
-      data.nodeCount = 'foo';
-      expect(isInvalid(data)).toBe('Node count must be a number');
-    });
-
-    it('should return error if node counter is lower than 1', () => {
-      let data = Object.assign({}, validData);
-      data.nodeCount = 0;
-      expect(isInvalid(data)).toBe('Node count must be >= 1');
-    });
-
-    it('should return false if valid', () => {
-      expect(isInvalid(validData)).toBe(false);
-    });
-
-  });
-});
diff --git a/app/addons/setup/actions.js b/app/addons/setup/actions.js
deleted file mode 100644
index 6a05b5d..0000000
--- a/app/addons/setup/actions.js
+++ /dev/null
@@ -1,309 +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.
-import FauxtonAPI from "../../core/api";
-import {isInvalid} from "./helpers";
-import {
-  SETUP_ADD_NODE_TO_LIST,
-  SETUP_BIND_ADDRESS_ADDITIONAL_NODE,
-  SETUP_BIND_ADDRESS_FOR_SINGLE_NODE,
-  SETUP_NODE_COUNT,
-  SETUP_PORT_ADDITIONAL_NODE,
-  SETUP_PORT_FOR_SINGLE_NODE,
-  SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE,
-  SETUP_RESET_ADDITIONAL_NODE,
-  SETUP_SET_CLUSTERSTATUS,
-  SETUP_SET_PASSWORD,
-  SETUP_SET_USERNAME
-} from "./actiontypes";
-import {get, post} from '../../core/ajax';
-import Api from "../auth/api";
-
-
-/**
- * @typedef {Object} CredentialObject
- * @param {string} username The username
- * @param {string} password The password
- */
-
-
-/**
- * Public functions
- */
-
-const showError = (msg, error) => {
-  const errorMsg = error ? ' Error:' + error : '';
-  FauxtonAPI.addNotification({
-    msg: msg + errorMsg,
-    type: 'error',
-    fade: false,
-    clear: true
-  });
-  return;
-};
-
-
-export const getClusterStateFromCouch = () => async dispatch => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const json = await get(baseUrl);
-  dispatch({
-    type: SETUP_SET_CLUSTERSTATUS,
-    options: {
-      state: json.state
-    }
-  });
-};
-
-export const finishClusterSetup = message => async() => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const body = {action: 'finish_cluster'};
-  try {
-    const response = await post(baseUrl, body, {raw: true});
-    if (response.ok) {
-      FauxtonAPI.addNotification({
-        msg: message,
-        type: 'success',
-        fade: false,
-        clear: true
-      });
-      FauxtonAPI.navigate('#setup/finish');
-    } else {
-      const json = await response.json();
-      showError('The cluster is already finished', json.reason);
-    }
-  } catch (err) {
-    showError('There was an error. Please check your setup and try again.', err);
-  }
-};
-
-export const setupSingleNode = (credentials, setupNode) => async() => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const setupAttrs = {
-    action: 'enable_single_node',
-    username: credentials.username,
-    password: credentials.password,
-    bind_address: setupNode.bindAddress,
-    port: setupNode.port,
-    singlenode: true
-  };
-
-  const attrsAreInvalid = isInvalid(setupAttrs);
-
-  if (attrsAreInvalid) {
-    return showError(attrsAreInvalid);
-  }
-
-  try {
-    const response = await post(baseUrl, setupAttrs, {raw: true});
-    if (!response.ok) {
-      const json = await response.json();
-      const error = json.reason ? json.reason : json.error;
-      return showError(error);
-    }
-
-    await Api.login({name: credentials.username, password: credentials.password});
-    FauxtonAPI.addNotification({
-      msg: 'Single node setup successful.',
-      type: 'success',
-      fade: false,
-      clear: true
-    });
-    FauxtonAPI.navigate('#setup/finish');
-  } catch (error) {
-    showError("The cluster has not been setuped successfully.", error);
-  }
-};
-
-/**
- * Add a node to the current cluster configuration
- * 1. Enable cluster for the current node
- * 2. Enable cluster for the remote node
- * 3. Add the remote node
- * @param isOrWasAdminParty
- * @param credentials
- * @param setupNode
- * @param additionalNode
- */
-export const addNode = (isOrWasAdminParty, credentials, setupNode, additionalNode) => async dispatch => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const enableSetupData = {
-    action: 'enable_cluster',
-    username: credentials.username,
-    password: credentials.password,
-    bind_address: setupNode.bindAddress,
-    port: setupNode.port,
-    node_count: setupNode.nodeCount,
-    singlenode: false
-  };
-
-  const attrsAreInvalid = isInvalid({
-    username: credentials.username,
-    password: credentials.password,
-    ...setupNode
-  });
-
-  if (attrsAreInvalid) {
-    return showError(attrsAreInvalid);
-  }
-
-  let enableNodeData = {
-    action: 'enable_cluster',
-    username: credentials.username,
-    password: credentials.password,
-    bind_address: additionalNode.bindAddress,
-    port: additionalNode.port,
-    node_count: setupNode.nodeCount,
-    remote_node: additionalNode.remoteAddress,
-    remote_current_user: credentials.username,
-    remote_current_password: credentials.password
-  };
-
-  if (isOrWasAdminParty) {
-    delete enableNodeData.remote_current_user;
-    delete enableNodeData.remote_current_password;
-  }
-
-  const additionalNodeDataIsInvalid = isInvalid(enableNodeData);
-
-  if (additionalNodeDataIsInvalid) {
-    return showError(additionalNodeDataIsInvalid);
-  }
-
-  const continueSetup = async() => {
-    const addNodeData = {
-      action: 'add_node',
-      username: credentials.username,
-      password: credentials.password,
-      host: additionalNode.remoteAddress,
-      port: additionalNode.port,
-      singlenode: false
-    };
-
-    //Enable the remote node
-    const enableRemoteNodeResponse = await post(baseUrl, enableNodeData, {raw: true});
-
-    if (!enableRemoteNodeResponse.ok) {
-      const json = await enableRemoteNodeResponse.json();
-      const error = json.reason ? json.reason : json.error;
-      return showError(error);
-    }
-    const addNodeResponse = await post(baseUrl, addNodeData, {raw: true});
-
-    if (!addNodeResponse.ok) {
-      const json = await addNodeResponse.json();
-      const error = json.reason ? json.reason : json.error;
-      return showError(error);
-    }
-
-    dispatch({
-      type: SETUP_ADD_NODE_TO_LIST,
-      options: {
-        value: {
-          port: additionalNode.port,
-          remoteAddress: additionalNode.remoteAddress
-        }
-      }
-    });
-    FauxtonAPI.addNotification({
-      msg: 'Added node',
-      type: 'success',
-      fade: false,
-      clear: true
-    });
-  };
-  try {
-    await post(baseUrl, enableSetupData, {raw: true});
-    await Api.login({name: credentials.username, password: credentials.password});
-    await continueSetup();
-  } catch (err) {
-    showError('An error occured while adding the node.', err);
-  }
-};
-
-export const resetAddtionalNodeForm = () => {
-  return {
-    type: SETUP_RESET_ADDITIONAL_NODE,
-  };
-};
-
-export const alterPortAdditionalNode = value => {
-  return {
-    type: SETUP_PORT_ADDITIONAL_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const alterRemoteAddressAdditionalNode = value => {
-  return {
-    type: SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const alterBindAddressAdditionalNode = value => {
-  return {
-    type: SETUP_BIND_ADDRESS_ADDITIONAL_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setUsername = value => {
-  return {
-    type: SETUP_SET_USERNAME,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setPassword = value => {
-  return {
-    type: SETUP_SET_PASSWORD,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setPortForSetupNode = value => {
-  return {
-    type: SETUP_PORT_FOR_SINGLE_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setBindAddressForSetupNode = value => {
-  return {
-    type: SETUP_BIND_ADDRESS_FOR_SINGLE_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setNodeCount = value => {
-  return {
-    type: SETUP_NODE_COUNT,
-    options: {
-      value: value
-    }
-  };
-};
-
-
diff --git a/app/addons/setup/actiontypes.js b/app/addons/setup/actiontypes.js
deleted file mode 100644
index cf94fd9..0000000
--- a/app/addons/setup/actiontypes.js
+++ /dev/null
@@ -1,23 +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.
-
-export const SETUP_SET_CLUSTERSTATUS = 'SETUP_SET_CLUSTERSTATUS';
-export const SETUP_SET_USERNAME = 'SETUP_SET_USERNAME';
-export const SETUP_SET_PASSWORD = 'SETUP_SET_PASSWORD';
-export const SETUP_BIND_ADDRESS_FOR_SINGLE_NODE = 'SETUP_BIND_ADDRESS_FOR_SINGLE_NODE';
-export const SETUP_PORT_FOR_SINGLE_NODE = 'SETUP_PORT_FOR_SINGLE_NODE';
-export const SETUP_PORT_ADDITIONAL_NODE = 'SETUP_PORT_ADDITIONAL_NODE';
-export const SETUP_BIND_ADDRESS_ADDITIONAL_NODE = 'SETUP_BIND_ADDRESS_ADDITIONAL_NODE';
-export const SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE = 'SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE';
-export const SETUP_RESET_ADDITIONAL_NODE = 'SETUP_RESET_ADDITIONAL_NODE';
-export const SETUP_ADD_NODE_TO_LIST = 'SETUP_ADD_NODE_TO_LIST';
-export const SETUP_NODE_COUNT = 'SETUP_NODE_COUNT';
diff --git a/app/addons/setup/assets/less/setup.less b/app/addons/setup/assets/less/setup.less
deleted file mode 100644
index 421805c..0000000
--- a/app/addons/setup/assets/less/setup.less
+++ /dev/null
@@ -1,62 +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.
-
-.setup-screen {
-  padding: 20px;
-  button {
-    margin-top: 20px;
-  }
-  #setup-btn-no-thanks {
-    margin-left: 30px;
-  }
-}
-
-.setup-nodes {
-  input {
-    margin-right: 15px;
-  }
-
-  h2 {
-    font-size: 16px;
-    line-height: normal;
-    margin: 10px 0;
-  }
-
-  .node-item {
-    width: 400px;
-    a {
-      margin-left: 10px;
-    }
-  }
-
-  .input-remote-node {
-    width: 50%;
-  }
-
-  .centered {
-    text-align: center;
-  }
-
-  .setup-finish,
-  .setup-nodelist,
-  .setup-opt-settings,
-  .setup-creds,
-  .setup-port,
-  .setup-add-button {
-    margin-top: 30px;
-  }
-
-  .setup-finish {
-    padding-bottom: 40px;
-  }
-
-}
diff --git a/app/addons/setup/base.js b/app/addons/setup/base.js
deleted file mode 100644
index a457c3f..0000000
--- a/app/addons/setup/base.js
+++ /dev/null
@@ -1,36 +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.
-
-import FauxtonAPI from "../../core/api";
-import app from '../../app';
-import Setup from "./route";
-import reducers from './reducers';
-import "./assets/less/setup.less";
-Setup.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    title: 'Setup',
-    href: "#/setup",
-    icon: 'fonticon-wrench'
-  });
-};
-
-FauxtonAPI.addReducers({
-  setup: reducers
-});
-
-FauxtonAPI.registerUrls('cluster_setup', {
-  server: () => app.host + '/_cluster_setup',
-  app: () => '/_cluster_setup',
-  apiurl: () => window.location.origin + "/_cluster_setup"
-});
-
-export default Setup;
diff --git a/app/addons/setup/components/ConfiguredScreen.js b/app/addons/setup/components/ConfiguredScreen.js
deleted file mode 100644
index 0e7700b..0000000
--- a/app/addons/setup/components/ConfiguredScreen.js
+++ /dev/null
@@ -1,46 +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.
-
-import React from 'react';
-import PropTypes from 'prop-types';
-import app from "../../../app";
-
-
-export default class ClusterConfiguredScreen extends React.Component {
-  getNodeType = () => {
-    const {clusterState} = this.props;
-    if (clusterState === 'cluster_finished') {
-      return 'clustered';
-    } else if (clusterState === 'single_node_enabled') {
-      return 'single';
-    }
-    return 'unknown state';
-
-  };
-
-  render() {
-    const nodetype = this.getNodeType();
-
-    return (
-      <div className="setup-screen">
-        {app.i18n.en_US['couchdb-productname']} is configured for production usage as a {nodetype} node!
-        <br/>
-        <br/>
-          Do you want to <a href="#replication">replicate data</a>?
-      </div>
-    );
-  }
-}
-
-ClusterConfiguredScreen.propTypes = {
-  clusterState: PropTypes.string
-};
diff --git a/app/addons/setup/components/CurrentAdminPassword.js b/app/addons/setup/components/CurrentAdminPassword.js
deleted file mode 100644
index 2860013..0000000
--- a/app/addons/setup/components/CurrentAdminPassword.js
+++ /dev/null
@@ -1,54 +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.
-
-
-import React from 'react';
-import PropTypes from 'prop-types';
-
-
-export default class SetupCurrentAdminPassword extends React.Component {
-  render() {
-    let text = 'Specify your Admin credentials';
-
-    if (this.props.isAdminParty) {
-      text = 'Create Admin credentials.';
-    }
-
-    return (
-      <div className="setup-creds">
-        <div>
-          <p>{text}</p>
-        </div>
-        <input
-          className="setup-username"
-          onChange={this.props.onAlterUsername}
-          placeholder="Username"
-          value={this.props.username}
-          type="text"/>
-        <input
-          className="setup-password"
-          onChange={this.props.onAlterPassword}
-          placeholder="Password"
-          value={this.props.password}
-          type="password"/>
-      </div>
-    );
-  }
-}
-
-SetupCurrentAdminPassword.propTypes = {
-  onAlterUsername: PropTypes.func.isRequired,
-  onAlterPassword: PropTypes.func.isRequired,
-  username: PropTypes.string.isRequired,
-  password: PropTypes.string.isRequired,
-  isAdminParty: PropTypes.bool
-};
diff --git a/app/addons/setup/components/FirstStepController.js b/app/addons/setup/components/FirstStepController.js
deleted file mode 100644
index 279f382..0000000
--- a/app/addons/setup/components/FirstStepController.js
+++ /dev/null
@@ -1,71 +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.
-import React from 'react';
-import app from "../../../app";
-import PropTypes from 'prop-types';
-import FauxtonAPI from "../../../core/api";
-import ClusterConfiguredScreen from "./ConfiguredScreen";
-import ReactComponents from "../../components/react-components";
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class FirstStepController extends React.Component {
-
-  UNSAFE_componentWillMount() {
-    this.props.getClusterState();
-  }
-
-  render() {
-    if (this.props.clusterState === 'cluster_finished' ||
-        this.props.clusterState === 'single_node_enabled') {
-      return (<ClusterConfiguredScreen {...this.props}/>);
-    }
-
-    return (
-      <div className="setup-screen">
-        <h2>Welcome to {app.i18n.en_US['couchdb-productname']}!</h2>
-        <p>
-            This wizard should be run directly on the node, rather than through a load-balancer.
-        </p>
-        <p>
-            You can configure a single node, or a multi-node CouchDB installation.
-        </p>
-        <div>
-          <ConfirmButton
-            onClick={this.redirectToMultiNodeSetup}
-            showIcon={false}
-            text="Configure a Cluster"/>
-          <ConfirmButton
-            onClick={this.redirectToSingleNodeSetup}
-            showIcon={false}
-            id="setup-btn-no-thanks"
-            text="Configure a Single Node"/>
-        </div>
-      </div>
-    );
-  }
-
-  redirectToSingleNodeSetup = (e) => {
-    e.preventDefault();
-    FauxtonAPI.navigate('#setup/singlenode');
-  };
-
-  redirectToMultiNodeSetup = (e) => {
-    e.preventDefault();
-    FauxtonAPI.navigate('#setup/multinode');
-  };
-
-}
-
-FirstStepController.propTypes = {
-  clusterState: PropTypes.string
-};
diff --git a/app/addons/setup/components/MultipleNodeController.js b/app/addons/setup/components/MultipleNodeController.js
deleted file mode 100644
index 17482f9..0000000
--- a/app/addons/setup/components/MultipleNodeController.js
+++ /dev/null
@@ -1,157 +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.
-import React from 'react';
-import PropTypes from 'prop-types';
-import ReactComponents from "../../components/react-components";
-import CurrentAdminPassword from "./CurrentAdminPassword";
-import OptionalSettings from "./OptionalSettings";
-import NodeCountSetting from "./NodeCountSetting";
-
-import {getIsAdminParty} from '../reducers';
-
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class MultipleNodesController extends React.Component {
-
-  componentDidMount() {
-    this.isAdminParty = getIsAdminParty();
-  }
-
-  getNodeList = () => {
-    return this.props.nodeList.map((el, i) => {
-      return (
-        <div key={i} className="node-item">
-          {el.remoteAddress}:{el.port}
-        </div>
-      );
-    });
-  };
-
-  _addNode = () => {
-    const {username, password, setupNode, additionalNode} = this.props;
-    this.props.addNode(this.isAdminParty, {username, password}, setupNode, additionalNode);
-  };
-
-  _alterPortAdditionalNode = (e) => {
-    this.props.alterPortAdditionalNode(e.target.value);
-  };
-
-  _alterBindAddressAdditionalNode = (e) => {
-    this.props.alterBindAddressAdditionalNode(e.target.value);
-  };
-
-  _alterRemoteAddressAdditionalNode = (e) => {
-    this.props.alterRemoteAddressAdditionalNode(e.target.value);
-  };
-
-  _alterUsername = (e) => {
-    this.props.alterUsername(e.target.value);
-  };
-
-  _alterPassword = (e) => {
-    this.props.alterPassword(e.target.value);
-  };
-
-  _alterBindAddressSetupNode = (e) => {
-    this.props.alterBindAddressForSetupNode(e.target.value);
-  };
-
-  _alterPortSetupNode = (e) => {
-    this.props.alterPortForSetupNode(e.target.value);
-  };
-
-  _alterNodeCount = (e) => {
-    this.props.alterNodeCount(e.target.value);
-  };
-
-  _finishClusterSetup = () => {
-    this.props.finishClusterSetup('CouchDB Cluster set up!');
-  };
-
-  render() {
-    const {setupNode, additionalNode} = this.props;
-    return (
-      <div className="setup-nodes">
-          Setup your initial base-node, afterwards add the other nodes that you want to add
-        <div className="setup-setupnode-section">
-          <CurrentAdminPassword
-            {...this.props}
-            onAlterUsername={this._alterUsername}
-            onAlterPassword={this._alterPassword}/>
-
-          <OptionalSettings
-            {...this.props}
-            onAlterPort={this._alterPortSetupNode}
-            onAlterBindAddress={this._alterBindAddressSetupNode}
-            ip={setupNode.bindAddress}
-            port={setupNode.port}/>
-          <NodeCountSetting
-            {...this.props}
-            onAlterNodeCount={this._alterNodeCount}
-            nodeCount={setupNode.nodeCount}/>
-        </div>
-        <hr/>
-        <div className="setup-add-nodes-section">
-          <h2>Add Nodes to the Cluster</h2>
-          <p>Remote host</p>
-          <input
-            value={additionalNode.remoteAddress}
-            onChange={this._alterRemoteAddressAdditionalNode}
-            className="input-remote-node"
-            type="text"
-            placeholder="IP Address"/>
-          <OptionalSettings
-            {...this.props}
-            onAlterPort={this._alterPortAdditionalNode}
-            onAlterBindAddress={this._alterBindAddressAdditionalNode}
-            ip={additionalNode.bindAddress} port={additionalNode.port}/>
-
-          <div className="setup-add-button">
-            <ConfirmButton
-              onClick={this._addNode}
-              showIcon={false}
-              id="setup-btn-no-thanks"
-              text="Add Node"/>
-          </div>
-        </div>
-        <div className="setup-nodelist">
-          {this.getNodeList()}
-        </div>
-
-        <div className="centered setup-finish">
-          <ConfirmButton
-            onClick={this._finishClusterSetup}
-            showIcon={false}
-            text="Configure Cluster"/>
-        </div>
-      </div>
-    );
-  }
-}
-
-MultipleNodesController.propTypes = {
-  username: PropTypes.string.isRequired,
-  password: PropTypes.string.isRequired,
-  nodeList: PropTypes.array.isRequired,
-  isAdminParty: PropTypes.bool.isRequired,
-  setupNode: PropTypes.shape({
-    bindAddress: PropTypes.string.isRequired,
-    port: PropTypes.number.isRequired,
-    nodeCount: PropTypes.number.isRequired
-  }).isRequired,
-  additionalNode: PropTypes.shape({
-    bindAddress: PropTypes.string.isRequired,
-    port: PropTypes.number.isRequired,
-    remoteAddress: PropTypes.string.isRequired
-  }).isRequired
-};
diff --git a/app/addons/setup/components/NodeCountSetting.js b/app/addons/setup/components/NodeCountSetting.js
deleted file mode 100644
index 7be1e5a..0000000
--- a/app/addons/setup/components/NodeCountSetting.js
+++ /dev/null
@@ -1,41 +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.
-
-import React from 'react';
-import PropTypes from 'prop-types';
-
-
-export default class NodeCountSetting extends React.Component {
-
-  handleNodeCountChange = (event) => {
-    this.props.onAlterNodeCount(event);
-  };
-
-  render() {
-    return (
-      <div className="setup-node-count">
-        <p>Number of nodes to be added to the cluster (including this one)</p>
-        <input
-          className="setup-input-nodecount"
-          value={this.props.nodeCount}
-          onChange={this.handleNodeCountChange}
-          placeholder="Value of cluster n"
-          type="text"/>
-      </div>
-    );
-  }
-}
-
-NodeCountSetting.propTypes = {
-  onAlterNodeCount: PropTypes.func.isRequired,
-  nodeCount: PropTypes.number.isRequired
-};
diff --git a/app/addons/setup/components/OptionalSettings.js b/app/addons/setup/components/OptionalSettings.js
deleted file mode 100644
index 1efebb9..0000000
--- a/app/addons/setup/components/OptionalSettings.js
+++ /dev/null
@@ -1,55 +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.
-
-
-import React from 'react';
-import PropTypes from 'prop-types';
-
-export default class OptionalSettings extends React.Component {
-  handleIpChange = (event) => {
-    this.props.onAlterBindAddress(event);
-  };
-
-  handlePortChange = (event) => {
-    this.props.onAlterPort(event);
-  };
-
-  render() {
-    return (
-      <div className="setup-opt-settings">
-        <p>Bind address the node will listen on</p>
-        <input
-          className="setup-input-ip"
-          value={this.props.ip}
-          onChange={this.handleIpChange}
-          placeholder="IP Address"
-          type="text"/>
-
-        <div className="setup-port">
-          <p>Port that the node will use</p>
-          <input
-            className="setup-input-port"
-            value={this.props.port}
-            onChange={this.handlePortChange}
-            type="text"/>
-        </div>
-      </div>
-    );
-  }
-}
-
-OptionalSettings.propTypes = {
-  ip: PropTypes.string.isRequired,
-  port: PropTypes.number.isRequired,
-  onAlterBindAddress: PropTypes.func.isRequired,
-  onAlterPort: PropTypes.func.isRequired
-};
diff --git a/app/addons/setup/components/SingleNodeController.js b/app/addons/setup/components/SingleNodeController.js
deleted file mode 100644
index 29cbcfa..0000000
--- a/app/addons/setup/components/SingleNodeController.js
+++ /dev/null
@@ -1,80 +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.
-import React from 'react';
-import PropTypes from 'prop-types';
-import ReactComponents from "../../components/react-components";
-import CurrentAdminPassword from "./CurrentAdminPassword";
-import OptionalSettings from "./OptionalSettings";
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class SingleNodeController extends React.Component {
-
-  constructor() {
-    super();
-    this.finishSingleNode = this.finishSingleNode.bind(this);
-    this.onChangeUsername = this.onChangeUsername.bind(this);
-    this.onChangePassword = this.onChangePassword.bind(this);
-    this.onChangeBindAddress = this.onChangeBindAddress.bind(this);
-    this.onChangePort = this.onChangePort.bind(this);
-  }
-
-  onChangeUsername = e => this.props.alterUsername(e.target.value);
-
-  onChangePassword = e => this.props.alterPassword(e.target.value);
-
-  onChangeBindAddress = e => this.props.alterBindAddress(e.target.value);
-
-  onChangePort = e => this.props.alterPort(e.target.value);
-
-  render() {
-    return (
-      <div className="setup-nodes">
-        <div className="setup-setupnode-section">
-          <CurrentAdminPassword
-            {...this.props}
-            onAlterUsername={this.onChangeUsername}
-            onAlterPassword={this.onChangePassword}/>
-          <OptionalSettings
-            {...this.props}
-            onAlterPort={this.onChangePort}
-            onAlterBindAddress={this.onChangeBindAddress}
-            ip={this.props.bindAddress}
-            port={this.props.port}/>
-          <ConfirmButton
-            {...this.props}
-            onClick={this.finishSingleNode}
-            text="Configure Node"/>
-        </div>
-      </div>
-    );
-  }
-
-  finishSingleNode = (e) => {
-    e.preventDefault();
-    const {username, password, port, bindAddress} = this.props;
-    const credentials = {username, password};
-    const setupNode = {
-      port,
-      bindAddress,
-    };
-    this.props.setupSingleNode(credentials, setupNode);
-  };
-}
-
-SingleNodeController.propTypes = {
-  username: PropTypes.string.isRequired,
-  password: PropTypes.string.isRequired,
-  port: PropTypes.number.isRequired,
-  bindAddress: PropTypes.string.isRequired,
-  isAdminParty: PropTypes.bool.isRequired
-};
diff --git a/app/addons/setup/container/ConfiguredSceenContainer.js b/app/addons/setup/container/ConfiguredSceenContainer.js
deleted file mode 100644
index 7f61f53..0000000
--- a/app/addons/setup/container/ConfiguredSceenContainer.js
+++ /dev/null
@@ -1,24 +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.
-import {connect} from 'react-redux';
-import ConfiguredScreen from '../components/ConfiguredScreen';
-import {getClusterState} from '../reducers';
-
-const mapStateToProps = ({setup}) => {
-  return {
-    clusterState: getClusterState(setup),
-  };
-};
-
-export default connect(
-  mapStateToProps
-)(ConfiguredScreen);
diff --git a/app/addons/setup/container/FirstStepContainer.js b/app/addons/setup/container/FirstStepContainer.js
deleted file mode 100644
index 2d8a4ee..0000000
--- a/app/addons/setup/container/FirstStepContainer.js
+++ /dev/null
@@ -1,35 +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.
-import {connect} from 'react-redux';
-import FirstStepController from '../components/FirstStepController';
-import {getClusterState} from '../reducers';
-import {getClusterStateFromCouch} from '../actions';
-
-const mapStateToProps = ({setup}) => {
-  return {
-    clusterState: getClusterState(setup),
-  };
-};
-
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    getClusterState() {
-      dispatch(getClusterStateFromCouch());
-    }
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(FirstStepController);
diff --git a/app/addons/setup/container/MultipleNodeContainer.js b/app/addons/setup/container/MultipleNodeContainer.js
deleted file mode 100644
index afa05e7..0000000
--- a/app/addons/setup/container/MultipleNodeContainer.js
+++ /dev/null
@@ -1,71 +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.
-import {connect} from 'react-redux';
-import MultipleNodeController from '../components/MultipleNodeController';
-import {getNodeList, getIsAdminParty, getAdditionalNode, getUsername, getPassword, getSetupNode} from '../reducers';
-import {
-  addNode,
-  alterBindAddressAdditionalNode, alterPortAdditionalNode, alterRemoteAddressAdditionalNode, finishClusterSetup,
-  setBindAddressForSetupNode, setNodeCount, setPassword,
-  setPortForSetupNode, setUsername
-} from "../actions";
-
-const mapStateToProps = ({setup}) => {
-  return {
-    nodeList: getNodeList(setup),
-    isAdminParty: getIsAdminParty(setup),
-    setupNode: getSetupNode(setup),
-    username: getUsername(setup),
-    password: getPassword(setup),
-    additionalNode: getAdditionalNode(setup)
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    addNode(isAdminParty, credentials, setupNode, additionalNode) {
-      dispatch(addNode(isAdminParty, credentials, setupNode, additionalNode));
-    },
-    alterPortAdditionalNode(port) {
-      dispatch(alterPortAdditionalNode(port));
-    },
-    alterBindAddressAdditionalNode(bindAddress) {
-      dispatch(alterBindAddressAdditionalNode(bindAddress));
-    },
-    alterRemoteAddressAdditionalNode(remoteAddress) {
-      dispatch(alterRemoteAddressAdditionalNode(remoteAddress));
-    },
-    alterUsername(username) {
-      dispatch(setUsername(username));
-    },
-    alterPassword(password) {
-      dispatch(setPassword(password));
-    },
-    alterBindAddressForSetupNode(bindAddress) {
-      dispatch(setBindAddressForSetupNode(bindAddress));
-    },
-    alterPortForSetupNode(port) {
-      dispatch(setPortForSetupNode(port));
-    },
-    finishClusterSetup(msg) {
-      dispatch(finishClusterSetup(msg));
-    },
-    alterNodeCount(nodeCount) {
-      dispatch(setNodeCount(nodeCount));
-    }
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(MultipleNodeController);
diff --git a/app/addons/setup/container/SingleNodeContainer.js b/app/addons/setup/container/SingleNodeContainer.js
deleted file mode 100644
index b70de41..0000000
--- a/app/addons/setup/container/SingleNodeContainer.js
+++ /dev/null
@@ -1,60 +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.
-import {connect} from 'react-redux';
-import SingleNodeController from '../components/SingleNodeController';
-import {
-  getIsAdminParty,
-  getBindAddressForSetupNode,
-  getPortForSetupNode,
-  getNodeList,
-  getPassword,
-  getSetupNode,
-  getUsername
-} from '../reducers';
-import {setBindAddressForSetupNode, setPassword, setPortForSetupNode, setupSingleNode, setUsername} from "../actions";
-
-const mapStateToProps = ({setup}) => {
-  return {
-    nodeList: getNodeList(setup),
-    isAdminParty: getIsAdminParty(setup),
-    setupNode: getSetupNode(setup),
-    username: getUsername(setup),
-    password: getPassword(setup),
-    port: getPortForSetupNode(setup),
-    bindAddress: getBindAddressForSetupNode(setup)
-  };
-};
-
-const mapDispatchToProps = dispatch => {
-  return {
-    alterUsername(username) {
-      dispatch(setUsername(username));
-    },
-    alterPassword(password) {
-      dispatch(setPassword(password));
-    },
-    alterBindAddress(bindAddress) {
-      dispatch(setBindAddressForSetupNode(bindAddress));
-    },
-    alterPort(port) {
-      dispatch(setPortForSetupNode(port));
-    },
-    setupSingleNode(credentials, setupNode) {
-      dispatch(setupSingleNode(credentials, setupNode));
-    }
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SingleNodeController);
diff --git a/app/addons/setup/helpers.js b/app/addons/setup/helpers.js
deleted file mode 100644
index 27fde8f..0000000
--- a/app/addons/setup/helpers.js
+++ /dev/null
@@ -1,40 +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.
-import _ from 'lodash';
-
-export function isInvalid(attrs) {
-  if (_.isEmpty(attrs.username)) {
-    return 'Admin name is required';
-  }
-
-  if (_.isEmpty(attrs.password)) {
-    return 'Admin password is required';
-  }
-
-  if (attrs.bind_address && attrs.bind_address === '127.0.0.1' &&
-        !attrs.singlenode) {
-    return 'Bind address can not be 127.0.0.1';
-  }
-
-  if (attrs.port && _.isNaN(+attrs.port)) {
-    return 'Bind port must be a number';
-  }
-
-  if (attrs.nodeCount && _.isNaN(+attrs.nodeCount)) {
-    return 'Node count must be a number';
-  }
-
-  if (attrs.nodeCount === 0 || attrs.nodeCount && attrs.nodeCount < 1) {
-    return 'Node count must be >= 1';
-  }
-  return false;
-}
diff --git a/app/addons/setup/reducers.js b/app/addons/setup/reducers.js
deleted file mode 100644
index 67dd031..0000000
--- a/app/addons/setup/reducers.js
+++ /dev/null
@@ -1,137 +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.
-
-import {
-  SETUP_SET_CLUSTERSTATUS,
-  SETUP_SET_USERNAME,
-  SETUP_SET_PASSWORD,
-  SETUP_BIND_ADDRESS_FOR_SINGLE_NODE,
-  SETUP_PORT_FOR_SINGLE_NODE,
-  SETUP_PORT_ADDITIONAL_NODE,
-  SETUP_BIND_ADDRESS_ADDITIONAL_NODE,
-  SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE,
-  SETUP_ADD_NODE_TO_LIST,
-  SETUP_RESET_ADDITIONAL_NODE,
-  SETUP_NODE_COUNT
-} from './actiontypes';
-import FauxtonAPI from "../../core/api";
-import _ from "lodash";
-
-
-const initialState = {
-  clusterState: '',
-  username: '',
-  password: '',
-  setupNode: {
-    bindAddress: '0.0.0.0',
-    port: 5984,
-    nodeCount: 3
-  },
-  nodeList: [],
-  additionalNode: {
-    bindAddress: '0.0.0.0',
-    port: 5984,
-    remoteAddress: '127.0.0.1'
-  }
-};
-
-export default function setup(state = initialState, action) {
-  const {options, type} = action;
-  switch (type) {
-    case SETUP_SET_CLUSTERSTATUS:
-      return updateState(state, 'clusterState', options.state);
-    case SETUP_SET_USERNAME:
-      return updateState(state, 'username', options.value);
-    case SETUP_SET_PASSWORD:
-      return updateState(state, 'password', options.value);
-    case SETUP_BIND_ADDRESS_FOR_SINGLE_NODE:
-      return updateState(state, 'setupNode.bindAddress', options.value);
-    case SETUP_PORT_FOR_SINGLE_NODE:
-      return updateStateIfNotNaN(state, 'setupNode.port', parseInt(options.value));
-    case SETUP_PORT_ADDITIONAL_NODE:
-      return updateStateIfNotNaN(state, 'additionalNode.port', parseInt(options.value));
-    case SETUP_BIND_ADDRESS_ADDITIONAL_NODE:
-      return updateState(state, 'additionalNode.bindAddress', options.value);
-    case SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE:
-      return updateState(state, 'additionalNode.remoteAddress', options.value);
-    case SETUP_ADD_NODE_TO_LIST:
-      let addNodeListState = getStateCopy(state);
-      addNodeListState.nodeList.push(options.value);
-      resetAdditionalNode(addNodeListState);
-      return addNodeListState;
-    case SETUP_RESET_ADDITIONAL_NODE:
-      return resetAdditionalNode(getStateCopy(state));
-    case SETUP_NODE_COUNT:
-      return updateStateIfNotNaN(state, 'setupNode.nodeCount', parseInt(options.value));
-    default:
-      return state;
-  }
-}
-
-/**
- * Manual nested copy of the state object.
- * @param state The current state to copy.
- * @returns {{setupNode: {}, additionalNode: {}}}
- */
-export const getStateCopy = (state) => {
-  return {
-    ...state,
-    setupNode: {
-      ...state.setupNode
-    },
-    additionalNode: {
-      ...state.additionalNode
-    }
-  };
-};
-
-export const updateStateIfNotNaN = (state, path, value) => {
-  let stateCopy = getStateCopy(state);
-  if (_.isNaN(value)) {
-    return stateCopy;
-  }
-  return _.set(stateCopy, path, value);
-};
-
-/**
- * Update a particular value for a state
- * @param state The state to update
- * @param path The property path to update
- * @param value The value to update
- */
-const updateState = (state, path, value) => {
-  let statecopy = getStateCopy(state);
-  return _.set(statecopy, path, value);
-};
-
-/**
- * Reset the current additionalNode state for the initial one.
- * @param state The state to update
- * @returns {*}
- */
-const resetAdditionalNode = state => {
-  state.additionalNode = Object.assign({}, initialState.additionalNode);
-  return state;
-};
-
-export const getState = state => state;
-export const getClusterState = state => state.clusterState;
-export const getNodeList = state => state.nodeList;
-export const getIsAdminParty = () => FauxtonAPI.session.isAdminParty();
-export const getUsername = state => state.username;
-export const getPassword = state => state.password;
-export const getSetupNode = state => state.setupNode;
-export const getPortForSetupNode = state => state.setupNode.port;
-export const getBindAddressForSetupNode = state => state.setupNode.bindAddress;
-export const getNodeCountForSetupNode = state => state.setupNode.nodeCount;
-export const getAdditionalNode = state => state.additionalNode;
-export const getHostForSetupNode = () => '127.0.0.1';
diff --git a/app/addons/setup/route.js b/app/addons/setup/route.js
deleted file mode 100644
index 38752a1..0000000
--- a/app/addons/setup/route.js
+++ /dev/null
@@ -1,91 +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.
-
-import React from 'react';
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-import ClusterActions from "../cluster/actions";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-import ConfiguredScreenContainer from './container/ConfiguredSceenContainer';
-import FirstStepContainer from './container/FirstStepContainer';
-import SingleNodeContainer from './container/SingleNodeContainer';
-import MultipleNodeContainer from './container/MultipleNodeContainer';
-
-const SetupRouteObject = FauxtonAPI.RouteObject.extend({
-  roles: ['_admin'],
-  selectedHeader: 'Setup',
-
-  routes: {
-    'setup': 'setupInitView',
-    'setup/finish': 'finishView',
-    'setup/singlenode': 'setupSingleNode',
-    'setup/multinode': 'setupMultiNode'
-  },
-
-  setupInitView: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<FirstStepContainer />}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  },
-
-  setupSingleNode: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<SingleNodeContainer />}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  },
-
-  setupMultiNode: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<MultipleNodeContainer />}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  },
-
-  finishView: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    return <OnePaneSimpleLayout
-      component={<ConfiguredScreenContainer/>}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  }
-});
-
-const Setup = {
-  RouteObjects: [SetupRouteObject]
-};
-
-export default Setup;
diff --git a/app/addons/verifyinstall/__tests__/components.test.js b/app/addons/verifyinstall/__tests__/components.test.js
deleted file mode 100644
index 8499a40..0000000
--- a/app/addons/verifyinstall/__tests__/components.test.js
+++ /dev/null
@@ -1,107 +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.
-
-import FauxtonAPI from '../../../core/api';
-import React from 'react';
-import Constants from '../constants';
-import VerifyInstallButton from '../components/VerifyInstallButton';
-import VerifyInstallResults from '../components/VerifyInstallResults';
-import {mount} from 'enzyme';
-import sinon from 'sinon';
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('VerifyInstallResults', function () {
-  let el;
-
-  const tests = [
-    { key: 'CREATE_DATABASE', id: 'js-test-create-db' },
-    { key: 'CREATE_DOCUMENT', id: 'js-test-create-doc' },
-    { key: 'UPDATE_DOCUMENT', id: 'js-test-update-doc' },
-    { key: 'DELETE_DOCUMENT', id: 'js-test-delete-doc' },
-    { key: 'CREATE_VIEW', id: 'js-test-create-view' },
-    { key: 'REPLICATION', id: 'js-test-replication' }
-  ];
-
-  const testResults = {};
-  tests.forEach((test) => {
-    testResults[Constants.TESTS[test.key]] = { complete: false };
-  });
-
-  it('confirm all result fields blank before tests ran', function () {
-
-    el = mount(<VerifyInstallResults testResults={testResults} />);
-
-    tests.forEach((test) => {
-      expect(el.find('#' + test.id).text()).toBe('');
-    });
-  });
-
-  it('confirm each result field shows success after successful test', function () {
-    tests.forEach((test) => {
-      const copy = _.clone(testResults);
-
-      // mark this single test as complete
-      copy[Constants.TESTS[test.key]] = {
-        complete: true,
-        success: true
-      };
-
-      el = mount(<VerifyInstallResults testResults={copy} />);
-
-      // now look at the DOM for that element. It should contain a tick char
-      expect(el.find('#' + test.id + ' span').text()).toBe('✓');
-    });
-  });
-
-  it('confirm each result field shows error marker after failed test', function () {
-    tests.forEach((test) => {
-      const copy = _.clone(testResults);
-
-      // mark this single test as complete
-      copy[Constants.TESTS[test.key]] = {
-        complete: true,
-        success: false
-      };
-
-      el = mount(<VerifyInstallResults testResults={copy} />);
-
-      // now look at the DOM for that element. It should contain an error char
-      expect(el.find('#' + test.id + ' span').text()).toBe('✗');
-    });
-  });
-});
-
-
-describe('VerifyInstallButton', function () {
-  let el;
-
-  it('calls verify function on click', function () {
-    const stub = { func: () => { } };
-    const spy = sinon.spy(stub, 'func');
-    el = mount(<VerifyInstallButton verify={stub.func} isVerifying={false} />);
-    el.simulate('click');
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('shows appropriate default label', function () {
-    const stub = { func: () => { } };
-    el = mount(<VerifyInstallButton verify={stub.func} isVerifying={false} />);
-    expect(el.text()).toBe('Verify Installation');
-  });
-
-  it('shows appropriate label during verification', function () {
-    const stub = { func: () => { } };
-    el = mount(<VerifyInstallButton verify={stub.func} isVerifying={true} />);
-    expect(el.text()).toBe('Verifying');
-  });
-
-});
diff --git a/app/addons/verifyinstall/__tests__/reducers.test.js b/app/addons/verifyinstall/__tests__/reducers.test.js
deleted file mode 100644
index 78dc703..0000000
--- a/app/addons/verifyinstall/__tests__/reducers.test.js
+++ /dev/null
@@ -1,61 +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.
-
-import reducer from "../reducers";
-import ActionTypes from "../actiontypes";
-
-describe('VerifyInstall Reducer', () => {
-
-  it('initial state has all tests status set to false', () => {
-    const newState = reducer(undefined, {type: 'something_else'});
-
-    expect(newState.isVerifying).toBe(false);
-
-    // confirm all the tests are initially marked as incomplete
-    Object.keys(newState.tests).forEach((test) => {
-      expect(newState.tests[test].complete).toBe(false);
-    });
-  });
-
-  it('verification status changes to in progress', () => {
-    const newState = reducer(undefined, {
-      type: ActionTypes.VERIFY_INSTALL_START
-    });
-
-    expect(newState.isVerifying).toBe(true);
-  });
-
-  it('verification status changes to completed', () => {
-    const newState = reducer(undefined, {
-      type: ActionTypes.VERIFY_INSTALL_ALL_TESTS_COMPLETE
-    });
-    expect(newState.isVerifying).toBe(false);
-  });
-
-  it('resets status of all tests', () => {
-    const state = {
-      tests: {
-        TEST1: { complete: true, success: true },
-        TEST2: { complete: true, success: false  },
-        TEST3: { complete: false, success: false  }
-      }
-    };
-    const newState = reducer(state, {
-      type: ActionTypes.VERIFY_INSTALL_RESET
-    });
-    Object.keys(newState.tests).forEach((test) => {
-      expect(newState.tests[test].complete).toBe(false);
-      expect(newState.tests[test].success).not.toBeDefined();
-    });
-  });
-
-});
diff --git a/app/addons/verifyinstall/actions.js b/app/addons/verifyinstall/actions.js
deleted file mode 100644
index e8a5967..0000000
--- a/app/addons/verifyinstall/actions.js
+++ /dev/null
@@ -1,101 +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.
-
-import FauxtonAPI from "../../core/api";
-import Constants from "./constants";
-import VerifyInstall from "./resources";
-import ActionTypes from "./actiontypes";
-
-
-// helper function to publish success/fail result of a single test having been ran
-const testPassed = function (test, dispatch) {
-  return function () {
-    dispatch({
-      type: ActionTypes.VERIFY_INSTALL_SINGLE_TEST_COMPLETE,
-      test: test,
-      success: true
-    });
-  };
-};
-
-let allTestsPassed = true;
-const testFailed = function (test, dispatch) {
-  return function (xhr) {
-    allTestsPassed = false;
-    if (!xhr) { return; }
-
-    dispatch({
-      type: ActionTypes.VERIFY_INSTALL_SINGLE_TEST_COMPLETE,
-      test: test,
-      success: false
-    });
-    let reason = 'n/a';
-    if (xhr.responseText) {
-      reason = JSON.parse(xhr.responseText).reason;
-    } else if (xhr.message) {
-      reason = xhr.message;
-    }
-    FauxtonAPI.addNotification({
-      msg: 'Error: ' + reason,
-      type: 'error'
-    });
-  };
-};
-
-
-export const resetTests = () => (dispatch) => {
-  dispatch({ type: ActionTypes.VERIFY_INSTALL_RESET });
-};
-
-export const startVerification = () => (dispatch) => {
-  // announce that we're starting the verification tests
-  dispatch({ type: ActionTypes.VERIFY_INSTALL_START });
-
-  const testProcess = VerifyInstall.testProcess;
-  testProcess.setup()
-    .then(() => {
-      return testProcess.saveDB().then(testPassed(Constants.TESTS.CREATE_DATABASE, dispatch));
-    }, testFailed(Constants.TESTS.CREATE_DATABASE, dispatch))
-    .then(() => {
-      return testProcess.saveDoc().then(testPassed(Constants.TESTS.CREATE_DOCUMENT, dispatch));
-    }, testFailed(Constants.TESTS.CREATE_DATABASE, dispatch))
-    .then(() => {
-      return testProcess.updateDoc().then(testPassed(Constants.TESTS.UPDATE_DOCUMENT, dispatch));
-    }, testFailed(Constants.TESTS.CREATE_DOCUMENT, dispatch))
-    .then(() => {
-      return testProcess.destroyDoc().then(testPassed(Constants.TESTS.DELETE_DOCUMENT, dispatch));
-    }, testFailed(Constants.TESTS.UPDATE_DOCUMENT, dispatch))
-    .then(() => {
-      return testProcess.setupView().then(() => {
-        return testProcess.testView().then(testPassed(Constants.TESTS.CREATE_VIEW, dispatch));
-      });
-    }, testFailed(Constants.TESTS.DELETE_DOCUMENT, dispatch))
-    .then(() => {
-      return testProcess.setupReplicate().then(() => {
-        return testProcess.testReplicate().then(testPassed(Constants.TESTS.REPLICATION, dispatch));
-      });
-    }, testFailed(Constants.TESTS.CREATE_VIEW, dispatch))
-    .then(() => {}, testFailed(Constants.TESTS.REPLICATION, dispatch))
-    .then(() => {
-      // now announce the tests have been ran
-      dispatch({ type: ActionTypes.VERIFY_INSTALL_ALL_TESTS_COMPLETE });
-
-      if (allTestsPassed) {
-        FauxtonAPI.addNotification({
-          msg: 'Success! Your CouchDB installation is working. Time to Relax.',
-          type: 'success'
-        });
-      }
-
-      testProcess.removeDBs();
-    });
-};
diff --git a/app/addons/verifyinstall/actiontypes.js b/app/addons/verifyinstall/actiontypes.js
deleted file mode 100644
index 89db7e1..0000000
--- a/app/addons/verifyinstall/actiontypes.js
+++ /dev/null
@@ -1,18 +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.
-
-export default {
-  VERIFY_INSTALL_START: 'VERIFY_INSTALL_START',
-  VERIFY_INSTALL_RESET: 'VERIFY_INSTALL_RESET',
-  VERIFY_INSTALL_SINGLE_TEST_COMPLETE: 'VERIFY_INSTALL_SINGLE_TEST_COMPLETE',
-  VERIFY_INSTALL_ALL_TESTS_COMPLETE: 'VERIFY_INSTALL_ALL_TESTS_COMPLETE'
-};
diff --git a/app/addons/verifyinstall/assets/less/verifyinstall.less b/app/addons/verifyinstall/assets/less/verifyinstall.less
deleted file mode 100644
index e084cb3..0000000
--- a/app/addons/verifyinstall/assets/less/verifyinstall.less
+++ /dev/null
@@ -1,16 +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.
-
-#start {
-  margin-bottom: 20px;
-}
-
diff --git a/app/addons/verifyinstall/base.js b/app/addons/verifyinstall/base.js
deleted file mode 100644
index 4f3eaa9..0000000
--- a/app/addons/verifyinstall/base.js
+++ /dev/null
@@ -1,31 +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.
-
-import FauxtonAPI from "../../core/api";
-import VerifyInstall from "./routes";
-import reducers from './reducers';
-import "./assets/less/verifyinstall.less";
-
-VerifyInstall.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    title: 'Verify',
-    href: '#/verifyinstall',
-    icon: 'fonticon-ok-circled',
-    bottomNav: true
-  });
-};
-
-FauxtonAPI.addReducers({
-  verifyinstall: reducers
-});
-
-export default VerifyInstall;
diff --git a/app/addons/verifyinstall/components/VerifyInstallButton.js b/app/addons/verifyinstall/components/VerifyInstallButton.js
deleted file mode 100644
index 4e7df08..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallButton.js
+++ /dev/null
@@ -1,29 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class VerifyInstallButton extends React.Component {
-  static propTypes = {
-    verify: PropTypes.func.isRequired,
-    isVerifying: PropTypes.bool.isRequired
-  };
-
-  render() {
-    return (
-      <button id="start" className="btn btn-primary" onClick={this.props.verify} disabled={this.props.isVerifying}>
-        {this.props.isVerifying ? 'Verifying' : 'Verify Installation'}
-      </button>
-    );
-  }
-}
diff --git a/app/addons/verifyinstall/components/VerifyInstallContainer.js b/app/addons/verifyinstall/components/VerifyInstallContainer.js
deleted file mode 100644
index efc4fbb..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallContainer.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { connect } from 'react-redux';
-import VerifyInstallScreen from './VerifyInstallScreen';
-import { resetTests, startVerification } from '../actions';
-
-const mapStateToProps = ({ verifyinstall }) => {
-  return {
-    isVerifying: verifyinstall.isVerifying,
-    testResults: verifyinstall.tests
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    resetTests: () => {
-      dispatch(resetTests());
-    },
-
-    startVerification: () => {
-      dispatch(resetTests());
-      dispatch(startVerification());
-    }
-  };
-};
-
-const VerifyInstallContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(VerifyInstallScreen);
-
-export default VerifyInstallContainer;
diff --git a/app/addons/verifyinstall/components/VerifyInstallResults.js b/app/addons/verifyinstall/components/VerifyInstallResults.js
deleted file mode 100644
index 08ced5f..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallResults.js
+++ /dev/null
@@ -1,70 +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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Constants from '../constants';
-
-export default class VerifyInstallResults extends React.Component {
-  static propTypes = {
-    testResults: PropTypes.object.isRequired
-  };
-
-  showTestResult = (test) => {
-    if (!this.props.testResults[test].complete) {
-      return '';
-    }
-    if (this.props.testResults[test].success) {
-      return <span>&#10003;</span>;
-    }
-    return <span>&#x2717;</span>;
-  };
-
-  render() {
-    return (
-      <table className="table table-striped table-bordered">
-        <thead>
-          <tr>
-            <th>Test</th>
-            <th>Status</th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <td>Create Database</td>
-            <td id="js-test-create-db">{this.showTestResult(Constants.TESTS.CREATE_DATABASE)}</td>
-          </tr>
-          <tr>
-            <td>Create Document</td>
-            <td id="js-test-create-doc">{this.showTestResult(Constants.TESTS.CREATE_DOCUMENT)}</td>
-          </tr>
-          <tr>
-            <td>Update Document</td>
-            <td id="js-test-update-doc">{this.showTestResult(Constants.TESTS.UPDATE_DOCUMENT)}</td>
-          </tr>
-          <tr>
-            <td>Delete Document</td>
-            <td id="js-test-delete-doc">{this.showTestResult(Constants.TESTS.DELETE_DOCUMENT)}</td>
-          </tr>
-          <tr>
-            <td>Create View</td>
-            <td id="js-test-create-view">{this.showTestResult(Constants.TESTS.CREATE_VIEW)}</td>
-          </tr>
-          <tr>
-            <td>Replication</td>
-            <td id="js-test-replication">{this.showTestResult(Constants.TESTS.REPLICATION)}</td>
-          </tr>
-        </tbody>
-      </table>
-    );
-  }
-}
diff --git a/app/addons/verifyinstall/components/VerifyInstallScreen.js b/app/addons/verifyinstall/components/VerifyInstallScreen.js
deleted file mode 100644
index a5c637b..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallScreen.js
+++ /dev/null
@@ -1,32 +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.
-
-import React from 'react';
-import VerifyInstallButton from './VerifyInstallButton';
-import VerifyInstallResults from './VerifyInstallResults';
-
-export default class VerifyInstallScreen extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.props.resetTests();
-  }
-
-  render() {
-    return (
-      <div>
-        <VerifyInstallButton verify={this.props.startVerification} isVerifying={this.props.isVerifying} />
-        <VerifyInstallResults testResults={this.props.testResults} />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/verifyinstall/constants.js b/app/addons/verifyinstall/constants.js
deleted file mode 100644
index fd286c0..0000000
--- a/app/addons/verifyinstall/constants.js
+++ /dev/null
@@ -1,24 +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 CONSTANTS = {
-  TESTS: {
-    CREATE_DATABASE: 'TEST_CREATE_DATABASE',
-    CREATE_DOCUMENT: 'TEST_CREATE_DOCUMENT',
-    UPDATE_DOCUMENT: 'TEST_UPDATE_DOCUMENT',
-    DELETE_DOCUMENT: 'TEST_DELETE_DOCUMENT',
-    CREATE_VIEW: 'TEST_CREATE_VIEW',
-    REPLICATION: 'TEST_REPLICATION'
-  }
-};
-
-export default CONSTANTS;
diff --git a/app/addons/verifyinstall/reducers.js b/app/addons/verifyinstall/reducers.js
deleted file mode 100644
index 6067f1d..0000000
--- a/app/addons/verifyinstall/reducers.js
+++ /dev/null
@@ -1,75 +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.
-
-import ActionTypes from './actiontypes';
-import Constants from './constants';
-
-const initialState = {
-  isVerifying: false,
-  tests: {}
-};
-Object.keys(Constants.TESTS).forEach((key) => {
-  initialState.tests[Constants.TESTS[key]] = { complete: false };
-});
-
-function resetTests(tests) {
-  const testsCopy = {...tests};
-  Object.keys(testsCopy).forEach((key) => {
-    testsCopy[key] = { complete: false };
-  });
-  return testsCopy;
-}
-
-function updateTestStatus(tests, test, success) {
-  const testsCopy = {...tests};
-
-  // shouldn't ever occur since we're using constants for the test names
-  if (!_.has(testsCopy, test)) {
-    throw new Error('Invalid test name passed to updateTestStatus()');
-  }
-
-  // mark this test as complete, and track whether it was a success or failure
-  testsCopy[test] = { complete: true, success: success };
-  return testsCopy;
-}
-
-export default function verifyinstall (state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.VERIFY_INSTALL_START:
-      return {
-        ...state,
-        isVerifying: true
-      };
-
-    case ActionTypes.VERIFY_INSTALL_RESET:
-      return {
-        ...state,
-        tests: resetTests(state.tests)
-      };
-
-    case ActionTypes.VERIFY_INSTALL_SINGLE_TEST_COMPLETE:
-      return {
-        ...state,
-        tests: updateTestStatus(state.tests, action.test, action.success)
-      };
-
-    case ActionTypes.VERIFY_INSTALL_ALL_TESTS_COMPLETE:
-      return {
-        ...state,
-        isVerifying: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/verifyinstall/resources.js b/app/addons/verifyinstall/resources.js
deleted file mode 100644
index 0c9f689..0000000
--- a/app/addons/verifyinstall/resources.js
+++ /dev/null
@@ -1,161 +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.
-
-import FauxtonAPI from "../../core/api";
-import Helpers from "../../helpers";
-import { get, post } from "../../core/ajax";
-import Databases from "../databases/resources";
-import Documents from "../documents/resources";
-const Verifyinstall = FauxtonAPI.addon();
-
-const db = new Databases.Model({
-  id: 'verifytestdb',
-  name: 'verifytestdb'
-});
-
-const dbReplicate = new Databases.Model({
-  id: 'verifytestdb_replicate',
-  name: 'verifytestdb_replicate'
-});
-
-let doc, viewDoc;
-
-Verifyinstall.testProcess = {
-  saveDoc: function () {
-    doc = new Documents.Doc({_id: 'test_doc_1', a: 1}, {
-      database: db
-    });
-
-    return doc.save();
-  },
-
-  destroyDoc: function () {
-    return doc.destroy();
-  },
-
-  updateDoc: function () {
-    doc.set({b: 'hello'});
-    return doc.save();
-  },
-
-  saveDB: function () {
-    return db.save();
-  },
-
-  setupDB: function (db) {
-    const promise = new FauxtonAPI.Promise((resolve, reject) => {
-      db.fetch().then(() => {
-        return db.destroy();
-      }, () => {
-        resolve();
-      }).then(() => {
-        resolve();
-      }, (xhr, error, reason) => {
-        reject(new Error(reason));
-      });
-    });
-    return promise;
-  },
-
-  setup: function () {
-    return FauxtonAPI.Promise.all([
-      this.setupDB(db),
-      this.setupDB(dbReplicate)
-    ]);
-  },
-
-  testView: function () {
-    let resolve, reject;
-    const promise = new FauxtonAPI.Promise(function(res, rej) {
-      resolve = res;
-      reject = rej;
-    });
-    const getPromise = get(viewDoc.url() + '/_view/testview').then(res => {
-      if (res.error) {
-        throw new Error(res.reason || res.error);
-      }
-      return res;
-    });
-
-    getPromise.then(function (resp) {
-      resp = _.isString(resp) ? JSON.parse(resp) : resp;
-      const row = resp.rows[0];
-      if (row.value === 6) {
-        resolve();
-      }
-      reject(new Error('Values expect 6, got ' + row.value));
-    }, reject);
-
-    return promise;
-  },
-
-  setupView: function () {
-    const doc1 = new Documents.Doc({_id: 'test_doc_10', a: 1}, { database: db });
-    const doc2 = new Documents.Doc({_id: 'test_doc_20', a: 2}, { database: db });
-    const doc3 = new Documents.Doc({_id: 'test_doc_30', a: 3}, { database: db });
-
-    viewDoc = new Documents.Doc({
-      _id: '_design/view_check',
-      views: {
-        'testview': {
-          map: 'function (doc) { emit(doc._id, doc.a); }',
-          reduce: '_sum'
-        }
-      }
-    }, {
-      database: db
-    });
-
-    return FauxtonAPI.Promise.all([doc1.save(), doc2.save(), doc3.save(), viewDoc.save()]);
-  },
-
-  setupReplicate: function () {
-    const body = {
-      create_target: true,
-      source: 'verifytestdb',
-      target: 'verifytestdb_replicate'
-    };
-    return post(
-      Helpers.getServerUrl('/_replicate'),
-      body
-    ).then(res => {
-      if (res.error) {
-        throw new Error(res.reason || res.error);
-      }
-      return res;
-    });
-  },
-
-  testReplicate: function () {
-    const promise = new FauxtonAPI.Promise((resolve, reject) => {
-      dbReplicate.fetch().then(() => {
-        const docCount = dbReplicate.get('doc_count');
-        if (docCount === 4) {
-          resolve();
-          return;
-        }
-        const reason = 'Replication Failed, expected 4 docs got ' + docCount;
-        reject(new Error(reason));
-      }, reject);
-    });
-
-    return promise;
-  },
-
-  removeDBs: function () {
-    dbReplicate.destroy();
-    db.destroy();
-  }
-};
-
-
-export default Verifyinstall;
diff --git a/app/addons/verifyinstall/routes.js b/app/addons/verifyinstall/routes.js
deleted file mode 100644
index cae1983..0000000
--- a/app/addons/verifyinstall/routes.js
+++ /dev/null
@@ -1,37 +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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import VerifyInstall from "./resources";
-import VerifyInstallContainer from "./components/VerifyInstallContainer";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-const VerifyRouteObject = FauxtonAPI.RouteObject.extend({
-  routes: {
-    'verifyinstall': 'verifyInstall'
-  },
-  selectedHeader: 'Verify',
-
-  verifyInstall: function () {
-    return <OnePaneSimpleLayout
-      component={<VerifyInstallContainer/>}
-      crumbs={[
-        {name: 'Verify CouchDB Installation'}
-      ]}
-    />;
-  }
-});
-
-VerifyInstall.RouteObjects = [VerifyRouteObject];
-
-export default VerifyInstall;
diff --git a/app/app.js b/app/app.js
deleted file mode 100644
index 713b8de..0000000
--- a/app/app.js
+++ /dev/null
@@ -1,82 +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.
-import "jquery";
-import app from "./initialize";
-import _ from "lodash";
-import Helpers from "./helpers";
-import Utils from "./core/utils";
-import FauxtonAPI from "./core/api";
-import 'react-toastify/dist/ReactToastify.min.css';
-import "../assets/less/fauxton.less";
-
-// Make sure we have a console.log
-if (_.isUndefined(console)) {
-  console = {
-    log: function () {},
-    trace: function () {},
-    debug: function () {}
-  };
-}
-
-// Provide a global location to place configuration settings and module
-// creation also mix in Backbone.Events
-Object.assign(app, {
-  utils: Utils,
-  getParams: FauxtonAPI.utils.getParams,
-  helpers: Helpers
-});
-
-FauxtonAPI.config({
-  // I haven't wrapped these dispatch methods in a action
-  // because I don't want to require fauxton/actions in this method.
-  addHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'ADD_NAVBAR_LINK',
-      link: link
-    });
-  },
-
-  updateHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'UPDATE_NAVBAR_LINK',
-      link: link
-    });
-  },
-
-  removeHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'REMOVE_NAVBAR_LINK',
-      link: link
-    });
-  },
-
-  hideLogin: function () {
-    FauxtonAPI.reduxDispatch({
-      type: 'NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION',
-      visible: false
-    });
-  },
-
-  showLogout: function () {
-    FauxtonAPI.reduxDispatch({
-      type: 'NAVBAR_SHOW_LOGOUT_BUTTON'
-    });
-  },
-
-  showLogin: function () {
-    FauxtonAPI.reduxDispatch({
-      type: 'NAVBAR_SHOW_LOGIN_BUTTON'
-    });
-  }
-});
-
-export default app;
diff --git a/app/constants.js b/app/constants.js
deleted file mode 100644
index 7f02640..0000000
--- a/app/constants.js
+++ /dev/null
@@ -1,52 +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.
-export default {
-
-  MISC: {
-    TRAY_TOGGLE_SPEED: 250,
-    DEFAULT_PAGE_SIZE: 20
-  },
-
-  DATABASES: {
-    DOCUMENT_LIMIT: 100
-  },
-
-  // global events for common used components
-  EVENTS: {
-    TRAY_OPENED: 'tray:opened',
-    NAVBAR_SIZE_CHANGED: 'navbar:size_changed'
-  },
-
-  // documentation URLs
-  DOC_URLS: {
-    GENERAL:'./docs/intro/api.html#documents',
-    ALL_DBS:'./docs/api/server/common.html?highlight=all_dbs#get--_all_dbs',
-    REPLICATION:'./docs/replication/replicator.html#basics',
-    DESIGN_DOCS:'./docs/ddocs/ddocs.html#design-docs',
-    DESIGN_DOC_METADATA:'./docs/api/ddoc/common.html#api-ddoc-view-index-info',
-    VIEW_FUNCS:'./docs/ddocs/ddocs.html#view-functions',
-    MAP_FUNCS:'./docs/ddocs/ddocs.html#map-functions',
-    REDUCE_FUNCS:'./docs/ddocs/ddocs.html#reduce-and-rereduce-functions',
-    API_REF:'./docs/http-api.html',
-    DB_PERMISSION:'./docs/api/database/security.html#db-security',
-    STATS:'./docs/api/server/common.html?highlight=stats#get--_stats',
-    ACTIVE_TASKS:'./docs/api/server/common.html?highlight=stats#active-tasks',
-    LOG:'./docs/api/server/common.html?highlight=stats#log',
-    CONFIG:'./docs/config/index.html',
-    VIEWS:'./docs/intro/overview.html#views',
-    MANGO_INDEX:'./docs/intro/api.html#documents',
-    MANGO_SEARCH:'./docs/intro/api.html#documents',
-    CHANGES:'./docs/api/database/changes.html?highlight=changes#post--db-_changes',
-    SETUP: './docs/cluster/setup.html#the-cluster-setup-wizard',
-    MEMBERSHIP: './docs/cluster/nodes.html'
-  }
-};
diff --git a/app/core/__tests__/ajax.test.js b/app/core/__tests__/ajax.test.js
deleted file mode 100644
index c989a41..0000000
--- a/app/core/__tests__/ajax.test.js
+++ /dev/null
@@ -1,212 +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.
-import fetchMock from 'fetch-mock';
-import {
-  json,
-  fetchObserver,
-  get,
-  put,
-  post,
-  deleteRequest
-} from '../ajax';
-
-describe('Fauxton Ajax', () => {
-  let unsubscribe;
-
-  afterEach(() => {
-    if (unsubscribe) {
-      unsubscribe.unsubscribe();
-      unsubscribe = null;
-    }
-    fetchMock.reset();
-  });
-
-  it('should observe multiple requests', (done) => {
-    fetchMock.getOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    fetchMock.getOnce('/testing2', {
-      status: 201,
-      body: {
-        ok: true
-      }
-    });
-
-    let count = 0;
-    unsubscribe = fetchObserver.subscribe({
-      next () {
-        count++;
-        if (count === 2) {
-          done();
-        }
-      }
-    });
-
-    json("/testing");
-    json("/testing2");
-  });
-
-  it('Observer should be filterable', (done) => {
-    fetchMock.getOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    fetchMock.getOnce('/testing-again', {
-      status: 400,
-      body: {
-        hello: 'ok'
-      }
-    });
-
-    unsubscribe = fetchObserver.filter(resp => resp.status === 400).subscribe({
-      next (resp) {
-        done();
-        expect(resp.status).toEqual(400);
-      }
-    });
-
-    json("/testing");
-    json("/testing-again");
-  });
-
-  it('can do a GET', () => {
-    fetchMock.getOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return get('/testing').then(resp =>{
-      expect(resp.ok).toBeTruthy();
-    });
-  });
-
-  it('can do a PUT', () => {
-    fetchMock.putOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return put('/testing')
-      .then(resp =>{
-        expect(resp.ok).toBeTruthy();
-      });
-  });
-
-  it('can do a POST', () => {
-    fetchMock.postOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return post('/testing')
-      .then(resp =>{
-        expect(resp.ok).toBeTruthy();
-      });
-  });
-
-  it('can do a DELETE', () => {
-    fetchMock.deleteOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return deleteRequest('/testing')
-      .then(resp =>{
-        expect(resp.ok).toBeTruthy();
-      });
-  });
-
-  describe('POST with falsy values as the body', () => {
-    const successResponse = {
-      status: 200,
-      body: {
-        ok: true
-      }
-    };
-    it('accepts empty string', () => {
-      fetchMock.postOnce('/testing', successResponse);
-      return post('/testing', '')
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('""');
-        });
-    });
-
-    it('accepts zero', () => {
-      fetchMock.postOnce('/testing', successResponse);
-      return post('/testing', 0)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('0');
-        });
-    });
-
-    it('accepts false', () => {
-      fetchMock.postOnce('/testing', successResponse);
-      return post('/testing', false)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('false');
-        });
-    });
-  });
-
-  describe('PUT with falsy values as the body', () => {
-    const successResponse = {
-      status: 200,
-      body: {
-        ok: true
-      }
-    };
-    it('accepts empty string', () => {
-      fetchMock.putOnce('/testing', successResponse);
-      return put('/testing', '')
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('""');
-        });
-    });
-
-    it('accepts zero', () => {
-      fetchMock.putOnce('/testing', successResponse);
-      return put('/testing', 0)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('0');
-        });
-    });
-
-    it('accepts false', () => {
-      fetchMock.putOnce('/testing', successResponse);
-      return put('/testing', false)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('false');
-        });
-    });
-  });
-});
diff --git a/app/core/__tests__/api.test.js b/app/core/__tests__/api.test.js
deleted file mode 100644
index ca6e3ad..0000000
--- a/app/core/__tests__/api.test.js
+++ /dev/null
@@ -1,44 +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.
-
-import FauxtonAPI from "../api";
-
-describe('URLs', () => {
-
-  it('can register and get url', () => {
-    const testUrl = 'this_is_a_test_url';
-
-    FauxtonAPI.registerUrls('testURL', {
-      server: () => {
-        return testUrl;
-      }
-    });
-
-    expect(FauxtonAPI.urls('testURL', 'server')).toBe(testUrl);
-
-  });
-
-  it('can register interceptor to change url', () => {
-    const testUrl = 'interceptor_url';
-
-    FauxtonAPI.registerExtension('urls:interceptors', function (name, context) {
-      if (name === 'testURL' && context === 'intercept') {
-        return testUrl;
-      }
-
-      return false;
-    });
-
-    expect(FauxtonAPI.urls('testURL', 'intercept')).toBe(testUrl);
-  });
-
-});
diff --git a/app/core/__tests__/utils.test.js b/app/core/__tests__/utils.test.js
deleted file mode 100644
index b802a2d..0000000
--- a/app/core/__tests__/utils.test.js
+++ /dev/null
@@ -1,116 +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.
-
-import utils from "../utils";
-
-describe('Utils', () => {
-
-  describe('getDocTypeFromId', () => {
-
-    it('returns doc if id not given', () => {
-      const res = utils.getDocTypeFromId();
-      expect(res).toBe('doc');
-    });
-
-    it('returns design doc for design docs', () => {
-      const res = utils.getDocTypeFromId('_design/foobar');
-      expect(res).toBe('design doc');
-    });
-
-    it('returns doc for all others', () => {
-      const res = utils.getDocTypeFromId('blerg');
-      expect(res).toBe('doc');
-    });
-  });
-
-  describe('getSafeIdForDoc', () => {
-
-    it('keeps _design/ intact', () => {
-      const res = utils.getSafeIdForDoc('_design/foo/do');
-      expect(res).toBe('_design/foo%2Fdo');
-    });
-
-    it('encodes all other', () => {
-      const res = utils.getSafeIdForDoc('_redesign/foobar');
-      expect(res).toBe('_redesign%2Ffoobar');
-    });
-  });
-
-  describe('safeURLName', () => {
-
-    it('encodes special chars', () => {
-      expect(utils.safeURLName('foo-bar/baz')).toBe('foo-bar%2Fbaz');
-    });
-
-    it('encodes an encoded doc', () => {
-      expect(utils.safeURLName('foo-bar%2Fbaz')).toBe('foo-bar%252Fbaz');
-    });
-  });
-
-  describe('isSystemDatabase', () => {
-
-    it('detects system databases', () => {
-      expect(utils.isSystemDatabase('_replicator')).toBeTruthy();
-    });
-
-    it('ignores other dbs', () => {
-      expect(utils.isSystemDatabase('foo')).toBeFalsy();
-    });
-  });
-
-  describe('localStorage', () => {
-
-    it('Should get undefined when getting a non-existent key', () => {
-      expect(utils.localStorageGet('qwerty')).not.toBeDefined();
-    });
-
-    it('Should get value after setting it', () => {
-      const key = 'key1';
-      utils.localStorageSet(key, 1);
-      expect(utils.localStorageGet(key)).toBe(1);
-    });
-
-    it('Set and retrieve complex object', () => {
-      const key = 'key2',
-            obj = {
-              one: 1,
-              two: ['1', 'string', 3]
-            };
-      utils.localStorageSet(key, obj);
-      expect(utils.localStorageGet(key)).toEqual(obj);
-    });
-
-    it('stripHTML removes HTML', () => {
-      [
-        { html: '<span>okay</span>', text: 'okay' },
-        { html: 'test <span>before</span> and after', text: 'test before and after' },
-        { html: 'testing <a href="#whatever">attributes</span>', text: 'testing attributes' },
-        { html: '<span>testing</span> multiple <p>elements</p>', text: 'testing multiple elements' }
-      ].forEach(function (item) {
-        expect(utils.stripHTML(item.html)).toBe(item.text);
-      });
-    });
-
-  });
-
-  describe('queryParams', () => {
-    it('builds query string from an object', () => {
-      expect(utils.queryParams({
-        startkey: JSON.stringify('_design/app'),
-        endkey: JSON.stringify('_design/app\u9999'),
-        limit:30
-      })).toBe(
-        'startkey=%22_design%2Fapp%22&endkey=%22_design%2Fapp%E9%A6%99%22&limit=30'
-      );
-    });
-  });
-});
diff --git a/app/core/ajax.js b/app/core/ajax.js
deleted file mode 100644
index 305d8dc..0000000
--- a/app/core/ajax.js
+++ /dev/null
@@ -1,140 +0,0 @@
-import 'whatwg-fetch';
-import {defaultsDeep} from "lodash";
-import {Subject} from 'rxjs/Subject';
-import 'rxjs/add/operator/filter';
-
-/* Add a multicast observer so that all fetch requests can be observed
-  Some usage examples:
-
-  This logs all status codes
-  fetchObserver.subscribe((resp) => console.log(resp.statusCode));
-
-
-  This only logs all status codes that are great than 201
-  fetchObserver.filter(resp.statusCode > 201).subscribe(resp => console.log(resp.statusCode));
-*/
-export const fetchObserver = new Subject();
-
-
-/**
- * json - The lowlevel fetch request with some basic headers
- * that are always needed.
- *
- * @param {string}   url          The url for the request
- * @param {string} [method=GET] The request method
- * @param {object} [opts={}]    Extra fetch options that will be added.
- * Any opts added here will override the default ones
- * Passing in `raw: true` in here will return the raw response instead of a json body response.
- *
- * @return {Promise}
- */
-export const json = (url, method = "GET", opts = {}) => {
-  return fetch(
-    url,
-    defaultsDeep(
-      {},
-      opts,
-      {
-        method,
-        credentials: "include",
-        headers: {
-          accept: "application/json",
-          "Content-Type": "application/json",
-          "Pragma":"no-cache" //Disables cache for IE11
-        },
-        cache: "no-cache"
-      }
-    )
-  ).then(resp => {
-    fetchObserver.next(resp);
-    if (opts.raw) {
-      return resp;
-    }
-    return resp.json();
-  });
-};
-
-
-/**
- * get - Get request
- *
- * @param {string}   url Url of request
- * @param {object} [opts={}] Opts to add to request
- *
- * @return {Promise} A promise with the request's response
- */
-export const get = (url, opts = {}) => {
-  return json(url, "GET", opts);
-};
-
-export const deleteRequest = (url, opts = {}) => {
-  return json(url, "DELETE", opts);
-};
-
-/**
- * post - Post request
- *
- * @param {string}   url  Url of request
- * @param {object} [body] Body of request
- * @param {object} [opts={}] Opts to add to request
- *
- * @return {Promise} A promise with the request's response
- */
-export const post = (url, body, opts = {}) => {
-  if (typeof body !== 'undefined') {
-    if (opts.rawBody)
-      opts.body = body;
-    else
-      opts.body = JSON.stringify(body);
-  }
-  return json(url, "POST", opts);
-};
-
-/**
- * put - Put request
- *
- * @param {string}   url  Url of request
- * @param {object} [body] Body of request
- * @param {object} [opts={}] Opts to add to request
- * Passing in `rawBody: true` in here will not stringify the body.
- *
- * @return {Promise} A promise with the request's response
- */
-export const put = (url, body, opts = {}) => {
-  if (typeof body !== 'undefined') {
-    if (opts.rawBody)
-      opts.body = body;
-    else
-      opts.body = JSON.stringify(body);
-  }
-  return json(url, "PUT", opts);
-};
-
-export const formEncoded = (url, method, opts = {}) => {
-  return json(url, method, defaultsDeep(
-    {},
-    opts,
-    {
-      headers: {
-        "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
-      }
-    }));
-};
-
-export const postFormEncoded = (url, body, opts = {}) => {
-  if (body)
-    opts.body = body;
-  return formEncoded(url, "POST", opts);
-};
-
-export const putFormEncoded = (url, body, opts = {}) => {
-  if (body)
-    opts.body = body;
-  return formEncoded(url, "PUT", opts);
-};
-
-export const deleteFormEncoded = (url, body, opts = {}) => {
-  if (body)
-    opts.body = body;
-  return formEncoded(url, "DELETE", opts);
-};
diff --git a/app/core/api.js b/app/core/api.js
deleted file mode 100644
index 7927397..0000000
--- a/app/core/api.js
+++ /dev/null
@@ -1,123 +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.
-
-import FauxtonAPI from "./base";
-import Router from "./router";
-import RouteObject from "./routeObject";
-import utils from "./utils";
-import Store from "./store";
-import constants from "../constants";
-import dispatcher from "./dispatcher";
-import $ from "jquery";
-import Backbone from "backbone";
-import _ from "lodash";
-import Promise from "bluebird";
-
-Backbone.$ = $;
-Backbone.ajax = function () {
-  return Backbone.$.ajax.apply(Backbone.$, arguments);
-};
-
-Object.assign(FauxtonAPI, {
-  Router,
-  RouteObject,
-  utils,
-  Store,
-  dispatcher,
-  Promise,
-  Events: _.extend({}, Backbone.Events)
-});
-
-// Pass along all constants
-FauxtonAPI.constants = constants;
-
-FauxtonAPI.dispatch = dispatcher.dispatch;
-
-FauxtonAPI.navigate = function (url, _opts) {
-  var options = _.extend({trigger: true}, _opts);
-  FauxtonAPI.router.navigate(url, options);
-  if (options.trigger) {
-    FauxtonAPI.router.trigger('trigger-update');
-  }
-};
-
-FauxtonAPI.beforeUnload = function () {
-  FauxtonAPI.router.beforeUnload.apply(FauxtonAPI.router, arguments);
-};
-
-FauxtonAPI.removeBeforeUnload = function () {
-  FauxtonAPI.router.removeBeforeUnload.apply(FauxtonAPI.router, arguments);
-};
-
-FauxtonAPI.addRoute = function (route) {
-  FauxtonAPI.router.route(route.route, route.name, route.callback);
-};
-
-var urlPaths = {};
-
-FauxtonAPI.registerUrls = function (namespace, urls) {
-  urlPaths[namespace] = urls;
-};
-
-FauxtonAPI.url = {
-  encode(name = "") {
-    // These special caracters are allowed by couch: _, $, (, ), +, -, and /
-    // From them only $ + and / are to be escaped in a URI component.
-    return (/[$+/]/g.test(name)) ? encodeURIComponent(name) : name;
-  },
-  decode(name = "") {
-    return (/[$+/]/g.test(name)) ? decodeURIComponent(name) : name;
-  }
-};
-
-//This is a little rough and needs some improvement. But the basic concept is there
-FauxtonAPI.urls = function (name, context) {
-  var interceptors = FauxtonAPI.getExtensions('urls:interceptors');
-  var url;
-
-  var args = arguments;
-  _.find(interceptors, function (interceptor) {
-    var out = interceptor.apply(null, args);
-
-    if (out) {
-      url = out;
-      return true;
-    }
-    return false;
-  });
-
-  if (!_.isUndefined(url)) { return url; }
-
-  if (!urlPaths[name]) {
-    console.error('could not find name ', name);
-    return '';
-  }
-
-  if (!urlPaths[name][context]) {
-    console.error('could not find context ', context);
-    return '';
-  }
-
-  args = Array.prototype.slice.call(arguments, 2);
-  url = urlPaths[name][context].apply(null, args);
-  return url;
-};
-
-// out-the-box Fauxton has only Views, but scripts extending Fauxton may introduce others (search indexes, geospatial
-// indexes, etc). This returns an array of the special design doc property names for the index types
-FauxtonAPI.getIndexTypePropNames = function () {
-  var indexTypes = FauxtonAPI.getExtensions('IndexTypes:propNames');
-  indexTypes.push('views');
-  return indexTypes;
-};
-
-export default FauxtonAPI;
diff --git a/app/core/authentication.js b/app/core/authentication.js
deleted file mode 100644
index c933aff..0000000
--- a/app/core/authentication.js
+++ /dev/null
@@ -1,54 +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.
-
-import FauxtonAPI from "./base";
-import Promise from 'bluebird';
-
-export const authenticate = (session, roles) => {
-  if (session.isAdminParty()) {
-    return true;
-  } else if (session.matchesRoles(roles)) {
-    return true;
-  }
-
-  throw new Error('Unable to authenticate');
-};
-
-export const authenticationDenied = () => {
-  let url = window.location.hash
-    .replace('#', '')
-    .replace('login?urlback=', '');
-
-  if (url) {
-    FauxtonAPI.navigate(`/login?urlback=${url}`, { replace: true });
-  }
-
-  FauxtonAPI.navigate(`/login`, { replace: true });
-};
-
-export const checkAccess = (roles = []) => {
-  return new Promise((resolve, reject) => {
-    return FauxtonAPI.session.getSession()
-      .then(() => {
-        if (authenticate(FauxtonAPI.session, roles)) {
-          resolve();
-          return;
-        }
-
-        reject();
-      })
-      .catch(err => {
-        reject(err);
-        authenticationDenied();
-      });
-  });
-};
diff --git a/app/core/base.js b/app/core/base.js
deleted file mode 100644
index 2278d84..0000000
--- a/app/core/base.js
+++ /dev/null
@@ -1,217 +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.
-
-import Backbone from "backbone";
-import _ from "lodash";
-
-var FauxtonAPI = {
-  //add default objects
-  router: {
-    navigate: function () {}
-  },
-
-  masterLayout: {},
-
-  // I haven't wrapped these dispatch methods in a action
-  // because I don't want to require fauxton/actions in this method.
-  addHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'ADD_NAVBAR_LINK',
-      link: link
-    });
-  },
-  showHeaderLinkBadge: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'SHOW_NAVBAR_LINK_BADGE',
-      link: link
-    });
-  },
-  hideHeaderLinkBadge: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'HIDE_NAVBAR_LINK_BADGE',
-      link: link
-    });
-  },
-
-  /**
-   * Displays a notification message. The message is only displayed for a few seconds.
-   * The option visibleTime can be provided to set for how long the message should be displayed.
-   *
-   * @param {object} options Options are of the form
-   * {
-   *  message: "string",
-   *  type: "success"|"error"|"info",
-   *  clear: true|false,
-   *  escape: true|false,
-   *  visibleTime: number
-   * }
-   */
-  addNotification: function (options) {
-    options = Object.assign({
-      msg: 'Notification Event Triggered!',
-      type: 'info',
-      escape: true,
-      clear: false
-    }, options);
-
-    if (FauxtonAPI.reduxDispatch) {
-      FauxtonAPI.reduxDispatch({
-        type: 'ADD_NOTIFICATION',
-        options: {
-          info: options
-        }
-      });
-    }
-  },
-
-  /**
-   * Shows a permanent notification message
-   *
-   * @param {object} message
-   */
-  showPermanentNotification: function (message) {
-    FauxtonAPI.reduxDispatch({
-      type: 'SHOW_PERMANENT_NOTIFICATION',
-      options: { msg: message }
-    });
-  },
-
-  config: function (options) {
-    return _.extend(this, options);
-  }
-};
-
-FauxtonAPI.Deferred = function () {
-  return $.Deferred();
-};
-
-FauxtonAPI.when = function (deferreds) {
-  if (deferreds instanceof Array) {
-    return $.when.apply(null, deferreds);
-  }
-
-  return $.when(deferreds);
-};
-
-FauxtonAPI.addonExtensions = {
-  initialize: function () {},
-  RouteObjects: {},
-  Views: {}
-};
-
-FauxtonAPI.addon = function (extra) {
-  return _.extend(_.clone(FauxtonAPI.addonExtensions), extra);
-};
-
-FauxtonAPI.View = Backbone.View.extend({
-  // This should return an array of promises, an empty array, or null
-  establish: function () {
-    return null;
-  },
-  loaderClassname: 'loader',
-  manage: true,
-
-  forceRender: function () {
-    this.hasRendered = false;
-  }
-});
-
-var caching = {
-  fetchOnce: function (opt) {
-    var options = _.extend({}, opt);
-
-    if (!this._deferred || this._deferred.state() === "rejected" || options.forceFetch) {
-      this._deferred = this.fetch();
-    }
-
-    return this._deferred;
-  }
-};
-
-FauxtonAPI.Model = Backbone.Model.extend({ });
-
-FauxtonAPI.Collection = Backbone.Collection.extend({ });
-
-_.each([FauxtonAPI.Model, FauxtonAPI.Collection], function (ctor) {
-  _.extend(ctor.prototype, caching);
-});
-
-var extensions = _.extend({}, Backbone.Events);
-// Can look at a remove function later.
-FauxtonAPI.registerExtension = function (name, view) {
-  if (!extensions[name]) {
-    extensions[name] = [];
-  }
-
-  extensions.trigger('add:' + name, view);
-  extensions[name].push(view);
-};
-
-FauxtonAPI.unRegisterExtension = function (name) {
-  var views = extensions[name];
-
-  if (!views) { return; }
-  extensions.trigger('remove:' + name, views);
-  delete extensions[name];
-};
-
-FauxtonAPI.getExtensions = function (name) {
-  var views = extensions[name];
-
-  if (!views) {
-    views = [];
-  }
-  return views;
-};
-
-FauxtonAPI.removeExtensionItem = function (name, view, cb) {
-  var views = extensions[name];
-  if (!views) { return; }
-
-  var _cb = arguments[arguments.length - 1];
-  if (_.isObject(view) && !cb) {
-    _cb = function (item) { return _.isEqual(item, view);};
-  }
-
-  views = _.filter(views, function (item) {
-    return !_cb(item);
-  });
-
-  extensions[name] = views;
-  extensions.trigger('removeItem:' + name, view);
-};
-
-FauxtonAPI.extensions = extensions;
-
-FauxtonAPI.setSession = function (newSession) {
-  FauxtonAPI.session = newSession;
-};
-
-FauxtonAPI.reducers = {};
-
-
-FauxtonAPI.addReducers = (reducers) => {
-  FauxtonAPI.reducers = {
-    ...FauxtonAPI.reducers,
-    ...reducers
-  };
-};
-
-FauxtonAPI.middlewares = [];
-FauxtonAPI.addMiddleware = (middleware) => {
-  // Basic validation
-  if (middleware && typeof middleware === 'function') {
-    FauxtonAPI.middlewares.push(middleware);
-  }
-};
-
-export default FauxtonAPI;
diff --git a/app/core/dispatcher.js b/app/core/dispatcher.js
deleted file mode 100644
index 2dbe0fd..0000000
--- a/app/core/dispatcher.js
+++ /dev/null
@@ -1,49 +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.
-
-import {findIndex} from 'lodash';
-
-const stores = [];
-let dispatchId = 0;
-
-export const register = (store) => {
-  if (typeof store !== "function") {
-    throw new Error("Store dispatch method must be a function");
-  }
-
-  dispatchId += 1;
-  stores.push(store);
-  store.dispatchId = dispatchId;
-  return dispatchId;
-};
-
-export const dispatch = (msg) => {
-  stores.forEach(store => {
-    store(msg);
-  });
-};
-
-export const unregister = (id) => {
-  const storeIndex = findIndex(stores, store => store.dispatchId === id);
-
-  if (storeIndex === -1) {
-    return;
-  }
-
-  stores.splice(storeIndex, 1);
-};
-
-export default {
-  register,
-  dispatch,
-  unregister
-};
diff --git a/app/core/routeObject.js b/app/core/routeObject.js
deleted file mode 100644
index eb17a60..0000000
--- a/app/core/routeObject.js
+++ /dev/null
@@ -1,91 +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.
-
-import ReactDOM from "react-dom";
-import Backbone from "backbone";
-import _ from "lodash";
-
-var RouteObject = function (options) {
-  this._options = options;
-  this.reactComponents = {};
-
-  this._configure(options || {});
-  this.initialize.apply(this, arguments);
-};
-
-/* How Route Object events work
-
-Its now very simple. We don't want it to do much. It creates a list of routes. Then each route callback must return
-a React component that will be rendered into the app
-
-*/
-
-// Piggy-back on Backbone's self-propagating extend function
-RouteObject.extend = Backbone.Model.extend;
-
-var routeObjectOptions = ["routes", "roles"];
-
-_.extend(RouteObject.prototype, {
-  // Should these be default vals or empty funcs?
-  routes: {},
-  route: function () {},
-  roles: [],
-  initialize: function () {}
-}, {
-
-  get: function (key) {
-    return _.isFunction(this[key]) ? this[key]() : this[key];
-  },
-
-  _configure: function (options) {
-    _.each(_.intersection(_.keys(options), routeObjectOptions), (key) => {
-      this[key] = options[key];
-    });
-  },
-
-  getRouteUrls: function () {
-    return _.keys(this.get('routes'));
-  },
-
-  hasRoute: function (route) {
-    if (this.get('routes')[route]) {
-      return true;
-    }
-    return false;
-  },
-
-  routeCallback: function (route, args) {
-    var routes = this.get('routes'),
-        routeObj = routes[route],
-        routeCallback;
-
-    if (typeof routeObj === 'object') {
-      routeCallback = this[routeObj.route];
-    } else {
-      routeCallback = this[routeObj];
-    }
-
-    return routeCallback.apply(this, args);
-  },
-
-  getRouteRoles: function (routeUrl) {
-    var route = this.get('routes')[routeUrl];
-
-    if ((typeof route === 'object') && route.roles) {
-      return route.roles;
-    }
-
-    return this.roles;
-  }
-
-});
-export default RouteObject;
diff --git a/app/core/router.js b/app/core/router.js
deleted file mode 100644
index 49e5e40..0000000
--- a/app/core/router.js
+++ /dev/null
@@ -1,116 +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.
-
-import {checkAccess} from "./authentication";
-import Backbone from "backbone";
-import _ from "lodash";
-
-var beforeUnloads = {};
-
-export default Backbone.Router.extend({
-  routes: {},
-  originalPageTitle: window.document.title,
-
-  beforeUnload: function (name, fn) {
-    beforeUnloads[name] = fn;
-  },
-
-  removeBeforeUnload: function (name) {
-    delete beforeUnloads[name];
-  },
-
-
-  navigate: function (fragment, options) {
-    let continueNav = true;
-    const msg = _.find(_.map(beforeUnloads, function (fn) { return fn(); }), function (beforeReturn) {
-      if (beforeReturn) { return true; }
-    });
-
-    if (msg) {
-      continueNav = window.confirm(msg);
-    }
-
-    if (options && options.redirect) {
-      return window.location = fragment;
-    }
-
-    if (continueNav) {
-      Backbone.Router.prototype.navigate(fragment, options);
-      this.updateWindowTitle(fragment);
-    }
-  },
-
-  updateWindowTitle: function(fragment) {
-    if (fragment.startsWith('#/')) {
-      window.document.title = this.originalPageTitle + ' - ' + fragment.substring(2);
-    } else if (fragment.startsWith('/') || fragment.startsWith('#')) {
-      window.document.title = this.originalPageTitle + ' - ' + fragment.substring(1);
-    } else {
-      window.document.title = this.originalPageTitle + ' - ' + fragment;
-    }
-  },
-
-  addModuleRouteObject: function (RouteObject) {
-    const that = this;
-    const routeUrls = RouteObject.prototype.getRouteUrls();
-
-    routeUrls.forEach(route => {
-      this.route(route, route.toString(), (...args) => {
-        const roles = RouteObject.prototype.getRouteRoles(route);
-
-        checkAccess(roles).then(() => {
-          if (!that.activeRouteObject || !that.activeRouteObject.hasRoute(route)) {
-            that.activeRouteObject = new RouteObject(route, args);
-          }
-
-          const routeObject = that.activeRouteObject;
-          const component = routeObject.routeCallback(route, args);
-          that.currentRouteOptions = {
-            selectedHeader: this.activeRouteObject.selectedHeader,
-            component,
-            roles,
-            route: route.toString()
-          };
-          that.trigger('new-component', this.currentRouteOptions);
-        }, () => {/* do nothing on reject*/ });
-      });
-    });
-  },
-
-  setModuleRoutes: function (addons) {
-    _.each(addons, (module) => {
-      if (module) {
-        module.initialize();
-        // This is pure routes the addon provides
-        if (module.RouteObjects) {
-          _.each(module.RouteObjects, this.addModuleRouteObject.bind(this));
-        }
-      }
-    });
-  },
-
-  initialize: function (addons) {
-    this.addons = addons;
-    // NOTE: This must be below creation of the layout
-    // FauxtonAPI header links and others depend on existence of the layout
-    this.setModuleRoutes(addons);
-
-    this.lastPages = [];
-    //keep last few pages visited in Fauxton
-    Backbone.history.on('route', function () {
-      this.lastPages.push(Backbone.history.fragment);
-      if (this.lastPages.length > 5) {
-        this.lastPages.shift();
-      }
-    }, this);
-  }
-});
diff --git a/app/core/store.js b/app/core/store.js
deleted file mode 100644
index 979ce0b..0000000
--- a/app/core/store.js
+++ /dev/null
@@ -1,30 +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.
-
-import Backbone from "backbone";
-import _ from "lodash";
-
-var Store = function () {
-  this.initialize.apply(this, arguments);
-  _.bindAll(this);
-};
-
-Store.extend = Backbone.Model.extend;
-_.extend(Store.prototype, Backbone.Events, {
-  triggerChange: function () {
-    this.trigger('change');
-  },
-
-  initialize: function () {}
-});
-
-export default Store;
diff --git a/app/core/utils.js b/app/core/utils.js
deleted file mode 100644
index d743107..0000000
--- a/app/core/utils.js
+++ /dev/null
@@ -1,147 +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.
-
-
-// This file creates a set of helper functions that will be loaded for all html
-// templates. These functions should be self contained and not rely on any
-// external dependencies as they are loaded prior to the application. We may
-// want to change this later, but for now this should be thought of as a
-// "purely functional" helper system.
-
-
-import _ from 'lodash';
-import param from 'jquery-param-fn';
-
-const utils = {
-
-  // Thanks to: http://stackoverflow.com/a/2880929
-  getParams: function (queryString) {
-    if (queryString) {
-      // I think this could be combined into one if
-      if (queryString.substring(0, 1) === '?') {
-        queryString = queryString.substring(1);
-      } else if (queryString.indexOf('?') > -1) {
-        queryString = queryString.split('?')[1];
-      }
-    }
-    const hash = window.location.hash.split('?')[1];
-    queryString = queryString || hash || window.location.search.substring(1);
-    const urlParams = {},
-          pl = /\+/g,  // Regex for replacing addition symbol with a space
-          search = /([^&=]+)=?([^&]*)/g,
-          decode = function (s) { return decodeURIComponent(s.replace(pl, ' ')); },
-          query = queryString;
-
-    if (queryString) {
-      let match;
-      while ((match = search.exec(query))) {
-        urlParams[decode(match[1])] = decode(match[2]);
-      }
-    }
-
-    return urlParams;
-  },
-
-  removeSpecialCharacters: function (name) {
-    return name.replace(/[^\w\s]/gi, '');
-  },
-
-  safeURLName: function (name = '') {
-    // These special caracters are allowed by couch: _, $, (, ), +, -, and /
-    // From them only $ + and / are to be escaped in a URI component.
-    // return (/[$+/]/g.test(name)) ? encodeURIComponent(name) : name;
-    return encodeURIComponent(name);
-  },
-
-  queryParams: function (obj) {
-    //Simulates jQuery.param()
-    return param(obj);
-  },
-
-  queryString: function (obj) {
-    //Similar to queryParams() but skips object properties
-    //that are undefined
-    Object.keys(obj).forEach((key) => {
-      if (obj[key] === undefined) {
-        delete obj[key];
-      }
-    });
-    return param(obj);
-  },
-
-  getDocTypeFromId: function (id) {
-    if (id && /^_design\//.test(id)) {
-      return 'design doc';
-    }
-
-    return 'doc';
-  },
-
-  isSystemDatabase: function (id) {
-    return (/^_/).test(id);
-  },
-
-  // Need this to work around backbone router thinking _design/foo
-  // is a separate route. Alternatively, maybe these should be
-  // treated separately. For instance, we could default into the
-  // json editor for docs, or into a ddoc specific page.
-  getSafeIdForDoc: function (id) {
-    if (utils.getDocTypeFromId(id) === 'design doc') {
-      const ddoc = id.replace(/^_design\//, '');
-      return '_design/' + utils.safeURLName(ddoc);
-    }
-
-    return utils.safeURLName(id);
-  },
-
-  // a pair of simple local storage wrapper functions. These ward against problems getting or
-  // setting (e.g. local storage full) and allow you to get/set complex data structures
-  localStorageSet: function (key, value) {
-    if (_.isObject(value) || _.isArray(value)) {
-      value = JSON.stringify(value);
-    }
-    let success = true;
-    try {
-      window.localStorage.setItem(key, value);
-    } catch (e) {
-      success = false;
-    }
-    return success;
-  },
-
-  localStorageGet: function (key) {
-    let data;
-    if (_.has(window.localStorage, key)) {
-      data = window.localStorage[key];
-      try {
-        return JSON.parse(data);
-      } catch (e) {
-        return data;
-      }
-    }
-    return data;
-  },
-
-  stripHTML: function (str) {
-
-    if (!document) {
-      //not in browser, this should be ignored when testing in jest
-      return str;
-    }
-
-    const tmpElement = document.createElement('div');
-    tmpElement.innerHTML = str;
-    return tmpElement.textContent || tmpElement.innerText;
-  }
-};
-
-export default utils;
diff --git a/app/helpers.js b/app/helpers.js
deleted file mode 100644
index 53bef2a..0000000
--- a/app/helpers.js
+++ /dev/null
@@ -1,98 +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.
-
-
-// This file creates a set of helper functions that will be loaded for all html
-// templates. These functions should be self contained and not rely on any
-// external dependencies as they are loaded prior to the application. We may
-// want to change this later, but for now this should be thought of as a
-// "purely functional" helper system.
-
-import constants from "./constants";
-import app from "./initialize";
-import utils from "./core/utils";
-import moment from "moment";
-import url from "url";
-import {get} from "./core/ajax";
-import _ from 'lodash';
-
-var Helpers = {};
-
-Helpers.removeSpecialCharacters = utils.removeSpecialCharacters;
-
-Helpers.safeURL = utils.safeURLName;
-
-Helpers.imageUrl = function (path) {
-  // TODO: add dynamic path for different deploy targets
-  return path;
-};
-
-Helpers.getDocUrl = function (key) {
-  return (_.has(constants.DOC_URLS, key)) ? constants.DOC_URLS[key] : '#';
-};
-
-// File size pretty printing, taken from futon.format.js
-Helpers.formatSize = function (size, decimals = 1) {
-  var jump = 512;
-  if (size < jump) return size + " bytes";
-  var units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
-  var i = 0;
-  while (size >= jump && i < units.length) {
-    i += 1;
-    size /= 1024;
-  }
-  return size.toFixed(decimals) + ' ' + units[i - 1];
-};
-
-Helpers.formatDate = function (timestamp) {
-  return moment(timestamp, 'X').format('MMM Do, h:mm:ss a');
-};
-Helpers.getDateFromNow = function (timestamp) {
-  return moment(timestamp, 'X').fromNow();
-};
-
-Helpers.escapeJQuerySelector = function (selector) {
-  return selector && selector.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g, "\\$&");
-};
-
-Helpers.getApiUrl = endpointRoute => {
-  if (app.host.endsWith('/') && endpointRoute.startsWith("/")) {
-    endpointRoute = endpointRoute.substr(1);
-  }
-  return url.resolve(window.location.href, app.host + endpointRoute);
-};
-
-Helpers.getServerUrl = endpointRoute => {
-  if (app.host.endsWith('/') && endpointRoute.startsWith("/")) {
-    endpointRoute = endpointRoute.substr(1);
-  }
-  return app.host + endpointRoute;
-};
-
-Helpers.getRootUrl = ({origin, pathname} = window.location) => {
-  return url.resolve(origin + pathname, app.host);
-};
-
-Helpers.getUUID = function (count = 1) {
-  const url = Helpers.getServerUrl(`/_uuids?count=${count}`);
-  return get(url);
-};
-
-/**
- * Determine if the current application is running on IE10 or IE11
- * @returns {boolean} True if on IE10 or IE11. Otherwise false.
- */
-Helpers.isIE1X = function() {
-  return document.documentMode == 11 || document.documentMode == 10;
-};
-
-export default Helpers;
diff --git a/app/initialize.js.underscore b/app/initialize.js.underscore
deleted file mode 100644
index 9b2014d..0000000
--- a/app/initialize.js.underscore
+++ /dev/null
@@ -1,29 +0,0 @@
-/* eslint-disable */
-
-// 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.
-
-/*
- * ::WARNING::
- * THIS IS A GENERATED FILE. DO NOT EDIT.
- */
-
-// Provide a global location to place configuration settings and module
-// creation.
-export default {
-  // The root path to run the application.
-  root: "<%= root %>",
-  version: "<%= version %>",
-  // Host is used as prefix for urls
-  host: "<%= host %>",
-  i18n: <%= i18n %>
-};
diff --git a/app/load_addons.js.underscore b/app/load_addons.js.underscore
deleted file mode 100644
index ca6593b..0000000
--- a/app/load_addons.js.underscore
+++ /dev/null
@@ -1,27 +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.
-
-
-/*
- * ::WARNING::
- * THIS IS A GENERATED FILE. DO NOT EDIT.
- */
-
-<% deps.forEach(function (dep, i) { %>
-<%= 'import { default as addon_' + i + ' } from "' + dep + '";' %>
-<% }); %>
-
-export default [
-  <% deps.forEach(function (dep, i) { %>
-    <%= 'addon_' + i + ',' %>
-  <% }); %>
-];
diff --git a/app/main.js b/app/main.js
deleted file mode 100644
index 4089e77..0000000
--- a/app/main.js
+++ /dev/null
@@ -1,101 +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.
-
-import app from './app';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from './core/api';
-import LoadAddons from './load_addons';
-import Backbone from 'backbone';
-import $ from 'jquery';
-import AppWrapper from './addons/fauxton/appwrapper';
-
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-
-FauxtonAPI.addMiddleware(thunk);
-const store = createStore(
-  combineReducers(FauxtonAPI.reducers),
-  applyMiddleware(...FauxtonAPI.middlewares)
-);
-FauxtonAPI.reduxDispatch = (action) => {
-  store.dispatch(action);
-};
-FauxtonAPI.reduxState = () => {
-  return store.getState();
-};
-
-app.addons = LoadAddons;
-FauxtonAPI.router = app.router = new FauxtonAPI.Router(app.addons);
-// Trigger the initial route and enable HTML5 History API support, set the
-// root folder to '/' by default.  Change in app.js.
-Backbone.history.start({ pushState: false, root: app.root });
-
-// feature detect IE
-if ('ActiveXObject' in window) {
-  $.ajaxSetup({ cache: false });
-}
-
-// Walks up the element tree to look for a link to see if it is part
-// of the click nodes
-const findLink = (target) => {
-  if (!target) {
-    return null;
-  }
-
-  if (target.tagName === 'A') {
-    return target;
-  }
-  return findLink(target.parentNode);
-};
-// All navigation that is relative should be passed through the navigate
-// method, to be processed by the router. If the link has a `data-bypass`
-// attribute, bypass the delegation completely.
-document.addEventListener("click", evt => {
-
-  const target = findLink(evt.target);
-  if (!target) {
-    return;
-  }
-  //"a:not([data-bypass])"
-  const dataBypass = target.getAttribute('data-bypass');
-  if (dataBypass) {
-    return;
-  }
-
-  // Get the absolute anchor href.
-  const href = { prop: target.href, attr: target.getAttribute("href") };
-  if (!href.prop) {
-    return;
-  }
-
-  // Get the absolute root
-  const root = location.protocol + "//" + location.host;
-
-  // Ensure the root is part of the anchor href, meaning it's relative
-  if (href.prop && href.prop.slice(0, root.length) === root) {
-    // Stop the default event to ensure the link will not cause a page
-    // refresh.
-    evt.preventDefault();
-
-    //User app navigate so that navigate goes through a central place
-    app.router.navigate(href.attr, true);
-  }
-});
-
-ReactDOM.render(
-  <Provider store={store}>
-    <AppWrapper router={app.router}/>
-  </Provider>,
-  document.getElementById('app')
-);
diff --git a/assets/fonts/FontAwesome.otf b/assets/fonts/FontAwesome.otf
deleted file mode 100644
index 7012545..0000000
--- a/assets/fonts/FontAwesome.otf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/Gemfile b/assets/fonts/Gemfile
deleted file mode 100644
index 8af80b1..0000000
--- a/assets/fonts/Gemfile
+++ /dev/null
@@ -1,6 +0,0 @@
-source 'https://rubygems.org'
-
-gem 'fontcustom', 
-:git => 'https://github.com/benkeen/fontcustom.git',
-:branch => 'master'
-
diff --git a/assets/fonts/README.md b/assets/fonts/README.md
deleted file mode 100644
index 02a11b8..0000000
--- a/assets/fonts/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-*WARNING:  this is a temporary solution for adding icons to the Icon Font. This will become a grunt task eventually.*
-
-This is a temp solution till Fontcustom fixes this [BUG](https://github.com/FontCustom/fontcustom/issues/172)<br>
-
-### Installation
-
-1. Requires **Bundler.io**, **Ruby 1.9.2+**, **FontForge** with Python scripting.
-
-```sh
-# On Mac
-$ gem install bundler
-$ brew install fontforge eot-utils
-$ cd [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/fonts
-$ bundle
-```
-
-That should install the gem in a path like below:
-/Users/[USERNAME]/.rvm/gems/[RUBYVERSION]/bundler/gems/fontcustom
-
-2. Update `fontcustom.yml` with the correct paths where it says `PUT_YOUR_PATH_HERE`.
-
-3. Update the `font_name` value to generate a new filename for the font files. This is necessary for browser cache-busting.
-
-4. Add your new font(s) in SVG format to the `assets/icons` folder.
-
-5. If Gemfile.lock exists, delete it. The run `bundle install`
-
-6. Run the command `bundle exec fontcustom compile`. That generates the following:
-
-- an `icons.less` file [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/less
-- a `fauxtonicon-preview.html` preview [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/fonts/styleguide
-- font files in [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/fonts/
-  * `[font name].eot` 
-  * `[font name].svg`
-  * `[font name].ttf`
-  * `[font name].woff` 
-
-7. Delete the old fauxtoniconX.*** files, and ./styleguide/fauxtoniconX-preview.html file.
-
-For more info on Fontcustom, check out their documenation: [Fontcustom documentation](https://github.com/FontCustom/fontcustom)
-
-For more info on Bundler, check out their documentation:  [Bundler documentation](http://bundler.io)
-
-
-[Licenses](https://github.com/FontCustom/fontcustom/blob/master/LICENSES.txt)
diff --git a/assets/fonts/fauxtonicon5.eot b/assets/fonts/fauxtonicon5.eot
deleted file mode 100644
index 2db254f..0000000
--- a/assets/fonts/fauxtonicon5.eot
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fauxtonicon5.svg b/assets/fonts/fauxtonicon5.svg
deleted file mode 100644
index 7a9d1a7..0000000
--- a/assets/fonts/fauxtonicon5.svg
+++ /dev/null
@@ -1,729 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2016-5-16: Created with FontForge (http://fontforge.org)
--->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
-<metadata>
-Created by FontForge 20150302 at Mon May 16 09:51:56 2016
- By Ben Keen
-Copyright (c) 2016, Ben Keen
-</metadata>
-<defs>
-<font id="fauxtonicon5" horiz-adv-x="512" >
-  <font-face 
-    font-family="fauxtonicon5"
-    font-weight="400"
-    font-stretch="normal"
-    units-per-em="512"
-    panose-1="2 0 5 9 0 0 0 0 0 0"
-    ascent="448"
-    descent="-64"
-    bbox="-0.0730828 -64.6562 585.143 448.515"
-    underline-thickness="25.6"
-    underline-position="-51.2"
-    unicode-range="U+F100-F177"
-  />
-    <missing-glyph />
-    <glyph glyph-name="uniF108" unicode="&#xf108;" 
-d="M219.648 412.16c39.5944 0 76.2874 -9.89876 110.079 -29.6963c33.7923 -19.7975 60.4163 -46.4215 79.8721 -79.8721c19.4564 -33.4505 29.1846 -70.1439 29.1846 -110.08c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08
-c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08
-c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963zM256 55.8076v54.2725c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.75521 2.55957 -6.14453 2.55957h-54.7842
-c-2.73047 0 -4.94889 -0.85319 -6.65527 -2.55957c-1.70703 -1.70703 -2.73112 -3.92578 -3.07227 -6.65625v-54.2725c0 -2.73047 1.02409 -4.94889 3.07227 -6.65527c2.04753 -1.70703 4.26595 -2.73112 6.65527 -3.07227h54.7842
-c2.38932 0 4.4375 1.02409 6.14453 3.07227c1.70638 2.04753 2.55957 4.26595 2.55957 6.65527zM255.488 154.112l5.12012 177.151c0 2.38932 -1.02409 4.09603 -3.07227 5.12012c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-62.9756
-c-2.73112 0 -4.94987 -0.853516 -6.65625 -2.56055c-2.04818 -1.02409 -3.07227 -2.73079 -3.07227 -5.12012l5.12012 -177.151c0 -2.04818 0.853516 -3.75488 2.56055 -5.12012c1.70638 -1.36523 4.0957 -2.04785 7.16797 -2.04785h52.7354
-c2.73112 0 4.94987 0.682617 6.65625 2.04785s2.73047 3.07194 3.07227 5.12012z" />
-    <glyph glyph-name="uniF12A" unicode="&#xf12a;" 
-d="M201.216 89.5996v-68.6074c0 -3.07227 -1.19466 -5.80306 -3.58398 -8.19238s-4.94922 -3.41341 -7.67969 -3.07227h-68.6084c-3.07161 0 -5.80208 1.02409 -8.19141 3.07227s-3.58398 4.77897 -3.58398 8.19238v68.6074c0 3.07227 1.19466 5.80306 3.58398 8.19238
-s5.11979 3.41341 8.19141 3.07227h68.6084c2.73047 0 5.29036 -1.02409 7.67969 -3.07227s3.58398 -4.77897 3.58398 -8.19238zM291.328 261.12c0 -10.2402 -1.36523 -19.7975 -4.0957 -28.6719c-2.73112 -8.875 -6.14453 -16.2139 -10.2402 -22.0166
-c-4.09635 -5.80273 -9.38704 -11.4346 -15.8721 -16.8955c-6.48568 -5.46159 -11.9469 -9.72819 -16.3838 -12.7998c-4.4375 -3.07227 -10.2402 -6.3151 -17.4082 -9.72852c-7.85091 -4.4375 -14.3363 -10.752 -19.4561 -18.9434
-c-5.11979 -8.19206 -7.67969 -14.5068 -7.67969 -18.9443c0 -3.41341 -1.19466 -6.48535 -3.58398 -9.21582c-2.38932 -2.73112 -5.12012 -4.26725 -8.19238 -4.6084h-68.6084c-2.73047 0 -5.11979 1.70671 -7.16797 5.12012
-c-2.04753 3.41341 -3.07129 6.9974 -3.07129 10.752v13.3125c0 15.7012 6.31445 30.5492 18.9434 44.5439c12.6296 13.9941 26.1123 24.234 40.4482 30.7197c11.2643 5.11979 19.2858 10.5811 24.0645 16.3838s7.16797 12.9707 7.16797 21.5039
-c0 7.85091 -4.4375 14.8483 -13.3125 20.9922c-8.87435 6.14388 -19.1143 9.21582 -30.7197 9.21582c-12.2884 0 -22.5283 -2.73047 -30.7197 -8.19141c-6.82682 -4.77865 -17.0671 -15.7015 -30.7207 -32.7686c-2.38932 -3.07161 -5.29069 -4.60742 -8.7041 -4.60742
-c-2.38932 0 -4.77865 0.682617 -7.16797 2.04785l-46.5918 35.8398c-2.73047 2.04818 -4.26628 4.4375 -4.60742 7.16797c-0.341797 2.73047 0.169922 5.46094 1.53516 8.19141c30.3789 50.5176 74.5817 75.7764 132.608 75.7764c15.36 0 30.7201 -2.90137 46.0801 -8.7041
-s29.1839 -13.6533 41.4717 -23.5518c12.2884 -9.89844 22.3577 -22.1865 30.208 -36.8643c7.85091 -14.6771 11.7764 -29.6956 11.7764 -45.0557z" />
-    <glyph glyph-name="uniF133" unicode="&#xf133;" 
-d="M0 192.512l75.7764 76.2881l180.224 179.712l75.7764 -75.7754l-179.712 -180.225l179.712 -180.224l-75.7764 -75.7764l-180.224 180.225z" />
-    <glyph glyph-name="uniF107" unicode="&#xf107;" 
-d="M146.432 92.1602v-64c0 -5.11979 -1.87728 -9.38639 -5.63184 -12.7998c-3.75456 -3.41341 -8.02116 -5.29102 -12.7998 -5.63281h-73.2158c-4.77865 0 -9.04525 1.8776 -12.7998 5.63281c-3.75521 3.75456 -5.63281 8.02116 -5.63281 12.7998v64
-c0 4.77865 1.8776 9.04525 5.63281 12.7998c3.75456 3.75456 8.02116 5.46126 12.7998 5.12012h73.2158c5.11979 0 9.38639 -1.70671 12.7998 -5.12012s5.29069 -7.68001 5.63184 -12.7998zM154.624 393.728l-7.67969 -219.647
-c-0.341797 -4.77865 -2.38997 -9.04525 -6.14453 -12.7998s-8.02116 -5.46126 -12.7998 -5.12012h-73.2158c-4.77865 0 -9.04525 1.70671 -12.7998 5.12012c-3.75521 3.41341 -5.80339 7.68001 -6.14453 12.7998l-7.67969 219.647
-c-0.341146 4.7793 1.19466 9.04622 4.60742 12.8008c3.41341 3.75456 7.68034 5.63184 12.8008 5.63184h91.6475c4.77865 0 9.04525 -1.87728 12.7998 -5.63184c3.75521 -3.75456 5.29134 -8.02148 4.6084 -12.8008z" />
-    <glyph glyph-name="uniF138" unicode="&#xf138;" 
-d="M512 245.76v-226.815c0 -12.6296 -4.43717 -23.3815 -13.3115 -32.2559c-8.875 -8.875 -19.6273 -13.4831 -32.2568 -13.8242h-420.863c-12.2884 0 -23.0407 4.60807 -32.2568 13.8242c-9.21549 9.21549 -13.6527 19.9674 -13.3115 32.2559v226.815
-c8.5332 -9.55729 18.0905 -17.9199 28.6719 -25.0879c68.9492 -46.7624 116.395 -79.5303 142.336 -98.3037c10.9225 -8.19206 19.6266 -14.5068 26.1123 -18.9443c6.48503 -4.4375 15.5303 -9.04557 27.1357 -13.8242s22.0163 -6.99707 31.2324 -6.65527h1.02344
-c9.55729 0 19.9681 2.21842 31.2324 6.65527c11.2637 4.4375 20.3089 9.04557 27.1357 13.8242s15.5309 11.0934 26.1123 18.9443c32.4264 23.2103 79.8717 55.9782 142.336 98.3037c10.9225 7.50911 20.4798 15.8717 28.6719 25.0879zM512 329.728
-c0 -15.0182 -4.60807 -29.3542 -13.8242 -43.0078c-9.21615 -13.653 -20.8213 -25.429 -34.8154 -35.3281c-71.6803 -49.8346 -116.395 -80.7253 -134.145 -92.6719c-1.70638 -1.36523 -5.63151 -4.2666 -11.7754 -8.7041
-c-6.14453 -4.43685 -11.2646 -8.19141 -15.3604 -11.2637c-4.09635 -3.07227 -9.04557 -6.14421 -14.8477 -9.21582c-5.80273 -3.07227 -11.4349 -5.63216 -16.8965 -7.67969c-5.46159 -2.04818 -10.0697 -2.90169 -13.8242 -2.56055h-1.02344
-c-4.09635 0 -8.70443 0.853516 -13.8242 2.56055c-5.11979 1.70638 -10.752 4.26628 -16.8965 7.67969c-6.14388 3.41341 -11.0931 6.48535 -14.8477 9.21582s-8.87467 6.48503 -15.3604 11.2637c-6.48503 4.77865 -10.4102 7.68001 -11.7754 8.7041
-c-17.4082 11.9466 -42.4964 29.1839 -75.2646 51.7119c-32.7676 22.528 -52.2233 36.1813 -58.3672 40.96c-11.9466 7.85091 -23.04 18.7738 -33.2803 32.7686s-15.5309 27.1361 -15.8721 39.4238c0 14.6771 3.92546 26.9652 11.7764 36.8643
-c7.85026 9.89844 19.1143 14.8477 33.792 14.8477h420.863c12.2884 0 22.8698 -4.43717 31.7441 -13.3115c8.875 -8.875 13.4831 -19.6273 13.8242 -32.2568z" />
-    <glyph glyph-name="uniF146" unicode="&#xf146;" 
-d="M208.766 -59.6162c-46.3301 0 -89.874 18.0889 -122.595 50.8799c-32.7598 32.7432 -50.8096 76.2324 -50.8096 122.586c0.0302734 46.3223 18.0498 89.8584 50.8096 122.58l175.544 171.749c47.1777 47.2002 130.493 47.3848 178.093 -0.253906
-c49.1084 -49.1934 49.1084 -129.184 0 -178.322l-157.979 -154.101c-30.4199 -30.4355 -80.4199 -30.4961 -111.148 0.276367c-30.7285 30.79 -30.7285 80.7598 0 111.479l61.1465 61.1553l44.583 -44.582l-61.1465 -61.1475
-c-4.04199 -4.06348 -4.61914 -8.74414 -4.61914 -11.1465c0 -2.43066 0.577148 -7.11133 4.61914 -11.1758c8.06641 -8.03613 14.2168 -8.03613 22.291 0l157.888 154.123c24.3232 24.292 24.3232 64.2871 -0.24707 88.8965c-23.8301 23.8311 -65.334 23.8311 -89.165 0
-l-175.529 -171.766c-20.5908 -20.6211 -32.082 -48.3018 -32.082 -77.7656c0 -29.4971 11.4912 -57.2051 32.3281 -78.0195c41.6963 -41.7354 114.359 -41.7354 156.039 0l78.8203 78.8203l44.5527 -44.5674l-78.8213 -78.8193
-c-32.7275 -32.7617 -76.2568 -50.8799 -122.571 -50.8799z" />
-    <glyph glyph-name="uniF137" unicode="&#xf137;" 
-d="M475.648 18.9443v219.136c-6.14453 -6.82682 -12.8008 -13.1416 -19.9688 -18.9443c-50.8587 -38.9121 -91.4772 -70.9974 -121.855 -96.2559c-9.55729 -8.19206 -17.4079 -14.6774 -23.5518 -19.4561c-6.14453 -4.77865 -14.3366 -9.38672 -24.5762 -13.8242
-c-10.2402 -4.43685 -19.9684 -6.65527 -29.1846 -6.65527h-1.02344c-8.875 0 -18.6032 2.21842 -29.1846 6.65527c-10.5814 4.4375 -18.7734 9.04557 -24.5762 13.8242c-5.80208 4.77865 -13.6527 11.264 -23.5518 19.4561
-c-30.0371 25.2585 -70.6556 57.3438 -121.855 96.2559c-7.16797 5.80273 -13.8242 12.1175 -19.9688 18.9443v-219.136c0 -2.73112 1.02409 -4.94987 3.07227 -6.65625c2.04818 -1.70703 4.09635 -2.56055 6.14453 -2.56055h420.863
-c2.38932 0 4.4375 0.853516 6.14453 2.56055c1.70638 1.70638 2.73047 3.92513 3.07227 6.65625zM475.648 318.976v7.16797l-0.512695 3.58398l-0.511719 3.58398l-1.53613 2.56055l-2.55957 2.04785l-4.09668 1.02441h-420.863
-c-2.38932 0 -4.4375 -1.02409 -6.14453 -3.07227c-1.70638 -2.04818 -2.73047 -4.09635 -3.07227 -6.14453c0 -32.0853 13.9948 -59.221 41.9844 -81.4072c36.8639 -29.0137 75.0934 -59.2217 114.688 -90.624c1.36523 -0.682943 4.77832 -3.41374 10.2393 -8.19238
-c5.46159 -4.77865 9.72852 -8.36263 12.8008 -10.752c3.07161 -2.38932 7.33822 -5.46126 12.7998 -9.21582c5.46094 -3.75456 10.2396 -6.31445 14.3359 -7.67969c4.0957 -1.36589 8.19173 -2.2194 12.2881 -2.56055h1.02344c3.75456 0 7.85059 0.853516 12.2881 2.56055
-c4.4375 1.70638 9.21615 4.26628 14.3359 7.67969c5.12044 3.41341 9.38704 6.48535 12.7998 9.21582c3.41341 2.73047 7.68034 6.31445 12.8008 10.752c5.11979 4.4375 8.53288 7.16829 10.2393 8.19238c39.5951 31.4023 77.8245 61.6104 114.688 90.624
-c10.2402 8.19206 19.7975 19.2852 28.6719 33.2793c8.875 13.9948 13.3125 26.4535 13.3125 37.376zM512 329.728v-310.783c0 -12.6296 -4.43717 -23.3815 -13.3115 -32.2559c-8.875 -8.875 -19.6273 -13.4831 -32.2568 -13.8242h-420.863
-c-12.2884 0 -23.0407 4.60807 -32.2568 13.8242c-9.21549 9.21549 -13.6527 19.9674 -13.3115 32.2559v310.783c0 12.6296 4.43717 23.3818 13.3115 32.2568c8.875 8.87435 19.6273 13.3115 32.2568 13.3115h420.863c12.6296 0 23.3818 -4.43717 32.2568 -13.3115
-c8.87435 -8.875 13.3115 -19.6273 13.3115 -32.2568z" />
-    <glyph glyph-name="uniF126" unicode="&#xf126;" 
-d="M456 339.429c5.33333 -5.33333 9.90462 -12.5716 13.7139 -21.7148c3.8099 -9.14258 5.71484 -17.5234 5.71484 -25.1426v-329.143c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8096 -8 -19.4287 -8h-384c-7.61914 0 -14.0954 2.66667 -19.4287 8
-s-8 11.8096 -8 19.4287v457.143c0 7.61914 2.66667 14.0954 8 19.4287s11.8096 8 19.4287 8h256c7.61914 0 16 -1.90462 25.1426 -5.71387c9.14323 -3.8099 16.3815 -8.38151 21.7148 -13.7148zM329.143 409.143v-107.429h107.429
-c-1.90495 5.52409 -4 9.42904 -6.28516 11.7148l-89.4287 89.4287c-2.28581 2.28581 -6.19076 4.38086 -11.7148 6.28516zM438.857 -27.4287v292.571h-118.857c-7.61914 0 -14.0954 2.66667 -19.4287 8s-8 11.8096 -8 19.4287v118.857h-219.429v-438.857h365.715z
-M173.714 228.571c1.52409 2.09505 3.52409 3.28548 6 3.57129c2.47656 0.285807 4.76237 -0.333008 6.85742 -1.85645l14.5713 -10.8574c2.0957 -1.52409 3.28613 -3.52409 3.57129 -6c0.285807 -2.47656 -0.333008 -4.76237 -1.85645 -6.85742l-52 -69.4287l52 -69.4287
-c1.52344 -2.09505 2.14225 -4.38053 1.85645 -6.85645c-0.285156 -2.47656 -1.47559 -4.47656 -3.57129 -6l-14.5713 -10.8574c-2.09505 -1.52409 -4.38086 -2.14323 -6.85742 -1.85742c-2.47591 0.285807 -4.47591 1.47624 -6 3.57129l-64.5713 86
-c-2.66667 3.61914 -2.66667 7.23828 0 10.8574zM402.857 142.571c2.66667 -3.61914 2.66667 -7.23828 0 -10.8574l-64.5713 -86c-1.52409 -2.09505 -3.52409 -3.28548 -6 -3.57129c-2.47656 -0.285807 -4.76237 0.333333 -6.85742 1.85742l-14.5713 10.8574
-c-2.0957 1.52344 -3.28613 3.52344 -3.57129 6c-0.285807 2.47591 0.333008 4.76139 1.85645 6.85645l52 69.4287l-52 69.4287c-1.52344 2.09505 -2.14225 4.38086 -1.85645 6.85742c0.285156 2.47591 1.47559 4.47591 3.57129 6l14.5713 10.8574
-c2.09505 1.52344 4.38086 2.14225 6.85742 1.85645c2.47591 -0.285807 4.47591 -1.47624 6 -3.57129zM225.714 10.8574c-2.47591 0.380859 -4.42806 1.61882 -5.85645 3.71387c-1.42904 2.09505 -1.9528 4.38086 -1.57129 6.85742l39.4277 237.429
-c0.38151 2.47591 1.61979 4.42806 3.71484 5.85645c2.09505 1.42904 4.38086 1.95312 6.85742 1.57227l18 -2.85742c2.47591 -0.380859 4.42806 -1.61914 5.85645 -3.71484c1.42904 -2.09505 1.9528 -4.38053 1.57129 -6.85645l-39.4277 -237.429
-c-0.38151 -2.47656 -1.61979 -4.42904 -3.71484 -5.85742s-4.38086 -1.95215 -6.85742 -1.57129z" />
-    <glyph glyph-name="uniF121" unicode="&#xf121;" 
-d="M0 282.624l75.7764 75.7764l180.224 -179.712l180.224 179.712l75.7764 -75.7764l-256 -256l-75.7764 75.7764z" />
-    <glyph glyph-name="uniF120" unicode="&#xf120;" 
-d="M292.352 247.296c0 -4.77865 -1.70638 -9.04525 -5.11914 -12.7998l-128 -128c-3.75521 -3.75456 -8.02214 -5.63184 -12.8008 -5.63184s-9.04525 1.87728 -12.7998 5.63184l-128 128c-3.75456 3.75456 -5.63184 8.02116 -5.63184 12.7998
-s1.87728 9.04525 5.63184 12.7998c3.75456 3.75456 8.02116 5.63184 12.7998 5.63184h256c4.77865 0 9.04557 -1.87728 12.8008 -5.63184c3.75456 -3.75456 5.46094 -8.02116 5.11914 -12.7998z" />
-    <glyph glyph-name="uniF144" unicode="&#xf144;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM93.1836 163.328l107.009 -107.008l52.7354 53.248l165.889 165.888l-52.7363 53.248l-165.888 -166.4
-l-54.2725 54.2725z" />
-    <glyph glyph-name="uniF122" unicode="&#xf122;" 
-d="M192 416.768h128v-128h-128v128zM192 256.512h128v-128h-128v128zM192 96.7676h128v-128.512h-128v128.512z" />
-    <glyph glyph-name="uniF11E" unicode="&#xf11e;" 
-d="M466.432 193.024l-228.863 -229.376l-228.353 229.376l80.8965 80.8955l90.624 -90.1123v237.568h114.176v-237.568l90.1123 89.6006z" />
-    <glyph glyph-name="uniF14E" unicode="&#xf14e;" 
-d="M329.216 220.16v-18.4326c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-100.352v-100.352c0 -2.73047 -0.853516 -4.94922 -2.56055 -6.65625c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957
-h-18.4316c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957c-1.70638 1.70703 -2.55957 3.92578 -2.55957 6.65625v100.352h-100.353c-2.73047 0 -4.94889 0.853516 -6.65527 2.56055c-1.70703 1.70638 -2.56055 3.9248 -2.56055 6.65527v18.4326
-c0 2.38932 0.853516 4.43717 2.56055 6.14355c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055h100.353v100.863c0 2.73112 0.85319 4.94987 2.55957 6.65625c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h18.4316c2.73112 0 4.94987 -0.853516 6.65625 -2.56055
-c1.70703 -1.70638 2.56055 -3.92513 2.56055 -6.65625v-100.863h100.352c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.9248 2.55957 -6.65527v0.511719zM365.568 92.1602v237.567c0 12.6296 -4.4375 23.3818 -13.3125 32.2568
-c-8.87435 8.87435 -19.6263 13.3115 -32.2559 13.3115h-237.568c-12.6289 0 -23.3809 -4.43717 -32.2559 -13.3115c-8.87435 -8.875 -13.4824 -19.6273 -13.8242 -32.2568v-237.567c0 -12.6296 4.60807 -23.5524 13.8242 -32.7686
-c9.21615 -9.21549 19.9681 -13.6527 32.2559 -13.3115h237.568c12.6296 0 23.3815 4.43717 32.2559 13.3115c8.875 8.875 13.3125 19.7979 13.3125 32.7686zM402.432 329.728v-237.567c0 -22.8691 -8.02116 -42.3252 -24.0635 -58.3682
-c-16.043 -16.043 -35.499 -24.0645 -58.3682 -24.0645h-237.568c-22.8691 0 -42.3249 8.02148 -58.3672 24.0645c-16.043 16.043 -24.0645 35.499 -24.0645 58.3682v237.567c0 22.528 8.02148 41.8135 24.0645 57.8564c16.0423 16.043 35.498 24.235 58.3672 24.5762
-h237.568c22.528 0 41.984 -8.19206 58.3682 -24.5762s24.4053 -35.6696 24.0635 -57.8564z" />
-    <glyph glyph-name="uniF100" unicode="&#xf100;" 
-d="M292.352 46.0801h183.297v36.8643h-183.297v-36.8643zM182.784 192.512h292.864v36.3525h-292.864v-36.3525zM365.568 338.944h110.08v36.3516h-110.08v-36.3516zM512 100.864v-72.7041c0 -5.11979 -1.87728 -9.38639 -5.63184 -12.7998
-c-3.75456 -3.41341 -8.02116 -5.29102 -12.7998 -5.63281h-475.137c-5.11979 0 -9.38639 1.8776 -12.7998 5.63281c-3.41341 3.75456 -5.29069 8.02116 -5.63184 12.7998v72.7041c0 5.11979 1.87728 9.55697 5.63184 13.3115
-c3.75456 3.75456 8.02116 5.46126 12.7998 5.12012h475.137c5.11979 0 9.38639 -1.70671 12.7998 -5.12012s5.29069 -7.85059 5.63184 -13.3115zM512 247.296v-73.2158c0 -4.77865 -1.87728 -9.04525 -5.63184 -12.7998s-8.02116 -5.46126 -12.7998 -5.12012h-475.137
-c-5.11979 0 -9.38639 1.70671 -12.7998 5.12012c-3.41341 3.41341 -5.29069 7.68001 -5.63184 12.7998v73.2158c0 5.11979 1.87728 9.38639 5.63184 12.7998c3.75456 3.41341 8.02116 5.29069 12.7998 5.63184h475.137c5.11979 0 9.38639 -1.87728 12.7998 -5.63184
-s5.29069 -8.02116 5.63184 -12.7998zM512 393.728v-73.2158c0 -5.11979 -1.87728 -9.38639 -5.63184 -12.7998s-8.02116 -5.29069 -12.7998 -5.63184h-475.137c-5.11979 0 -9.38639 1.87728 -12.7998 5.63184c-3.41341 3.75456 -5.29069 8.02116 -5.63184 12.7998v73.2158
-c0 4.7793 1.87728 9.04622 5.63184 12.8008c3.75456 3.75456 8.02116 5.63184 12.7998 5.63184h475.137c5.11979 0 9.38639 -1.87728 12.7998 -5.63184s5.29069 -8.02148 5.63184 -12.8008z" />
-    <glyph glyph-name="uniF16F" unicode="&#xf16f;" 
-d="M9.21582 193.536l228.353 227.84l228.863 -227.84l-81.4072 -81.4082l-90.1123 90.624v-239.104h-114.176v239.104l-90.624 -90.624z" />
-    <glyph glyph-name="uniF162" unicode="&#xf162;" 
-d="M398.464 368c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944zM480 113.536v140.944
-c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361zM304 160v-48h16v-48h-16h-64h-48v48h48v48h-48v64h48h64
-v-64zM256 256v48h48v-48h-48z" />
-    <glyph glyph-name="uniF164" unicode="&#xf164;" 
-d="M284.4 252.96v-121.904h-48.7686v97.5205h-24.3838v-97.5205h-48.7676v97.5205h-24.3848v-97.5205h-48.752v121.904h195.057zM406.304 179.808h24.3682v-48.7676h-48.752v48.7676h-24.3838v-48.7676h-48.7686v121.92h121.904v-48.7676h-24.3682v-24.3848z
-M357.536 204.192h23.4082v24.3838h-23.4082v-24.3838zM398.464 0h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944
-c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944
-c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF15C" unicode="&#xf15c;" 
-d="M164.352 192.512c0 -4.77865 -1.70638 -9.04525 -5.11914 -12.7998l-128 -128c-3.75521 -3.75456 -8.02214 -5.63184 -12.8008 -5.63184s-9.04525 1.87728 -12.7998 5.63184c-3.75456 3.75456 -5.63184 8.02116 -5.63184 12.7998v256
-c0 5.12044 1.87728 9.38704 5.63184 12.7998c3.75456 3.41341 8.02116 5.29102 12.7998 5.63281c4.77865 0.341146 9.04557 -1.53646 12.8008 -5.63281l128 -128c3.41276 -3.41276 5.11914 -7.67936 5.11914 -12.7998z" />
-    <glyph glyph-name="uniF16D" unicode="&#xf16d;" 
-d="M146.432 238.08v-164.353c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-18.4316c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527v164.353
-c0 2.73047 0.85319 4.94922 2.55957 6.65625c1.70703 1.70638 3.92578 2.55957 6.65625 2.55957h18.4316c2.73047 0 4.94922 -0.85319 6.65625 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM219.648 238.08v-164.353
-c0 -2.73047 -0.853516 -4.94889 -2.56055 -6.65527c-1.70638 -1.70703 -3.92513 -2.56055 -6.65625 -2.56055h-18.4316c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527v164.353
-c0 2.73047 0.85319 4.94922 2.55957 6.65625c1.70703 1.70638 3.92578 2.55957 6.65625 2.55957h18.4316c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM292.352 238.08v-164.353
-c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70638 -1.70703 -3.75423 -2.56055 -6.14355 -2.56055h-18.4326c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527v164.353
-c0 2.73047 0.85319 4.94922 2.55957 6.65625c1.70703 1.70638 3.92578 2.55957 6.65625 2.55957h18.4326c2.38932 0 4.43717 -0.85319 6.14355 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM329.216 31.2324v270.848h-256v-270.848
-c0 -4.09635 0.682617 -7.85124 2.04785 -11.2646s2.73079 -5.97331 4.09668 -7.67969c1.36523 -1.70703 2.389 -2.56055 3.07129 -2.56055h237.568c0.682943 0 1.70703 0.853516 3.07227 2.56055c1.36523 1.70638 2.73047 4.26628 4.0957 7.67969
-s2.04785 7.16829 2.04785 11.2646zM137.216 338.944h128l-13.8242 33.2793c-1.36523 1.70703 -2.90104 2.73112 -4.60742 3.07227h-90.624c-2.04818 -0.341146 -3.75488 -1.36523 -5.12012 -3.07227zM402.432 329.728v-18.4316
-c0 -2.73047 -0.85319 -4.94922 -2.55957 -6.65625c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-27.6475v-270.848c0 -15.7018 -4.4375 -29.3551 -13.3125 -40.96c-8.87435 -11.6055 -19.6263 -17.4082 -32.2559 -17.4082h-237.568
-c-12.6289 0 -23.3809 5.63184 -32.2559 16.8955c-8.87435 11.2643 -13.4824 24.7471 -13.8242 40.4482v271.872h-27.1357c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957c-1.70638 1.70703 -2.55957 3.92578 -2.55957 6.65625v18.4316
-c0 2.73112 0.85319 4.94987 2.55957 6.65625c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h88.0645l19.9678 47.6152c3.07227 7.16797 8.36296 13.1416 15.8721 17.9209c7.50911 4.77865 15.0186 7.33854 22.5283 7.67969h91.1357
-c7.50911 0 15.0182 -2.5599 22.5273 -7.67969c7.50977 -5.12044 12.6299 -11.0941 15.3604 -17.9209l19.9678 -47.6152h88.5762c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.92513 2.55957 -6.65625z" />
-    <glyph glyph-name="uniF145" unicode="&#xf145;" 
-d="M0 192c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1758 110.422 75.0931 180.736 74.752s130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4935 -109.568 -74.4108 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1758 -73.8984 110.592 -75.2637 181.248zM55.8076 192c0 -55.2962 19.627 -102.4 58.8809 -141.312
-c39.2533 -38.9121 86.3571 -58.5391 141.312 -58.8809c54.9544 -0.341146 102.058 19.2858 141.312 58.8809c39.2539 39.5944 58.8809 86.6982 58.8809 141.312s-19.627 101.717 -58.8809 141.312c-39.2533 39.5951 -86.3571 59.222 -141.312 58.8809
-c-54.9544 -0.341797 -102.058 -19.9688 -141.312 -58.8809c-39.2539 -38.9115 -58.8809 -86.0153 -58.8809 -141.312zM110.08 165.888l48.1279 47.1045l47.6162 -48.1279l147.968 148.992l48.1279 -47.6162l-148.992 -148.48l-47.1035 -47.6162l-47.6162 47.6162z" />
-    <glyph glyph-name="uniF102" unicode="&#xf102;" 
-d="M0 448.512h512v-512h-512v512zM448 0.511719v384h-384v-384h384zM384 96.7676h-256l128 192z" />
-    <glyph glyph-name="uniF129" unicode="&#xf129;" 
-d="M240.941 207.059c0 19.0046 -6.72135 35.2279 -20.1641 48.6699c-13.4427 13.4427 -29.666 20.1641 -48.6699 20.1641c-19.0046 0 -35.2279 -6.72135 -48.6699 -20.1641c-13.4427 -13.4421 -20.1641 -29.6654 -20.1641 -48.6699
-c0 -19.0039 6.72135 -35.2272 20.1641 -48.6699c13.4421 -13.4427 29.6654 -20.1641 48.6699 -20.1641c19.0039 0 35.2272 6.72135 48.6699 20.1641s20.1641 29.666 20.1641 48.6699zM447.458 69.376c0 9.32617 -3.4082 17.3926 -10.2246 24.1992
-c-6.81706 6.80664 -14.8838 10.2152 -24.2002 10.2256c-9.31641 0.00976562 -17.3828 -3.39876 -24.1992 -10.2256c-6.81641 -6.82617 -10.2246 -14.8926 -10.2246 -24.1992c0 -9.4974 3.36296 -17.609 10.0889 -24.335c6.72656 -6.72656 14.8382 -10.0898 24.335 -10.0898
-c9.4974 0 17.609 3.36328 24.335 10.0898c6.72656 6.72591 10.0898 14.8376 10.0898 24.335zM447.458 344.741c0 9.32682 -3.4082 17.3936 -10.2246 24.2002c-6.81706 6.80664 -14.8838 10.2148 -24.2002 10.2246c-9.31641 0.0104167 -17.3828 -3.39779 -24.1992 -10.2246
-s-10.2246 -14.8936 -10.2246 -24.2002c0 -9.49674 3.36296 -17.6084 10.0889 -24.335c6.72656 -6.72591 14.8382 -10.0889 24.335 -10.0889c9.4974 0 17.609 3.36296 24.335 10.0889c6.72656 6.72656 10.0898 14.8382 10.0898 24.335zM344.199 231.529v-49.7539
-c0 -1.79753 -0.627279 -3.5446 -1.88184 -5.24121c-1.25521 -1.69661 -2.69076 -2.6403 -4.30664 -2.83105l-41.6836 -6.45996c-1.96745 -6.27474 -4.83366 -13.0863 -8.59863 -20.4346c6.0944 -8.60352 14.1611 -18.9137 24.2002 -30.9307
-c1.25456 -1.79753 1.88184 -3.58952 1.88184 -5.37598c0 -2.14844 -0.627279 -3.85026 -1.88184 -5.10547c-4.1263 -5.38086 -11.5202 -13.402 -22.1816 -24.0635c-10.6621 -10.6621 -17.6995 -15.998 -21.1123 -16.0078c-1.9681 0 -3.85059 0.627604 -5.64746 1.88281
-l-30.9307 24.1992c-6.63607 -3.40365 -13.5381 -6.18457 -20.7061 -8.34277c-1.96745 -19.3659 -4.0306 -33.2601 -6.18945 -41.6826c-1.25456 -4.30664 -3.94499 -6.45996 -8.07129 -6.45996h-50.0107c-1.96745 0 -3.75944 0.672526 -5.37598 2.01758
-c-1.61589 1.34505 -2.51432 2.91602 -2.69531 4.71289l-6.18945 41.1406c-6.09375 1.79753 -12.8148 4.57845 -20.1631 8.34277l-31.7295 -23.9277c-1.25456 -1.25521 -3.04655 -1.88281 -5.37598 -1.88281c-1.96745 0 -3.84961 0.717773 -5.64648 2.15332
-c-25.8112 23.8431 -38.7168 38.1842 -38.7168 43.0234c0 1.61589 0.627604 3.31738 1.88281 5.10449c1.79688 2.50977 5.47103 7.25846 11.0225 14.2461c5.55208 6.98698 9.76367 12.4531 12.6348 16.3984c-4.1263 7.89128 -7.26367 15.2402 -9.41211 22.0469
-l-40.8691 6.45996c-1.79688 0.180339 -3.32292 1.03353 -4.57812 2.55957c-1.25456 1.52604 -1.88184 3.27311 -1.88184 5.24121v49.7539c0 1.79688 0.627279 3.54362 1.88184 5.24023c1.25521 1.69661 2.69076 2.6403 4.30664 2.83105l41.6836 6.45996
-c1.96745 6.27474 4.83333 13.0866 8.59766 20.4355c-6.09375 8.60352 -14.1602 18.9137 -24.1992 30.9307c-1.25456 1.96745 -1.88184 3.75944 -1.88184 5.37598c0 2.14844 0.627279 3.94043 1.88184 5.37598c3.94531 5.38086 11.2939 13.3571 22.0459 23.9287
-c10.752 10.571 17.8346 15.8617 21.248 15.8721c1.9681 0 3.85059 -0.627604 5.64746 -1.88281l30.9307 -24.1992c6.09375 3.22266 12.9958 6.08887 20.7061 8.59863c1.96745 19.3652 4.0306 33.1689 6.18945 41.4111c1.25456 4.30729 3.94499 6.46094 8.07129 6.46094
-h50.0098c1.9681 0 3.76009 -0.672852 5.37598 -2.01855c1.61654 -1.34505 2.5153 -2.91602 2.69629 -4.71289l6.18848 -41.1406c6.0944 -1.79688 12.8158 -4.5778 20.1641 -8.34277l31.7295 23.9287c1.43555 1.25456 3.22754 1.88184 5.37598 1.88184
-c1.96745 0 3.84961 -0.717773 5.64648 -2.15332c25.8112 -23.8431 38.7168 -38.1839 38.7168 -43.0225c0 -1.61654 -0.627604 -3.31836 -1.88281 -5.10547c-2.14844 -2.87109 -5.91309 -7.70996 -11.2939 -14.5166s-9.41667 -12.1826 -12.1074 -16.1279
-c4.1263 -8.60352 7.17318 -15.9521 9.14062 -22.0459l40.8701 -6.18945c1.79688 -0.361328 3.32259 -1.30501 4.57715 -2.83105c1.25521 -1.52604 1.88281 -3.27279 1.88281 -5.24023zM516.307 88.1992v-37.6465c0 -2.87109 -13.3571 -5.65202 -40.0713 -8.34277
-c-2.14844 -4.83919 -4.83887 -9.50228 -8.07129 -13.9893c9.14583 -20.2598 13.7188 -32.6283 13.7188 -37.1055c0 -0.712891 -0.356445 -1.34017 -1.06934 -1.88184c-21.8757 -12.7298 -32.9893 -19.0947 -33.3408 -19.0947c-1.43555 0 -5.55664 4.21126 -12.3633 12.6338
-c-6.80664 8.42318 -11.4697 14.5169 -13.9893 18.2812c-3.58398 -0.361328 -6.27441 -0.541992 -8.07129 -0.541992c-1.79753 0 -4.48828 0.180664 -8.07227 0.541992c-2.50977 -3.76432 -7.17285 -9.85807 -13.9893 -18.2812
-c-6.81641 -8.42253 -10.9375 -12.6338 -12.3633 -12.6338c-0.361328 0 -11.4746 6.36491 -33.3398 19.0947c-0.712891 0.541667 -1.06934 1.16895 -1.06934 1.88184c0 4.47721 4.57292 16.8457 13.7188 37.1055c-3.22266 4.47721 -5.91341 9.1403 -8.07227 13.9893
-c-26.7142 2.69076 -40.0713 5.47168 -40.0713 8.34277v37.6465c0 2.87174 13.3571 5.65267 40.0713 8.34277c2.32943 5.20052 5.02018 9.86393 8.07227 13.9902c-9.14583 20.2591 -13.7188 32.6273 -13.7188 37.1045c0 0.712891 0.356445 1.34049 1.06934 1.88281
-c0.71224 0.361328 3.84928 2.15332 9.41113 5.37598c5.56185 3.22201 10.8525 6.26888 15.8721 9.14062c5.01953 2.87109 7.70996 4.30664 8.07129 4.30664c1.43555 0 5.55664 -4.16634 12.3633 -12.499s11.4701 -14.3812 13.9902 -18.1455
-c3.58398 0.361328 6.27441 0.541992 8.07129 0.541992s4.4873 -0.180664 8.07129 -0.541992c9.14583 12.7292 17.3932 22.7682 24.7422 30.1172l1.61133 0.541992c0.712891 0 11.8262 -6.27441 33.3398 -18.8232c0.712891 -0.542318 1.06934 -1.16992 1.06934 -1.88281
-c0 -4.47721 -4.57292 -16.8454 -13.7188 -37.1045c3.05208 -4.1263 5.74251 -8.78939 8.07129 -13.9893c26.7148 -2.69076 40.0723 -5.47168 40.0723 -8.34277zM516.307 363.565v-37.6475c0 -2.87109 -13.3571 -5.65202 -40.0713 -8.34277
-c-2.14844 -4.83854 -4.83887 -9.50163 -8.07129 -13.9893c9.14583 -20.2591 13.7188 -32.6276 13.7188 -37.1055c0 -0.71224 -0.356445 -1.33952 -1.06934 -1.88184c-21.8757 -12.7298 -32.9893 -19.0947 -33.3408 -19.0947c-1.43555 0 -5.55664 4.21159 -12.3633 12.6348
-c-6.80664 8.42253 -11.4697 14.5163 -13.9893 18.2812c-3.58398 -0.361328 -6.27441 -0.541992 -8.07129 -0.541992c-1.79753 0 -4.48828 0.180664 -8.07227 0.541992c-2.50977 -3.76497 -7.17285 -9.85872 -13.9893 -18.2812
-c-6.81641 -8.42318 -10.9375 -12.6348 -12.3633 -12.6348c-0.361328 0 -11.4746 6.36491 -33.3398 19.0947c-0.712891 0.542318 -1.06934 1.1696 -1.06934 1.88184c0 4.47786 4.57292 16.8464 13.7188 37.1055c-3.22266 4.47721 -5.91341 9.1403 -8.07227 13.9893
-c-26.7142 2.69076 -40.0713 5.47168 -40.0713 8.34277v37.6475c0 2.87109 13.3571 5.65202 40.0713 8.34277c2.32943 5.19987 5.02018 9.86296 8.07227 13.9893c-9.14583 20.2591 -13.7188 32.6273 -13.7188 37.1045c0 0.712891 0.356445 1.34049 1.06934 1.88281
-c0.71224 0.361328 3.84928 2.15332 9.41113 5.37598s10.8525 6.26953 15.8721 9.14062s7.70996 4.30664 8.07129 4.30664c1.43555 0 5.55664 -4.16634 12.3633 -12.499c6.80664 -8.33203 11.4701 -14.3805 13.9902 -18.1455
-c3.58398 0.361328 6.27441 0.541992 8.07129 0.541992s4.4873 -0.180664 8.07129 -0.541992c9.14583 12.7298 17.3932 22.7692 24.7422 30.1182l1.61133 0.541992c0.712891 0 11.8262 -6.27474 33.3398 -18.8242c0.712891 -0.541667 1.06934 -1.16895 1.06934 -1.88184
-c0 -4.47786 -4.57292 -16.8464 -13.7188 -37.1055c3.05208 -4.12565 5.74251 -8.78874 8.07129 -13.9893c26.7148 -2.69076 40.0723 -5.47168 40.0723 -8.34277z" />
-    <glyph glyph-name="uniF168" unicode="&#xf168;" 
-d="M512 92.1602v-91.6484c0 -7.50911 -2.73079 -13.9945 -8.19238 -19.4561c-5.46094 -5.46094 -11.9463 -8.19141 -19.4561 -8.19141h-91.1357c-7.50911 0 -13.9945 2.73047 -19.4561 8.19141c-5.46094 5.46159 -8.19141 11.9469 -8.19141 19.4561v91.6484
-c0 7.50911 2.73047 13.9945 8.19141 19.4561c5.46159 5.46094 11.9469 8.02083 19.4561 7.67969h27.1357v54.7842h-145.92v-54.7842h27.1367c7.85026 0 14.3356 -2.5599 19.4561 -7.67969c5.11979 -5.12044 7.85026 -11.6058 8.19141 -19.4561v-91.6484
-c0 -7.50911 -2.73047 -13.9945 -8.19141 -19.4561c-5.46159 -5.46094 -11.9469 -8.19141 -19.4561 -8.19141h-91.1367c-7.85026 0 -14.3356 2.73047 -19.4561 8.19141c-5.11979 5.46159 -7.85026 11.9469 -8.19141 19.4561v91.6484
-c0 7.50911 2.73047 13.9945 8.19141 19.4561c5.46159 5.46094 11.9469 8.02083 19.4561 7.67969h27.1367v54.7842h-145.92v-54.7842h27.1357c7.50911 0 13.9945 -2.5599 19.4561 -7.67969c5.46094 -5.12044 8.19141 -11.6058 8.19141 -19.4561v-91.6484
-c0 -7.50911 -2.73047 -13.9945 -8.19141 -19.4561c-5.46159 -5.46094 -11.9469 -8.19141 -19.4561 -8.19141h-91.1357c-7.85091 0 -14.3363 2.73047 -19.4561 8.19141c-5.12044 5.46159 -7.85124 11.9469 -8.19238 19.4561v91.6484
-c0 7.50911 2.73079 13.9945 8.19238 19.4561c5.46094 5.46094 11.9463 8.02083 19.4561 7.67969h27.1357v54.7842c0 9.89844 3.58398 18.6025 10.752 26.1123c7.16797 7.50911 15.8721 11.0931 26.1123 10.752h145.92v54.7832h-27.1367
-c-7.85026 0 -14.3356 2.56022 -19.4561 7.68066c-5.11979 5.11979 -7.85026 11.6051 -8.19141 19.4561v91.6475c0 7.50977 2.73047 13.9951 8.19141 19.4561c5.46159 5.46159 11.9469 8.19238 19.4561 8.19238h91.1367c7.85026 0 14.3356 -2.73079 19.4561 -8.19238
-c5.11979 -5.46094 7.85026 -11.9463 8.19141 -19.4561v-91.6475c0 -7.50977 -2.73047 -13.9951 -8.19141 -19.4561c-5.46159 -5.46159 -11.9469 -8.02181 -19.4561 -7.68066h-27.1367v-54.7832h145.92c9.89909 0 18.6032 -3.58398 26.1123 -10.752
-s11.0931 -15.8721 10.752 -26.1123v-54.7842h27.1357c7.85091 0 14.3363 -2.5599 19.4561 -7.67969c5.12044 -5.12044 7.85124 -11.6058 8.19238 -19.4561z" />
-    <glyph glyph-name="uniF159" unicode="&#xf159;" 
-d="M493.568 193.536c0 -2.73047 -0.853516 -5.11979 -2.56055 -7.16797l-110.08 -100.864c-3.07161 -2.73047 -6.31413 -3.41309 -9.72754 -2.04785c-3.75456 1.70638 -5.63184 4.60775 -5.63184 8.7041v64h-356.353c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957
-c-1.70638 1.70703 -2.55957 3.75521 -2.55957 6.14453v55.2959c0 2.38932 0.85319 4.43717 2.55957 6.14355c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h356.353v64c0 4.0957 1.87728 6.99707 5.63184 8.7041c3.75456 1.70638 6.99707 1.19434 9.72754 -1.53613
-l110.08 -100.353c1.70703 -1.70638 2.56055 -3.75423 2.56055 -6.14355z" />
-    <glyph glyph-name="uniF148" unicode="&#xf148;" 
-d="M172.032 293.798c0 -14.4564 -4.97949 -26.6641 -14.9385 -36.623s-22.1667 -15.0993 -36.623 -15.4209c-14.4564 -0.320964 -26.6641 4.81934 -36.623 15.4209s-14.9385 22.8092 -14.9385 36.623s4.97949 25.8607 14.9385 36.1406
-c9.95898 10.2806 22.1667 15.4209 36.623 15.4209c14.4564 0 26.6641 -5.1403 36.623 -15.4209c9.95898 -10.2799 14.9385 -22.3268 14.9385 -36.1406zM447.669 190.193v-120.471h-378.76v51.5615l85.7754 86.2568l43.3691 -42.8877l137.336 137.336zM473.208 379.572
-h-430.32c-2.2487 0 -4.17643 -0.80306 -5.7832 -2.40918c-1.60612 -1.60612 -2.56966 -3.69434 -2.89062 -6.26465v-326.716c0 -2.57031 0.963542 -4.65853 2.89062 -6.26465c1.92773 -1.60612 3.85547 -2.40918 5.7832 -2.40918h430.32
-c2.24935 0 4.33757 0.80306 6.26465 2.40918c1.92773 1.60612 2.73112 3.69434 2.41016 6.26465v326.716c0 2.24935 -0.803385 4.33757 -2.41016 6.26465c-1.60612 1.92773 -3.69434 2.73079 -6.26465 2.40918zM516.096 370.898v-326.716
-c0 -11.8867 -4.17611 -22.0062 -12.5283 -30.3584c-8.35286 -8.35286 -18.4727 -12.6898 -30.3594 -13.0107h-430.32c-11.5651 0 -21.6846 4.33691 -30.3584 13.0107s-12.8503 18.7933 -12.5293 30.3584v326.716c0 11.8867 4.17643 22.0065 12.5293 30.3594
-c8.35221 8.35221 18.4717 12.6891 30.3584 13.0107h430.32c11.8867 0 22.0065 -4.33691 30.3594 -13.0107c8.35221 -8.67383 12.5283 -18.7936 12.5283 -30.3594z" />
-    <glyph glyph-name="uniF103" unicode="&#xf103;" 
-d="M102.592 304h26.3203v-80h384v-48h-384v-80h-26.3203l-102.592 104z" />
-    <glyph glyph-name="uniF10D" unicode="&#xf10d;" 
-d="M0 368.64h512v-96.2559h-512v96.2559zM0 240.64h512v-96.2559h-512v96.2559zM0 112.64h512v-96.2559h-512v96.2559z" />
-    <glyph glyph-name="uniF155" unicode="&#xf155;" 
-d="M0 -63.4883v225.792l75.7764 -75.7754l103.424 102.912l73.7275 -73.7285l-102.912 -103.424l75.7764 -75.7764h-225.792zM259.072 269.312l102.912 103.425l-75.7764 75.7754h225.792v-225.792l-75.7764 75.7764l-103.424 -102.912z" />
-    <glyph glyph-name="uniF169" unicode="&#xf169;" 
-d="M228.864 393.728v-227.84h227.84c0 -125.439 -101.888 -227.84 -227.84 -227.84c-125.44 0 -227.328 102.4 -227.328 227.84c0 125.44 100.864 227.328 226.304 227.84h1.02441zM510.976 201.728l-245.76 -0.511719s-0.511719 245.76 0.511719 245.76
-c135.169 0 245.248 -110.079 245.248 -245.248z" />
-    <glyph glyph-name="uniF113" unicode="&#xf113;" 
-d="M256 292.864v-128c0 -2.38932 -0.85319 -4.4375 -2.55957 -6.14453c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-91.1357c-2.73112 0 -4.94987 0.85319 -6.65625 2.55957c-1.70703 1.70703 -2.56055 3.75521 -2.56055 6.14453v18.4316
-c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.92513 2.55957 6.65625 2.55957h64v100.353c0 2.73047 0.85319 4.94889 2.55957 6.65527c1.70638 1.70703 3.75423 2.56055 6.14355 2.56055h18.4326c2.73047 0 4.94922 -0.853516 6.65625 -2.56055
-c1.70638 -1.70638 2.55957 -3.9248 2.55957 -6.65527zM374.784 192.512c0 28.3307 -6.9974 54.2721 -20.9922 77.8242c-13.9948 23.5521 -32.7682 42.4961 -56.3203 56.832s-49.4932 21.3333 -77.8232 20.9922c-28.3307 -0.341146 -54.443 -7.33854 -78.3369 -20.9922
-c-23.8932 -13.653 -42.6663 -32.597 -56.3193 -56.832c-13.6536 -24.2344 -20.651 -50.1758 -20.9922 -77.8242c-0.341146 -27.6478 6.65625 -53.5889 20.9922 -77.8232c14.3359 -24.235 33.109 -43.179 56.3193 -56.832c23.2109 -13.6536 49.3232 -20.651 78.3369 -20.9922
-c29.013 -0.341797 54.9541 6.6556 77.8232 20.9922c22.8698 14.3359 41.6432 33.2799 56.3203 56.832c14.6771 23.5514 21.6745 49.4925 20.9922 77.8232zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08
-c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08
-c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721
-c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF177" unicode="&#xf177;" 
-d="M128 27.4287c0 -4.95247 -1.80957 -9.23828 -5.42871 -12.8574s-7.90495 -5.42871 -12.8574 -5.42871c-4.95182 0 -9.2373 1.80957 -12.8564 5.42871s-5.42871 7.90495 -5.42871 12.8574c0 4.95247 1.80957 9.23828 5.42871 12.8574
-c3.61914 3.61849 7.90462 5.42773 12.8564 5.42773c4.95247 0 9.23828 -1.80924 12.8574 -5.42773c3.61914 -3.61914 5.42871 -7.90495 5.42871 -12.8574zM312 147.429c-18.6667 7.42839 -35.1904 18.333 -49.5713 32.7139s-25.2858 30.9046 -32.7148 49.5713
-l-194.571 -194.571c-7.23763 -7.23763 -10.8564 -15.9043 -10.8564 -26c0 -10.2858 3.61882 -18.8571 10.8564 -25.7139l30.2861 -30.8574c7.42839 -7.04753 16.0951 -10.5713 26 -10.5713c10.0951 0 18.6663 3.52376 25.7139 10.5713zM493.143 271.714
-c0 2.85742 -0.80957 5.23861 -2.42871 7.14355c-1.61849 1.9043 -3.85645 2.85645 -6.71387 2.85645c-1.71419 0 -8.42839 -3.38086 -20.1426 -10.1426s-24.6191 -14.4759 -38.7148 -23.1426c-14.0951 -8.66667 -21.6188 -13.2858 -22.5713 -13.8574l-55.1426 30.5713v64
-l83.7139 48.2861c3.04753 2.09505 4.57129 4.76172 4.57129 8s-1.52376 5.90495 -4.57129 8c-8.38086 5.71419 -18.6188 10.1426 -30.7139 13.2852c-12.0951 3.14323 -23.6667 4.71484 -34.7148 4.71484c-35.2376 0 -65.3802 -12.5238 -90.4277 -37.5713
-c-25.0482 -25.0475 -37.5723 -55.1904 -37.5723 -90.4287s12.5241 -65.3812 37.5723 -90.4287c25.0475 -25.0475 55.1901 -37.5713 90.4277 -37.5713c26.8574 0 51.4766 7.95247 73.8574 23.8574c22.3809 15.9043 38.0475 36.6185 47 62.1426
-c4.38086 12.7617 6.57129 22.8568 6.57129 30.2852z" />
-    <glyph glyph-name="uniF112" unicode="&#xf112;" 
-d="M384 -64.6562h-288c-17.6797 0 -32 14.2881 -32 31.9365v385.552c0 17.6318 14.3203 31.9199 32 31.9199h80v-33.2637h-64c-8.83203 0 -16 -7.13672 -16 -15.9688v-352.271c0 -8.84766 7.16797 -15.9678 16 -15.9678h256c8.84766 0 16 7.12012 16 15.9678v352.271
-c0 8.83203 -7.15234 15.9688 -16 15.9688h-64v33.2637h80c17.6641 0 32 -14.3037 32 -31.9199v-385.552c0 -17.6484 -14.3359 -31.9365 -32 -31.9365zM176 255.696h176v-15.9688h-176v15.9688zM176 207.792h176v-15.9678h-176v15.9678zM176 159.872h176v-15.9678h-176
-v15.9678zM176 111.968h176v-15.9678h-176v15.9678zM352 0.223633h-176v15.9365h176v-15.9365zM176 64.0645h176v-15.9688h-176v15.9688zM128 256.016h16v-15.9678h-16v15.9678zM128 208.112h16v-15.9688h-16v15.9688zM128 160.224h16v-15.9678h-16v15.9678zM128 112.32h16
-v-15.9688h-16v15.9688zM144 0.52832h-16v15.9678h16v-15.9678zM128 64.4004h16v-15.9688h-16v15.9688zM336 334.544c8.84766 0 16 -7.15234 16 -15.9844v-30.9277h-224v30.9277c0 8.83203 7.15234 15.9844 16 15.9844h48s0.192383 22.7041 0.192383 48.6562
-c0 26.9434 20.7998 49.4717 47.8076 49.4717s48.5283 -23.6797 48.5283 -49.6318c0 -27.9521 -0.52832 -48.4961 -0.52832 -48.4961h48zM240 384.752c-8.84766 0 -16 -7.13574 -16 -15.9521c0 -8.83203 7.15234 -15.9678 16 -15.9678s16 7.13574 16 15.9678
-c0 8.81641 -7.15234 15.9521 -16 15.9521z" />
-    <glyph glyph-name="uniF153" unicode="&#xf153;" 
-d="M216.01 448.432v-137.54c31.6185 -4.3112 60.9375 -10.7786 87.957 -19.4023c27.0189 -8.62305 49.8701 -18.3958 68.5537 -29.3184c18.6836 -10.9225 35.6426 -22.7074 50.877 -35.3545c15.2337 -12.6478 27.5934 -25.7262 37.0791 -39.2354
-c9.48568 -13.5098 17.6777 -26.4447 24.5762 -38.8047s11.9287 -24.4323 15.0908 -36.2168c3.16146 -11.7852 5.74837 -21.7018 7.76074 -29.75c2.01172 -8.04818 2.87402 -14.8031 2.58691 -20.2646l0.430664 -7.33008c-1.72461 3.16211 -4.45508 7.33008 -8.19141 12.5039
-c-3.73698 5.17383 -13.3662 14.3717 -28.8877 27.5938c-15.5221 13.2227 -33.487 24.1455 -53.8945 32.7686c-20.4082 8.62305 -48.5775 16.0964 -84.5078 22.4199c-22.1328 3.44922 -45.415 5.17383 -69.8467 5.17383c-15.8092 0 -32.3372 -0.718424 -49.584 -2.15527
-v-136.246l-216.01 215.147z" />
-    <glyph glyph-name="uniF158" unicode="&#xf158;" 
-d="M436.8 -64l-102.399 102.4l-75.2002 -75.2002v225.6h225.6l-75.2002 -75.2002l102.4 -104zM27.2002 195.2l75.2002 75.2002l-102.4 102.399l75.2002 75.2002l104 -102.4l75.2002 75.2002v-225.6h-227.2z" />
-    <glyph glyph-name="uniF13F" unicode="&#xf13f;" 
-d="M365.568 174.08v36.8643c0 4.77865 -1.70671 9.04525 -5.12012 12.7998s-7.68001 5.46126 -12.7998 5.12012h-256c-5.12044 0 -9.55794 -1.70671 -13.3125 -5.12012s-5.46126 -7.68001 -5.12012 -12.7998v-36.8643c0 -4.77865 1.70671 -9.04525 5.12012 -12.7998
-s7.85091 -5.46126 13.3125 -5.12012h256c4.77865 0 9.04525 1.70671 12.7998 5.12012s5.46126 7.68001 5.12012 12.7998zM438.784 329.728v-274.432c0 -22.528 -8.02148 -41.8132 -24.0645 -57.8555c-16.0423 -16.043 -35.4984 -24.235 -58.3682 -24.5762h-273.92
-c-22.8691 0 -42.3249 8.19206 -58.3672 24.5762c-16.043 16.3835 -24.0645 35.6686 -24.0645 57.8555v274.432c0 22.528 8.02148 41.8135 24.0645 57.8564c16.0423 16.043 35.498 24.235 58.3672 24.5762h273.92c22.8698 0 42.3258 -8.19206 58.3682 -24.5762
-c16.043 -16.3841 24.0645 -35.6696 24.0645 -57.8564z" />
-    <glyph glyph-name="uniF111" unicode="&#xf111;" 
-d="M219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232
-c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232
-c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08
-c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08
-c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721
-c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF123" unicode="&#xf123;" 
-d="M512 110.08v-54.7842c0 -2.38932 -0.85319 -4.43717 -2.55957 -6.14355c-1.70703 -1.70703 -3.92578 -2.73112 -6.65625 -3.07227h-393.216v-54.7842c0 -2.38932 -0.853516 -4.43717 -2.56055 -6.14355c-1.70638 -1.70703 -3.92513 -2.73112 -6.65625 -3.07227
-c-2.04753 0 -4.26595 1.02409 -6.65527 3.07227l-91.1367 91.1357c-1.70638 1.70638 -2.55957 3.92513 -2.55957 6.65625c0 2.73047 0.85319 4.94889 2.55957 6.65527l91.6484 91.1367c1.70638 1.70638 3.75423 2.55957 6.14355 2.55957
-c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625v-54.7842h393.216c2.38932 0 4.60807 -0.85319 6.65625 -2.55957c2.04753 -1.70703 2.90072 -3.92578 2.55957 -6.65625zM512 265.728
-c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527l-91.6484 -91.6484c-1.70638 -1.70638 -3.75423 -2.55957 -6.14355 -2.55957c-2.73112 0 -4.94987 1.02376 -6.65625 3.07129c-1.70703 2.04818 -2.56055 4.09635 -2.56055 6.14453v54.7842h-393.216
-c-2.38932 0 -4.60807 1.02376 -6.65625 3.07129c-2.04753 2.04818 -2.90072 4.09635 -2.55957 6.14453v54.7842c0 2.73047 0.85319 4.94889 2.55957 6.65527c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h393.216v54.7842c0 2.73047 0.853516 4.94889 2.56055 6.65527
-c1.70638 1.70703 3.92513 2.56055 6.65625 2.56055c2.04753 0 4.26595 -0.853516 6.65527 -2.56055l91.1367 -91.1357c1.70638 -1.70638 2.55957 -3.92513 2.55957 -6.65625z" />
-    <glyph glyph-name="uniF10F" unicode="&#xf10f;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM112.128 112.64l64 -64l79.8721 79.8721l79.8721 -79.8721l64 64l-79.8721 79.8721l79.8721 79.8721
-l-64 64l-79.8721 -79.8721l-79.8721 79.8721l-64 -64l79.8721 -79.8721z" />
-    <glyph glyph-name="uniF13E" unicode="&#xf13e;" 
-d="M108.8 150.4v83.1992h294.4v-83.1992h-294.4zM0 192c0 70.4004 25.5996 131.2 75.2002 180.8c49.5996 49.6006 110.399 76.7998 180.8 75.2002s131.2 -25.5996 180.8 -75.2002c51.2002 -48 75.2002 -108.8 75.2002 -180.8s-25.5996 -131.2 -75.2002 -180.8
-c-49.5996 -49.6006 -108.8 -73.6006 -180.8 -75.2002s-131.2 24 -180.8 75.2002c-49.6006 51.2002 -73.6006 110.399 -75.2002 180.8zM56 192c0 -56 19.2002 -102.4 59.2002 -140.8c40 -38.4004 86.3994 -59.2002 140.8 -59.2002s102.4 19.2002 140.8 59.2002
-c38.4004 40 59.2002 86.3994 59.2002 140.8s-19.2002 102.4 -59.2002 140.8c-40 38.4004 -86.3994 60.7998 -140.8 59.2002c-54.4004 0 -102.4 -19.2002 -140.8 -59.2002c-38.4004 -40 -59.2002 -84.7998 -59.2002 -140.8z" />
-    <glyph glyph-name="uniF12E" unicode="&#xf12e;" 
-d="M324.096 364.032c-23.8932 0 -44.2025 -8.36263 -60.9277 -25.0879c-16.7253 -16.7253 -25.2585 -36.6934 -25.5996 -59.9043c0 -4.77865 0.682617 -10.2399 2.04785 -16.3838l5.63184 -29.1846c-19.7975 -19.7969 -49.6641 -49.6634 -89.5996 -89.5996
-c-39.9362 -39.9362 -69.6325 -69.4616 -89.0889 -88.5762v-33.792h56.832v56.832h57.3447v57.3438h56.832v24.0645l40.96 40.4482l29.1836 -5.63281c6.14388 -1.02344 11.4346 -1.53516 15.8721 -1.53516c23.8932 0 44.2025 8.36263 60.9277 25.0879
-s24.9173 36.8639 24.5762 60.416c-0.341146 23.5521 -8.5332 43.6908 -24.5762 60.416c-16.0423 16.7253 -36.181 25.0879 -60.416 25.0879zM324.096 421.376c39.2533 0 72.8747 -13.9948 100.864 -41.9844c27.9896 -27.9889 41.8135 -61.61 41.4717 -100.863
-c-0.341146 -39.2533 -14.165 -72.8747 -41.4717 -100.864s-61.0986 -41.9844 -101.376 -41.9844c-9.55729 0 -18.2614 0.853516 -26.1123 2.56055l-2.55957 -2.56055v-57.3438h-57.3438v-56.832h-56.832v-57.8555h-171.521v114.688l174.08 174.08
-c-1.70638 7.85091 -2.55957 16.7256 -2.55957 26.624c0 39.2533 13.9945 72.7038 41.9834 100.352c27.9896 27.6484 61.7816 41.6432 101.376 41.9844zM294.912 279.04c0 18.7734 9.55729 28.1602 28.6719 28.1602s28.6719 -9.38672 28.6719 -28.1602
-c0 -19.4557 -9.55729 -29.1836 -28.6719 -29.1836s-28.6719 9.72786 -28.6719 29.1836z" />
-    <glyph glyph-name="uniF106" unicode="&#xf106;" 
-d="M466.432 364.032h-457.216v57.3438h457.216v-57.3438zM294.912 249.856h-285.696v57.3438h285.696v-57.3438zM466.432 78.3359h-457.216v57.3438h457.216v-57.3438zM352.256 -36.3516h-343.04v57.8555h343.04v-57.8555zM466.432 -7.16797
-c0 -8.19206 -2.73047 -15.0189 -8.19141 -20.4805c-5.46159 -5.46094 -12.1175 -8.36198 -19.9678 -8.70312c-7.85091 -0.341797 -14.6777 2.55924 -20.4805 8.70312c-5.80273 6.14453 -8.7041 12.9714 -8.7041 20.4805c0 7.50911 2.90137 14.165 8.7041 19.9678
-s12.6296 8.7041 20.4805 8.7041c7.50911 0 14.165 -2.90137 19.9678 -8.7041s8.5332 -12.4587 8.19141 -19.9678z" />
-    <glyph glyph-name="uniF135" unicode="&#xf135;" 
-d="M109.568 110.08v-17.9199c0 -2.73047 -0.853516 -4.94922 -2.56055 -6.65625c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957h-17.9199c-2.38932 0 -4.60775 0.85319 -6.65527 2.55957c-2.04818 1.70703 -2.90169 3.92578 -2.56055 6.65625v17.9199
-c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.9248 2.55957 6.65527 2.55957h17.9199c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM109.568 183.296v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957h-17.9199c-2.38932 0 -4.60775 0.85319 -6.65527 2.55957c-2.04818 1.70703 -2.90169 3.75521 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.9248 2.90137 6.65527 2.55957h17.9199c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM109.568 256.512v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.92513 -2.73014 -6.65625 -3.07129h-17.9199c-2.38932 0 -4.60775 1.02376 -6.65527 3.07129c-2.04818 2.04818 -2.90169 4.09635 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.9248 2.90137 6.65527 2.55957h17.9199c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70638 2.56055 -3.92513 2.56055 -6.65625zM438.784 110.08v-17.9199
-c0 -2.73047 -0.853516 -4.94922 -2.56055 -6.65625c-1.70638 -1.70638 -3.9248 -2.55957 -6.65527 -2.55957h-273.92c-2.73112 0 -4.94987 0.85319 -6.65625 2.55957c-1.70703 1.70703 -2.56055 3.92578 -2.56055 6.65625v17.9199
-c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.92513 2.55957 6.65625 2.55957h273.92c2.73047 0 4.94889 -0.85319 6.65527 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM438.784 183.296v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.9248 -2.55957 -6.65527 -2.55957h-273.92c-2.73112 0 -4.94987 0.85319 -6.65625 2.55957c-1.70703 1.70703 -2.56055 3.75521 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.92513 2.90137 6.65625 2.55957h273.92c2.73047 0 4.94889 -0.85319 6.65527 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM438.784 256.512v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.9248 -2.73014 -6.65527 -3.07129h-273.92c-2.73112 0 -4.94987 1.02376 -6.65625 3.07129c-1.70703 2.04818 -2.56055 4.09635 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.92513 2.90137 6.65625 2.55957h273.92c2.73047 0 4.94889 -0.85319 6.65527 -2.55957c1.70703 -1.70638 2.56055 -3.92513 2.56055 -6.65625zM475.648 55.2959v237.568
-c0 2.73047 -1.02409 4.94889 -3.07227 6.65527c-2.04818 1.70703 -4.09635 2.56055 -6.14453 2.56055h-420.863c-2.38932 0 -4.4375 -0.853516 -6.14453 -2.56055c-1.70638 -1.70638 -2.73047 -3.9248 -3.07227 -6.65527v-237.568
-c0 -2.38932 1.02409 -4.43717 3.07227 -6.14355c2.04818 -1.70703 4.09635 -2.73112 6.14453 -3.07227h420.863c2.38932 0 4.4375 1.02409 6.14453 3.07227c1.70638 2.04753 2.73047 4.09538 3.07227 6.14355zM512 366.08v-310.784
-c0 -12.6296 -4.43717 -23.3815 -13.3115 -32.2559c-8.875 -8.875 -19.6273 -13.3125 -32.2568 -13.3125h-420.863c-12.2884 0 -23.0407 4.4375 -32.2568 13.3125c-9.21549 8.87435 -13.6527 19.6263 -13.3115 32.2559v310.784c0 12.6296 4.43717 23.3815 13.3115 32.2559
-c8.875 8.875 19.6273 13.4831 32.2568 13.8242h420.863c12.6296 0 23.3818 -4.60807 32.2568 -13.8242c8.87435 -9.21615 13.3115 -19.9681 13.3115 -32.2559z" />
-    <glyph glyph-name="uniF101" unicode="&#xf101;" 
-d="M512 -63.4883h-512v512h512v-512zM448 0.511719v384h-384v-384h384zM256 96.7676l-128 192h256z" />
-    <glyph glyph-name="uniF130" unicode="&#xf130;" 
-d="M237.568 -36.3516l-228.353 229.376l228.353 228.352l81.4072 -80.8955l-90.624 -90.624h238.08v-114.177h-238.08l90.624 -90.1113z" />
-    <glyph glyph-name="uniF143" unicode="&#xf143;" 
-d="M0 146.432l82.9443 82.9443l84.9912 -83.9678l260.097 261.12l83.9678 -83.9688l-344.064 -344.063l-82.9434 83.9678z" />
-    <glyph glyph-name="uniF14B" unicode="&#xf14b;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM112.128 151.552h102.912v-102.912h81.9199v102.912h102.912v81.9199h-102.912v102.912h-81.9199
-v-102.912h-102.912v-81.9199z" />
-    <glyph glyph-name="uniF104" unicode="&#xf104;" 
-d="M512.912 200l-102.592 -104h-26.3203v80h-384v48h384v80h26.3203z" />
-    <glyph glyph-name="uniF141" unicode="&#xf141;" 
-d="M415.232 -60.9277h-316.929c-52.7354 0 -95.2314 43.0078 -95.2314 95.2314v316.929c0 52.7354 42.4961 95.2314 95.2314 95.2314h316.929c52.2236 0 95.2314 -42.4961 95.2314 -95.2314v-316.929c0 -52.2236 -43.0078 -95.2314 -95.2314 -95.2314zM446.976 351.232
-c0 17.9199 -14.3359 31.7432 -31.7432 31.7432h-316.929c-17.9199 0 -31.7441 -14.3359 -31.7441 -31.7432v-316.929c0 -17.4072 13.8242 -31.7441 31.7441 -31.7441h316.929c17.4072 0 31.7432 14.3369 31.7432 31.7441v316.929zM351.744 97.792v-47.6162
-c0 -8.7041 -7.16797 -15.8721 -15.8721 -15.8721s-15.8721 7.16797 -15.8721 15.8721v47.6162c-17.4082 0 -31.7441 14.3359 -31.7441 31.7441v31.7441c0 17.4082 14.3359 31.7441 31.7441 31.7441v142.336c0 8.7041 7.16797 15.8721 15.8721 15.8721
-s15.8721 -7.16797 15.8721 -15.8721v-142.336c17.4082 0 31.7441 -14.3359 31.7441 -31.7441v-31.7441c0 -17.4082 -14.3359 -31.7441 -31.7441 -31.7441zM193.024 193.024v-142.849c0 -8.7041 -7.16797 -15.8721 -15.8721 -15.8721s-15.8721 7.16797 -15.8721 15.8721
-v142.849c-17.4082 0 -31.7441 14.3359 -31.7441 31.7432v31.7441c0 17.4082 14.3359 31.2324 31.7441 31.2324v47.6162c0 8.7041 7.16797 15.8721 15.8721 15.8721s15.8721 -7.16797 15.8721 -15.8721v-47.6162c17.9199 0 31.7432 -13.8242 31.7432 -31.2324v-31.7441
-c0 -17.9199 -13.8232 -31.7432 -31.7432 -31.7432z" />
-    <glyph glyph-name="uniF119" unicode="&#xf119;" 
-d="M288 -64h-64v48h64v-48zM128 400v48h48v-48h-48zM176 -64h-48v48h48v-48zM224 448h64v-48h-64v48zM432 400v48h80v-80h-48v32h-32zM48 160h-48v64h48v-64zM0 272v48h48v-48h-48zM48 64h-48v48h48v-48zM384 -16v-48h-48v48h48zM80 -16v-48h-80v80h48v-32h32zM464 16h48
-v-80h-80v48h32v32zM464 320h48v-48h-48v48zM48 368h-48v80h80v-48h-32v-32zM336 448h48v-48h-48v48zM464 224h48v-64h-48v64zM512 112v-48h-48v48h48zM364.8 302.4c12.7998 -14.4004 24 -33.6006 32 -51.2002c8 -17.6006 12.7998 -38.4004 12.7998 -59.2002
-c0 -22.4004 -4.7998 -41.5996 -12.7998 -60.7998s-17.5996 -35.2002 -32 -49.6006c-14.3994 -12.7998 -30.3994 -24 -49.5996 -32s-38.4004 -12.7998 -59.2002 -12.7998s-40 4.7998 -59.2002 12.7998s-35.2002 17.6006 -49.5996 32
-c-12.7998 14.4004 -24 30.4004 -32 49.6006s-12.7998 40 -12.7998 60.7998s4.7998 41.5996 12.7998 60.7998s17.5996 35.2002 32 49.6006c14.3994 12.7998 30.3994 24 49.5996 32s38.4004 12.7998 59.2002 12.7998s40 -4.7998 59.2002 -12.7998
-s35.2002 -17.6006 49.5996 -32zM147.2 192c0 -20.7998 6.39941 -41.5996 19.2002 -59.2002l150.399 150.4c-19.2002 11.2002 -38.3994 17.5996 -60.7998 17.5996c-19.2002 0 -38.4004 -4.7998 -54.4004 -14.3994c-17.5996 -9.60059 -30.3994 -22.4004 -40 -40
-c-9.59961 -16 -14.3994 -35.2002 -14.3994 -54.4004zM356.8 150.4c4.7998 12.7998 8 27.1992 8 41.5996c0 22.4004 -6.39941 41.5996 -17.5996 59.2002l-150.4 -150.4c17.6006 -11.2002 38.4004 -17.5996 59.2002 -17.5996c14.4004 0 28.7998 1.59961 41.5996 8
-c14.4004 6.39941 25.6006 14.3994 35.2002 24c11.2002 9.59961 17.6006 22.3994 24 35.2002z" />
-    <glyph glyph-name="uniF131" unicode="&#xf131;" 
-d="M329.216 220.16v-55.2959c0 -2.38932 -0.85319 -4.4375 -2.55957 -6.14453c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-100.352v-55.2959c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957
-c-2.38932 0 -4.77865 0.85319 -7.16797 2.55957l-91.1357 91.1367c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527c0 2.73112 0.85319 4.94987 2.55957 6.65625l91.6484 91.1357c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055
-c2.38932 0 4.4375 -0.853516 6.14453 -2.56055c1.70638 -1.70638 2.73047 -3.75423 3.07227 -6.14355v-55.2959h100.352c2.38932 0 4.60807 -0.853516 6.65625 -2.56055c2.04753 -1.70638 2.90072 -3.75423 2.55957 -6.14355zM374.784 192.512
-c0 28.3307 -6.9974 54.2721 -20.9922 77.8242c-13.9948 23.5521 -32.7682 42.4961 -56.3203 56.832s-49.4932 21.3333 -77.8232 20.9922c-28.3307 -0.341146 -54.443 -7.33854 -78.3369 -20.9922c-23.8932 -13.653 -42.6663 -32.597 -56.3193 -56.832
-c-13.6536 -24.2344 -20.651 -50.1758 -20.9922 -77.8242c-0.341146 -27.6478 6.65625 -53.5889 20.9922 -77.8232c14.3359 -24.235 33.109 -43.179 56.3193 -56.832c23.2109 -13.6536 49.3232 -20.651 78.3369 -20.9922c29.013 -0.341797 54.9541 6.6556 77.8232 20.9922
-c22.8698 14.3359 41.6432 33.2799 56.3203 56.832c14.6771 23.5514 21.6745 49.4925 20.9922 77.8232zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF139" unicode="&#xf139;" 
-d="M146.286 448c2.47591 0 4.61849 -0.904622 6.42773 -2.71387c1.8099 -1.8099 2.71484 -3.9528 2.71484 -6.42871v-420.571c0 -3.8099 -1.61914 -6.47656 -4.85742 -8l-137.143 -73.1436c-1.33333 -0.761719 -2.76204 -1.14258 -4.28613 -1.14258
-c-2.47591 0 -4.61882 0.904622 -6.42871 2.71387c-1.80924 1.8099 -2.71387 3.9528 -2.71387 6.42871v420.571c0 3.8099 1.61914 6.47656 4.85742 8l137.143 73.1436c1.33333 0.761719 2.76204 1.14258 4.28613 1.14258zM502.857 448
-c2.47591 0 4.61882 -0.904622 6.42871 -2.71387c1.80924 -1.8099 2.71387 -3.9528 2.71387 -6.42871v-420.571c0 -3.8099 -1.61914 -6.47656 -4.85742 -8l-137.143 -73.1436c-1.33333 -0.761719 -2.76204 -1.14258 -4.28613 -1.14258
-c-2.47591 0 -4.61849 0.904622 -6.42773 2.71387c-1.8099 1.8099 -2.71484 3.9528 -2.71484 6.42871v420.571c0 3.8099 1.61914 6.47656 4.85742 8l137.143 73.1436c1.33333 0.761719 2.76204 1.14258 4.28613 1.14258zM182.857 448
-c1.52344 0 2.85677 -0.285807 4 -0.857422l146.285 -73.1426c3.42904 -1.90495 5.14355 -4.66699 5.14355 -8.28613v-420.571c0 -2.47591 -0.904948 -4.61882 -2.71484 -6.42871c-1.80924 -1.80924 -3.95215 -2.71387 -6.42871 -2.71387
-c-1.52344 0 -2.85677 0.285807 -4 0.857422l-146.285 73.1426c-3.42904 1.90495 -5.14355 4.66699 -5.14355 8.28613v420.571c0 2.47591 0.904948 4.61882 2.71484 6.42871c1.80924 1.80924 3.95215 2.71387 6.42871 2.71387z" />
-    <glyph glyph-name="uniF12C" unicode="&#xf12c;" 
-d="M292.352 55.2959v45.5684c0 2.73047 -0.85319 4.94889 -2.55957 6.65527c-1.70638 1.70703 -3.75423 2.56055 -6.14355 2.56055h-27.6484v146.432c0 2.73112 -0.85319 4.94987 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-91.1357
-c-2.73112 0 -4.94987 -0.85319 -6.65625 -2.55957c-1.70703 -1.70638 -2.56055 -3.92513 -2.56055 -6.65625v-45.5674c0 -2.73112 0.853516 -4.94987 2.56055 -6.65625c1.70638 -1.70703 3.92513 -2.56055 6.65625 -2.56055h27.1357v-91.6475h-27.1357
-c-2.73112 0 -4.94987 -0.853516 -6.65625 -2.56055c-1.70703 -1.70638 -2.56055 -3.9248 -2.56055 -6.65527v-45.5684c0 -2.73047 0.853516 -4.94922 2.56055 -6.65625c1.70638 -1.70638 3.92513 -2.55957 6.65625 -2.55957h128c2.38932 0 4.43717 0.85319 6.14355 2.55957
-c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM256 311.296v45.5684c0 2.73047 -0.85319 4.94889 -2.55957 6.65527c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-54.7842c-2.73047 0 -4.94922 -0.853516 -6.65625 -2.56055
-c-1.70638 -1.70638 -2.55957 -3.9248 -2.55957 -6.65527v-45.5684c0 -2.73047 0.85319 -4.94922 2.55957 -6.65625c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h54.7842c2.73047 0 4.94922 0.85319 6.65625 2.55957
-c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953
-c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721
-s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF14A" unicode="&#xf14a;" 
-d="M0 120.32v144.384h183.808v183.808h144.385v-183.808h183.808v-144.384h-183.808v-183.809h-144.385v183.809h-183.808z" />
-    <glyph glyph-name="uniF150" unicode="&#xf150;" 
-d="M251.104 231.344l80.2725 80.2725l-40.416 40.3994l124.56 -0.735352l-0.0634766 -123.744l-41.4404 41.4395l-80.2559 -80.2715zM414.816 176.88l1.18359 -112.896c0 -17.6641 -14.3359 -32 -32 -32h-256c-17.6641 0 -32 14.3359 -32 32v256c0 17.6641 14.3359 32 32 32
-h112l32 -32l-143.328 -0.640625l-0.255859 -255.567l256.24 0.143555l-0.560547 144.112z" />
-    <glyph glyph-name="uniF114" unicode="&#xf114;" 
-d="M292.352 192.512c0 20.1387 -6.99707 37.376 -20.9912 51.7119c-13.9948 14.3359 -31.2321 21.5039 -51.7119 21.5039c-20.4805 0 -37.7181 -7.16797 -51.7129 -21.5039c-13.9941 -14.3359 -21.1621 -31.5732 -21.5039 -51.7119
-c-0.341146 -20.1387 6.82682 -37.376 21.5039 -51.7119c14.6777 -14.3359 31.9154 -21.5039 51.7129 -21.5039c19.7969 0 37.0342 7.16797 51.7119 21.5039c14.6771 14.3359 21.6742 31.5732 20.9912 51.7119zM438.784 223.744v-63.4883
-c0 -2.38932 -0.682617 -4.60807 -2.04785 -6.65625c-1.36523 -2.04753 -3.24284 -3.24219 -5.63281 -3.58398l-53.2471 -8.19141c-3.41341 -10.2402 -6.99772 -18.9443 -10.7529 -26.1123c6.48568 -9.21615 16.555 -22.3574 30.208 -39.4238
-c2.04818 -2.04818 3.07227 -4.26693 3.07227 -6.65625s-0.85319 -4.60807 -2.55957 -6.65625c-5.12044 -7.16797 -14.5072 -17.5785 -28.1602 -31.2314c-13.6536 -13.6536 -22.6989 -20.3096 -27.1357 -19.9678c-2.38932 0 -4.77865 0.85319 -7.16797 2.55957
-l-39.4248 30.7197c-8.5332 -4.43685 -17.237 -8.02083 -26.1113 -10.752c-3.07227 -25.9414 -5.80306 -43.6908 -8.19238 -53.248c-1.36523 -5.46094 -4.77865 -8.19141 -10.2402 -8.19141h-63.4873c-2.73112 0 -5.12044 0.85319 -7.16797 2.55957
-c-2.04818 1.70703 -3.07227 3.75521 -3.07227 6.14453l-8.19238 52.7354c-9.21549 3.07227 -17.7487 6.65625 -25.5996 10.752l-40.4482 -30.7197c-2.04818 -1.70638 -4.4375 -2.55957 -7.16797 -2.55957s-5.11979 1.02376 -7.16797 3.07129
-c-23.8932 21.8457 -39.5944 37.8883 -47.1035 48.1279c-1.36589 1.70703 -2.04883 3.92578 -2.04883 6.65625c0 2.04818 0.853516 4.09635 2.56055 6.14453c2.73047 4.0957 7.50911 10.4102 14.3359 18.9434s11.9469 15.36 15.3604 20.4805
-c-5.12044 9.55729 -9.0459 18.944 -11.7764 28.1602l-52.2236 7.67969c-2.38932 0.341146 -4.26693 1.53581 -5.63281 3.58398c-1.36523 2.04818 -2.21842 4.26693 -2.55957 6.65625v63.4873c0 2.38932 0.85319 4.60807 2.55957 6.65625
-c1.70703 2.04818 3.41374 3.24284 5.12012 3.58398l53.248 8.19238c2.73112 8.5332 6.486 17.237 11.2646 26.1113c-7.85091 10.9232 -18.0911 24.0648 -30.7207 39.4248c-2.04753 2.38932 -3.07129 4.77865 -3.07129 7.16797c0 1.70638 0.85319 3.75423 2.55957 6.14355
-c5.11979 6.82682 14.5065 17.0667 28.1602 30.7197c13.653 13.6536 22.6982 20.4805 27.1357 20.4805c2.38932 0 4.94922 -0.85319 7.67969 -2.55957l39.4248 -30.7207c8.19206 4.4375 16.7253 8.02148 25.5996 10.752c3.07227 25.9414 5.97363 43.6908 8.7041 53.248
-c1.02409 5.12044 4.4375 7.68066 10.2402 7.68066h63.4873c2.38932 0 4.60807 -0.682943 6.65625 -2.04883c2.04818 -1.36523 3.24284 -3.41309 3.58398 -6.14355l7.67969 -52.7363c9.55794 -3.07161 18.0915 -6.6556 25.6006 -10.752l40.96 30.7207
-c1.70638 1.70638 3.92513 2.55957 6.65625 2.55957c2.38932 0 4.77865 -0.85319 7.16797 -2.55957c24.5755 -22.8698 40.2767 -39.0833 47.1035 -48.6406c1.36523 -1.70638 2.04785 -3.92513 2.04785 -6.65625c0 -2.04753 -0.682617 -4.09538 -2.04785 -6.14355
-c-3.07161 -4.09635 -8.02083 -10.5817 -14.8477 -19.4561s-11.9469 -15.5303 -15.3604 -19.9678c4.77865 -9.55729 8.7041 -18.944 11.7764 -28.1602l52.2236 -7.67969c2.38932 -0.341797 4.4375 -1.53646 6.14453 -3.58398
-c1.70638 -2.04818 2.389 -4.26693 2.04785 -6.65625z" />
-    <glyph glyph-name="uniF10A" unicode="&#xf10a;" 
-d="M374.784 193.536c0 30.7201 -8.19206 58.7093 -24.5762 83.9678l-215.552 -215.04c25.9414 -17.0664 54.2721 -25.5996 84.9922 -25.5996c21.1621 0 41.3008 4.2666 60.416 12.7998c19.1146 8.5332 35.4984 19.6266 49.1514 33.2803
-c13.6536 13.653 24.7471 30.2077 33.2803 49.6641c8.5332 19.4557 12.6292 39.765 12.2881 60.9277zM89.5996 108.032l215.553 215.552c-25.6003 17.0664 -54.1016 25.5996 -85.5039 25.5996c-28.3307 0 -54.443 -6.8265 -78.3369 -20.4795
-c-23.8932 -13.6536 -42.6663 -32.7682 -56.3193 -57.3438c-13.6536 -24.5762 -20.651 -50.5176 -20.9922 -77.8242c0 -31.0612 8.5332 -59.5625 25.5996 -85.5039zM438.784 193.536c0 -30.0371 -5.80273 -58.7093 -17.4082 -86.0166
-c-11.6055 -27.3066 -27.1361 -50.6878 -46.5918 -70.1436c-19.4564 -19.4557 -42.8379 -35.1569 -70.1445 -47.1035c-27.3066 -11.9473 -55.637 -17.75 -84.9912 -17.4082c-29.3548 0.341146 -57.8564 6.14388 -85.5049 17.4082
-c-27.6478 11.2637 -51.029 26.9648 -70.1436 47.1035s-34.6452 43.5199 -46.5918 70.1436c-11.9466 26.6243 -17.7493 55.2965 -17.4082 86.0166s6.14388 59.2214 17.4082 85.5039c11.2637 26.2826 26.7943 49.6637 46.5918 70.1436
-c19.7975 20.4805 43.1787 36.0114 70.1436 46.5928c26.9655 10.5814 55.4671 16.3838 85.5049 17.4072c30.0371 1.02409 58.3675 -4.77832 84.9912 -17.4072c26.6243 -12.6296 50.0059 -28.1605 70.1445 -46.5928c20.1387 -18.4316 35.6693 -41.8128 46.5918 -70.1436
-c10.9225 -28.3307 16.7253 -56.832 17.4082 -85.5039z" />
-    <glyph glyph-name="uniF11F" unicode="&#xf11f;" 
-d="M320 183.296c0 -2.38932 -1.02409 -4.60807 -3.07227 -6.65625l-91.1357 -91.1357c-2.04818 -1.70638 -4.09603 -2.55957 -6.14355 -2.55957c-2.04818 0 -4.26693 0.85319 -6.65625 2.55957l-91.6484 91.1357c-2.73047 3.07227 -3.41309 6.48568 -2.04785 10.2402
-c1.70703 3.75456 4.6084 5.63184 8.7041 5.63184h54.7842v100.353c0 2.73047 0.85319 4.94889 2.55957 6.65527c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h54.7842c2.73047 0 4.94922 -0.853516 6.65625 -2.56055
-c1.70638 -1.70638 2.55957 -3.9248 2.55957 -6.65527v-100.353h54.7842c2.73047 0 4.94922 -0.85319 6.65625 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922
-c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832
-c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242
-c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF109" unicode="&#xf109;" 
-d="M27.834 38.4307v0c-6.66016 6.68164 -9.99023 14.7627 -9.99023 23.8193c33.7881 28.5498 59.0283 63.7803 76.166 105.691c17.1387 41.8906 25.707 86.1572 25.707 132.354c0 29.5039 8.56934 52.3682 25.707 69.5068c17.1387 17.6045 40.4697 27.5947 69.9951 31.4121
-c-1.44238 2.86328 -1.90918 6.19336 -1.90918 9.52344c0 7.14844 2.375 13.3203 7.61426 18.0928c4.77246 5.23926 10.4785 7.61426 17.626 7.61426c7.12695 0 13.3203 -2.375 18.0928 -7.61426c5.21777 -4.77246 7.61426 -10.9443 7.61426 -18.0928
-c0 -3.33008 -0.488281 -6.66016 -1.90918 -9.52344c29.5039 -3.81738 52.835 -13.8076 69.9736 -31.4121c16.6709 -17.1387 25.2402 -40.0029 25.2402 -69.5068c0 -46.1963 8.56934 -90.4629 25.707 -132.354c17.1377 -41.9111 42.3779 -77.1416 76.166 -105.691
-c0 -9.05664 -3.33008 -17.1377 -9.98926 -23.8193c-6.66016 -6.65918 -14.7627 -9.98926 -23.7988 -9.98926h-119.032c0 -19.0479 -6.66016 -34.7646 -19.9805 -48.084c-13.3418 -13.3203 -29.0586 -20.002 -48.084 -20.002c-18.5801 0 -34.7637 6.68164 -48.084 20.002
-c-13.3418 13.3193 -20.002 29.0361 -20.002 48.084h-119.032c-9.03613 0 -17.1377 3.33008 -23.7979 9.98926zM196.371 32.7256v0c-2.86328 0 -4.28418 -1.4209 -4.28418 -4.28418c0 -12.8535 4.75098 -23.7988 13.8086 -32.8555
-c9.03516 -9.03516 20.001 -13.8076 32.8545 -13.8076c2.8418 0 4.28418 1.44238 4.28418 4.28418c0 2.86328 -1.44238 4.28418 -4.28418 4.28418c-10.4775 0 -19.5352 3.81836 -26.6611 11.4326c-7.63574 7.14844 -11.4326 16.1836 -11.4326 26.6621
-c0 2.86328 -1.4209 4.28418 -4.28516 4.28418z" />
-    <glyph glyph-name="uniF11D" unicode="&#xf11d;" 
-d="M218.624 77.3115c1.36523 -3.41276 0.85319 -6.65527 -1.53613 -9.72754l-99.8398 -110.08c-2.04818 -1.70638 -4.26693 -2.55957 -6.65625 -2.55957c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957l-101.376 110.08c-2.73047 3.07227 -3.24219 6.31478 -1.53516 9.72754
-c1.70638 3.75521 4.43685 5.63281 8.19141 5.63281h64v356.352c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.9248 2.55957 6.65527 2.55957h54.7842c2.73047 0 4.94922 -0.85319 6.65625 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625
-v-356.352h64c3.75521 0 6.486 -1.8776 8.19238 -5.63281z" />
-    <glyph glyph-name="uniF15B" unicode="&#xf15b;" 
-d="M329.216 192c0 -2.73047 -0.85319 -4.94922 -2.55957 -6.65625l-91.6484 -91.1357c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957c-2.38932 0 -4.43717 0.85319 -6.14355 2.55957s-2.55957 3.75423 -2.55957 6.14355v55.2969h-100.864
-c-2.38932 0 -4.4375 0.85319 -6.14453 2.55957c-1.70638 1.70638 -2.73014 3.75423 -3.07129 6.14355v55.2969c0 2.38932 1.02376 4.43717 3.07129 6.14355c2.04818 1.70638 4.09635 2.55957 6.14453 2.55957h100.864v55.2969c0 2.38932 0.85319 4.43717 2.55957 6.14355
-s3.75423 2.55957 6.14355 2.55957s4.77865 -0.85319 7.16797 -2.55957l91.1367 -91.1357c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM374.784 192c0 28.3307 -6.9974 54.2721 -20.9922 77.8242c-13.9948 23.5521 -32.7682 42.4961 -56.3203 56.832
-s-49.4932 21.3333 -77.8232 20.9922c-28.3307 -0.341797 -54.443 -7.33919 -78.3369 -20.9922c-23.8932 -13.6536 -42.6663 -32.5977 -56.3193 -56.832c-13.6536 -24.235 -20.651 -50.1764 -20.9922 -77.8242c-0.341146 -27.6478 6.65625 -53.5892 20.9922 -77.8242
-c14.3359 -24.2344 33.109 -43.1784 56.3193 -56.832c23.2109 -13.653 49.3232 -20.6504 78.3369 -20.9922c29.013 -0.341146 54.9541 6.65625 77.8232 20.9922c22.8698 14.3359 41.6432 33.2799 56.3203 56.832c14.6771 23.5521 21.6745 49.4935 20.9922 77.8242z
-M438.784 192c0 -39.9362 -9.72819 -76.6296 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7975 -70.4847 -29.6963 -110.079 -29.6963c-39.5951 0 -76.4593 9.89876 -110.593 29.6963
-c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4505 -28.6722 70.1439 -29.6963 110.08s8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963
-c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF154" unicode="&#xf154;" 
-d="M164.168 448.328v-59.6387l-104.53 -104.529l104.53 -104.202v-59.3105l-164.168 163.513zM283.771 448.328v-104.53c24.0299 -3.27669 46.3122 -8.19206 66.8467 -14.7461c20.5352 -6.55339 37.9023 -13.9808 52.1016 -22.2822
-c14.1992 -8.30078 27.0879 -17.2572 38.666 -26.8691s20.9717 -19.5518 28.1807 -29.8193c7.20898 -10.2669 13.4349 -20.0973 18.6777 -29.4912c5.24284 -9.39323 9.06576 -18.568 11.4688 -27.5244c2.40299 -8.95703 4.36914 -16.4938 5.89844 -22.6104
-s2.29395 -11.2503 2.29395 -15.4014v-5.57031c-1.3112 2.40299 -3.38672 5.57064 -6.22656 9.50293s-10.1579 10.9229 -21.9541 20.9717c-11.7969 10.0488 -25.4502 18.3499 -40.96 24.9033c-15.5104 6.99089 -37.028 12.6706 -64.5527 17.0391
-c-16.821 2.62174 -34.4066 3.93262 -52.7568 3.93262c-12.015 0 -24.5762 -0.546224 -37.6836 -1.63867v-103.547l-164.167 163.513z" />
-    <glyph glyph-name="uniF10E" unicode="&#xf10e;" 
-d="M334.848 192l177.152 -177.152l-78.8477 -78.8477l-177.152 177.152l-177.152 -177.152l-78.8477 78.8477l177.152 177.152l-177.152 177.152l78.8477 78.8477l177.152 -177.152l177.152 177.152l78.8477 -78.8477z" />
-    <glyph glyph-name="uniF16C" unicode="&#xf16c;" 
-d="M146.432 55.2959v54.7842c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-91.6475c-2.38932 0 -4.60807 -0.85319 -6.65625 -2.55957c-2.04818 -1.70703 -2.90169 -3.92578 -2.56055 -6.65625v-54.7842
-c0 -2.73047 0.853516 -4.94922 2.56055 -6.65625c1.70638 -1.70638 3.92513 -2.55957 6.65625 -2.55957h91.6475c2.73047 0 4.94922 0.85319 6.65625 2.55957c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM146.432 164.864v55.2959
-c0 2.38932 -0.85319 4.43717 -2.55957 6.14355c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-91.6475c-2.38932 0 -4.60807 -0.853516 -6.65625 -2.56055c-2.04818 -1.70638 -2.90169 -3.75423 -2.56055 -6.14355v-55.2959
-c0 -2.38932 0.853516 -4.4375 2.56055 -6.14453c1.70638 -1.70638 3.92513 -2.55957 6.65625 -2.55957h91.6475c2.73047 0 4.94922 0.85319 6.65625 2.55957c1.70638 1.70703 2.55957 3.75521 2.55957 6.14453zM292.352 55.2959v54.7842
-c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70638 1.70638 -3.75423 2.55957 -6.14355 2.55957h-91.6484c-2.73047 0 -4.94922 -0.85319 -6.65625 -2.55957c-1.70638 -1.70703 -2.55957 -3.92578 -2.55957 -6.65625v-54.7842
-c0 -2.73047 0.85319 -4.94922 2.55957 -6.65625c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h91.6484c2.38932 0 4.43717 0.85319 6.14355 2.55957c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM146.432 274.944v54.7832
-c0 2.73112 -0.85319 4.94987 -2.55957 6.65625c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-91.6475c-2.38932 0 -4.60807 -0.853516 -6.65625 -2.56055c-2.04818 -1.70638 -2.90169 -3.92513 -2.56055 -6.65625v-54.7832
-c0 -2.73112 0.853516 -4.94987 2.56055 -6.65625c1.70638 -1.70703 3.92513 -2.56055 6.65625 -2.56055h91.6475c2.73047 0 4.94922 0.853516 6.65625 2.56055c1.70638 1.70638 2.55957 3.92513 2.55957 6.65625zM292.352 164.864v55.2959
-c0 2.38932 -0.85319 4.43717 -2.55957 6.14355c-1.70638 1.70703 -3.75423 2.56055 -6.14355 2.56055h-91.6484c-2.73047 0 -4.94922 -0.853516 -6.65625 -2.56055c-1.70638 -1.70638 -2.55957 -3.75423 -2.55957 -6.14355v-55.2959
-c0 -2.38932 0.85319 -4.4375 2.55957 -6.14453c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h91.6484c2.38932 0 4.43717 0.85319 6.14355 2.55957c1.70638 1.70703 2.55957 3.75521 2.55957 6.14453zM438.784 55.2959v54.7842
-c0 2.73047 -0.853516 4.94922 -2.56055 6.65625c-1.70638 1.70638 -3.9248 2.55957 -6.65527 2.55957h-91.1367c-2.73047 0 -4.94889 -0.85319 -6.65527 -2.55957c-1.70703 -1.70703 -2.56055 -3.92578 -2.56055 -6.65625v-54.7842
-c0 -2.73047 0.853516 -4.94922 2.56055 -6.65625c1.70638 -1.70638 3.9248 -2.55957 6.65527 -2.55957h91.1367c2.73047 0 4.94889 0.85319 6.65527 2.55957c1.70703 1.70703 2.56055 3.92578 2.56055 6.65625zM292.352 274.944v54.7832
-c0 2.73112 -0.85319 4.94987 -2.55957 6.65625c-1.70638 1.70703 -3.75423 2.56055 -6.14355 2.56055h-91.6484c-2.73047 0 -4.94922 -0.853516 -6.65625 -2.56055c-1.70638 -1.70638 -2.55957 -3.92513 -2.55957 -6.65625v-54.7832
-c0 -2.73112 0.85319 -4.94987 2.55957 -6.65625c1.70703 -1.70703 3.92578 -2.56055 6.65625 -2.56055h91.6484c2.38932 0 4.43717 0.853516 6.14355 2.56055c1.70638 1.70638 2.55957 3.92513 2.55957 6.65625zM438.784 164.864v55.2959
-c0 2.38932 -0.853516 4.43717 -2.56055 6.14355c-1.70638 1.70703 -3.9248 2.56055 -6.65527 2.56055h-91.1367c-2.73047 0 -4.94889 -0.853516 -6.65527 -2.56055c-1.70703 -1.70638 -2.56055 -3.75423 -2.56055 -6.14355v-55.2959
-c0 -2.38932 0.853516 -4.4375 2.56055 -6.14453c1.70638 -1.70638 3.9248 -2.55957 6.65527 -2.55957h91.1367c2.73047 0 4.94889 0.85319 6.65527 2.55957c1.70703 1.70703 2.56055 3.75521 2.56055 6.14453zM438.784 274.944v54.7832
-c0 2.73112 -0.853516 4.94987 -2.56055 6.65625c-1.70638 1.70703 -3.9248 2.56055 -6.65527 2.56055h-91.1367c-2.73047 0 -4.94889 -0.853516 -6.65527 -2.56055c-1.70703 -1.70638 -2.56055 -3.92513 -2.56055 -6.65625v-54.7832
-c0 -2.73112 0.853516 -4.94987 2.56055 -6.65625c1.70638 -1.70703 3.9248 -2.56055 6.65527 -2.56055h91.1367c2.73047 0 4.94889 0.853516 6.65527 2.56055c1.70703 1.70638 2.56055 3.92513 2.56055 6.65625zM475.648 366.08v-310.784
-c0 -12.6296 -4.60807 -23.3815 -13.8242 -32.2559c-9.21615 -8.875 -19.9681 -13.3125 -32.2559 -13.3125h-384c-12.2884 0 -23.0407 4.4375 -32.2568 13.3125c-9.21549 8.87435 -13.6527 19.6263 -13.3115 32.2559v310.784c0 12.6296 4.43717 23.3815 13.3115 32.2559
-c8.875 8.875 19.6273 13.4831 32.2568 13.8242h384c12.6289 0 23.3809 -4.60807 32.2559 -13.8242c8.87435 -9.21615 13.4824 -19.9681 13.8242 -32.2559z" />
-    <glyph glyph-name="uniF171" unicode="&#xf171;" 
-d="M292.352 100.864c0 -4.77865 -1.70638 -9.04525 -5.11914 -12.7998c-3.41341 -3.75521 -7.68034 -5.46191 -12.8008 -5.12012h-256c-5.11979 0 -9.38639 1.70671 -12.7998 5.12012c-3.41341 3.41276 -5.29069 7.67936 -5.63184 12.7998
-c-0.341146 5.11979 1.53613 9.55697 5.63184 13.3115l128 128c3.41341 3.41341 7.68001 5.12012 12.7998 5.12012c5.12044 0 9.38737 -1.70671 12.8008 -5.12012l128 -128c3.41276 -3.75456 5.11914 -8.19173 5.11914 -13.3115z" />
-    <glyph glyph-name="uniF116" unicode="&#xf116;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c71.3385 0 131.925 -25.2585 181.76 -75.7754l74.2402 52.7354v-238.08l-227.84 76.2881l67.0723 47.6162c-27.9896 22.1868 -59.7337 33.2803 -95.2324 33.2803
-c-41.9837 0 -77.8236 -14.848 -107.52 -44.5439c-29.6966 -29.696 -44.5449 -65.5361 -44.5449 -107.521c0 -41.9837 14.8483 -77.8236 44.5449 -107.52c29.696 -29.696 65.5358 -44.5439 107.52 -44.5439c27.9896 0 53.5895 6.8265 76.7998 20.4795
-c23.2109 13.6536 41.6429 32.2565 55.2959 55.8086l90.1123 -52.2246c-22.8691 -38.5703 -53.9303 -69.6315 -93.1836 -93.1836c-39.2539 -23.5521 -82.262 -35.1576 -129.024 -34.8164c-70.6562 0 -130.902 24.9173 -180.736 74.752
-c-49.8346 49.8346 -74.9225 110.251 -75.2637 181.248z" />
-    <glyph glyph-name="uniF16B" unicode="&#xf16b;" 
-d="M3.49219 294.4l101 102.399h25.0312v-78.7695h378.093v-47.2607h-378.093v-78.7695h-25.0312zM508.508 89.5996l-101.016 -102.399h-25.9082v78.7686h-378.092v47.2607h378.092v78.7705h25.9082z" />
-    <glyph glyph-name="uniF15E" unicode="&#xf15e;" 
-d="M109.568 9.72754h219.647v109.568h-219.647v-109.568zM365.568 9.72754h36.8633v256c0 2.73112 -1.02376 6.31543 -3.07129 10.7529c-2.04818 4.43685 -3.92578 7.84993 -5.63281 10.2393l-80.3838 79.8721c-1.70638 2.04818 -4.94889 4.09635 -9.72754 6.14453
-c-4.77865 2.04753 -8.53353 2.90072 -11.2646 2.55957v-118.784c0 -7.50911 -2.5599 -13.9945 -7.67969 -19.4561c-5.11979 -5.46094 -11.6051 -8.19141 -19.4561 -8.19141h-164.864c-7.50911 0 -13.8236 2.73047 -18.9434 8.19141
-c-5.12044 5.46159 -7.85124 11.9469 -8.19238 19.4561v118.784h-36.8643v-365.568h36.8643v118.784c0 7.50977 2.73079 13.9951 8.19238 19.4561c5.46094 5.46159 11.7754 8.19238 18.9434 8.19238h238.08c7.50977 0 13.9951 -2.73079 19.4561 -8.19238
-c5.46159 -5.46094 8.02181 -11.9463 7.68066 -19.4561v-118.784zM256 274.944v91.1357c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-54.7842c-2.38932 0 -4.60807 -0.85319 -6.65625 -2.55957
-c-2.04753 -1.70703 -2.90072 -3.92578 -2.55957 -6.65625v-91.1357c0 -2.73112 0.85319 -4.94987 2.55957 -6.65625c1.70703 -1.70703 3.92578 -2.56055 6.65625 -2.56055h54.7842c2.38932 0 4.60807 0.853516 6.65625 2.56055
-c2.04753 1.70638 2.90072 3.92513 2.55957 6.65625zM438.784 265.728v-265.216c0 -7.50911 -2.56022 -13.9945 -7.68066 -19.4561c-5.11979 -5.46094 -11.6048 -8.19141 -19.4551 -8.19141h-384c-7.85091 0 -14.3363 2.73047 -19.4561 8.19141
-c-5.12044 5.46159 -7.85124 11.9469 -8.19238 19.4561v384c0 7.50977 2.73079 13.9951 8.19238 19.4561c5.46094 5.46159 11.9463 8.19238 19.4561 8.19238h264.703c7.85091 0 16.3844 -2.04818 25.6006 -6.14453c9.21615 -4.0957 16.3841 -8.53288 21.5039 -13.3115
-l79.8721 -80.3838c5.46094 -5.12044 10.069 -12.2884 13.8242 -21.5039c3.75456 -9.21615 5.63184 -17.5791 5.63184 -25.0889z" />
-    <glyph glyph-name="uniF125" unicode="&#xf125;" 
-d="M238.08 364.032c23.2109 0 47.1042 -5.80273 71.6797 -17.4082c24.5762 -11.6055 45.7389 -25.6003 63.4883 -41.9844c17.7493 -16.3835 33.9626 -32.9382 48.6396 -49.6641c14.6777 -16.7253 25.6006 -30.8903 32.7686 -42.4951l11.7754 -17.4082
-c-3.07161 -4.77865 -7.16764 -11.0934 -12.2881 -18.9443c-5.11979 -7.85091 -15.8717 -21.6748 -32.2559 -41.4717c-16.3841 -19.7975 -32.9388 -37.3763 -49.6641 -52.7363s-37.3757 -29.3548 -61.9512 -41.9844c-24.5762 -12.6289 -48.6403 -18.7728 -72.1924 -18.4316
-c-23.5521 0.341146 -47.4453 6.14388 -71.6797 17.4082c-24.235 11.2637 -45.3978 25.7702 -63.4883 43.5195s-34.4746 34.8161 -49.1523 51.2002c-14.6771 16.3841 -25.5996 31.0615 -32.7676 44.0322l-11.7764 17.4082c2.73047 4.77865 6.65592 10.9225 11.7764 18.4316
-c5.11979 7.50911 15.8717 20.9919 32.2559 40.4482c16.3841 19.4557 33.1094 36.693 50.1758 51.7119c17.0671 15.0189 37.8883 28.5016 62.4639 40.4482c24.5762 11.9466 48.6403 17.9199 72.1924 17.9199zM238.08 78.3359c31.4023 0 58.3675 11.0934 80.8955 33.2803
-c22.528 22.1868 33.6214 49.152 33.2803 80.8955c-0.341146 31.7441 -11.4346 58.7096 -33.2803 80.8965c-21.8451 22.1868 -48.8102 33.4508 -80.8955 33.792c-32.0853 0.341146 -59.0508 -10.9229 -80.8965 -33.792c-21.8451 -22.8698 -33.109 -49.8353 -33.792 -80.8965
-c-0.682292 -31.0612 10.5817 -58.0264 33.792 -80.8955c23.2109 -22.8698 50.1764 -33.9632 80.8965 -33.2803zM180.736 192.512c0 38.2298 19.1146 57.3447 57.3438 57.3447c38.2292 0 57.1732 -19.1149 56.832 -57.3447
-c-0.341146 -38.2292 -19.2852 -57.1732 -56.832 -56.832c-37.5469 0.341797 -56.6615 19.2858 -57.3438 56.832z" />
-    <glyph glyph-name="uniF10B" unicode="&#xf10b;" 
-d="M479.232 3.07227c-49.1523 -2.56055 -141.824 -10.752 -192 -36.8643c-2.56055 -15.3604 -15.3604 -27.1357 -31.2324 -27.1357s-28.1602 11.7754 -30.7197 27.1357c-50.1768 26.1123 -143.36 34.8164 -192 36.8643c-17.4082 0 -31.7441 14.3359 -31.7441 31.7441
-v381.951c0 17.4082 14.3359 31.7441 31.7441 31.7441c1.02344 0 2.04785 -0.511719 3.07129 -0.511719c219.137 -5.63184 219.648 -62.9756 219.648 -62.9756s1.02441 57.3438 219.648 62.9756c1.53516 0 2.04785 0.511719 3.58398 0.511719
-c17.4072 0 31.7432 -14.3359 31.7432 -31.7441v-381.951c0 -17.4082 -14.3359 -31.7441 -31.7432 -31.7441zM224.256 348.672c-40.96 20.9922 -109.056 29.6963 -159.231 33.2803v-316.928c85.5039 -4.6084 133.632 -17.4082 159.231 -30.208v313.855zM446.976 381.952
-c-50.1758 -3.58398 -117.76 -12.2881 -158.72 -33.2803v-313.855c25.6006 12.7998 73.7285 25.5996 158.72 30.208v316.928zM415.232 321.024v-63.4883s-95.2324 0 -95.2324 -31.7441v63.4883s0 31.7441 95.2324 31.7441zM415.232 194.048v-64s-95.2324 0 -95.2324 -31.7441
-v64s0 31.7441 95.2324 31.7441zM192.512 289.28v-63.4883c0 31.7441 -95.2314 31.7441 -95.2314 31.7441v63.4883c95.2314 0 95.2314 -31.7441 95.2314 -31.7441zM192.512 162.304v-64c0 31.7441 -95.2314 31.7441 -95.2314 31.7441v64
-c95.2314 0 95.2314 -31.7441 95.2314 -31.7441z" />
-    <glyph glyph-name="uniF16A" unicode="&#xf16a;" 
-d="M509.952 193.024c0 -10.752 -1.02441 -20.9922 -2.04785 -31.7441c-0.512695 -2.56055 -1.02441 -5.12012 -1.02441 -7.68066c-1.53613 -8.70312 -3.07227 -16.8955 -5.63184 -25.5996c-0.511719 -1.53613 -0.511719 -3.07227 -1.02441 -4.6084
-c-6.14355 -20.9912 -14.8477 -40.96 -25.5996 -59.3916c-22.0156 -36.8643 -52.7363 -67.584 -89.5996 -89.5996c-18.4326 -10.752 -38.4004 -19.4561 -59.3926 -25.6006c-1.53613 -0.511719 -3.07227 -0.511719 -4.60742 -1.02344
-c-8.19238 -2.04883 -16.8965 -4.09668 -25.6006 -5.12012c-2.55957 -0.512695 -5.12012 -1.02441 -7.67969 -1.53613c-10.2402 -1.02441 -20.9922 -2.04785 -31.7441 -2.04785v0v0c-10.752 0 -20.9922 1.02344 -31.7441 2.04785
-c-2.55957 0.511719 -4.60742 1.02344 -7.16797 1.02344c-8.7041 1.53613 -17.4082 3.58398 -26.1123 5.63281c-1.02344 0.511719 -2.55957 0.511719 -4.0957 1.02344c-20.9922 6.14453 -40.96 14.8486 -59.3916 25.6006c-37.376 22.0156 -68.0967 52.7354 -90.1123 89.5996
-c-10.752 18.4316 -19.4561 38.4004 -25.5996 59.3916c0 1.53613 -0.512695 3.07227 -1.02441 4.6084c-2.04785 8.7041 -4.0957 16.8965 -5.12012 25.5996c-0.511719 2.56055 -1.02344 5.12012 -1.02344 7.68066c-1.53613 10.752 -2.56055 20.9922 -2.56055 31.7441v0v0
-c0 10.752 1.02441 21.5039 2.04785 31.7432c0.512695 2.56055 1.02441 5.12012 1.53613 7.68066c1.02441 8.7041 3.07227 16.8955 5.12012 25.5996c0.511719 1.53613 0.511719 3.07227 1.02441 4.6084c6.14355 20.9922 14.8477 40.96 25.5996 59.3916
-c22.0156 36.8643 52.7363 67.584 90.1123 89.6006c17.9199 10.752 38.3994 19.4551 59.3916 25.5996c1.02441 0.511719 2.56055 0.511719 4.0957 1.02441c8.7041 2.04785 16.8965 4.0957 25.6006 5.11914c2.55957 0.512695 5.12012 1.02441 7.67969 1.53613
-c10.752 1.02441 20.9922 2.04785 31.7441 2.04785v0v0c10.752 0 21.5039 -1.02344 31.7441 -2.04785c2.55957 -0.511719 5.12012 -1.02344 7.67969 -1.02344c8.7041 -1.53613 16.8965 -3.58398 25.6006 -5.63184c1.53516 -0.512695 3.07129 -0.512695 4.60742 -1.02441
-c20.9922 -6.14453 40.96 -14.8477 59.3926 -25.5996c36.8633 -22.0166 67.584 -52.7363 89.5996 -89.6006c10.752 -18.4316 19.4561 -38.3994 25.5996 -59.3916c0.512695 -1.53613 0.512695 -3.07227 1.02441 -4.6084c2.04785 -8.19141 4.0957 -16.8955 5.12012 -25.5996
-c0.511719 -2.56055 1.02344 -5.12012 1.53613 -7.68066c1.02344 -10.2393 2.04785 -20.9912 2.04785 -31.7432v0v0zM108.544 250.88l-47.1035 47.1045c-16.8965 -31.2324 -27.6484 -66.5605 -27.6484 -104.96c0 -38.4004 10.752 -73.7285 27.6484 -104.96l47.1035 47.1035
-c-7.16797 17.9199 -11.2637 37.376 -11.2637 57.8564c0 20.4795 4.0957 39.9355 11.2637 57.8555zM256 -29.1836c38.4004 0 73.7275 10.2393 104.96 27.6475l-47.1035 47.1045c-17.9209 -7.16797 -37.376 -11.2646 -57.8564 -11.2646s-39.9355 4.09668 -57.8564 11.2646
-l-47.1035 -47.1045c31.2324 -17.4082 66.5596 -27.6475 104.96 -27.6475zM256 415.232c-38.4004 0 -73.7275 -10.752 -104.96 -27.6484l47.1035 -47.1035c17.9209 7.16797 37.376 11.2637 57.8564 11.2637s39.9355 -4.0957 57.8564 -11.2637l47.1035 47.1035
-c-31.2324 16.8965 -66.5596 27.6484 -104.96 27.6484zM378.368 225.28v0c-11.7764 44.0312 -46.0801 78.3359 -90.1123 90.1113v0v0c-4.0957 1.02441 -8.19141 2.04883 -12.7998 2.56055c-6.14453 1.02344 -12.7998 2.04785 -19.4561 2.04785
-s-13.3115 -1.02441 -19.4561 -2.04785c-4.6084 -0.511719 -8.7041 -1.53613 -12.7998 -2.56055v0v0c-44.0322 -11.7754 -78.3359 -46.0801 -90.1123 -90.1113v0v0c-1.02344 -4.09668 -2.04785 -8.19238 -2.55957 -12.7998
-c-1.02441 -6.14453 -2.04785 -12.8008 -2.04785 -19.4561c0 -6.65625 1.02344 -13.3125 2.04785 -19.4561c0.511719 -4.6084 1.53613 -8.7041 2.55957 -12.8008v0v0c11.7764 -44.0312 46.0801 -78.3359 90.1123 -90.1113v0v0
-c4.0957 -1.02441 8.19141 -2.04785 12.7998 -2.56055c6.14453 -1.02344 12.7998 -2.04785 19.4561 -2.04785s13.3115 1.02441 19.4561 2.04785c4.6084 0.512695 8.7041 1.53613 13.3115 2.56055v0v0c43.5205 11.7754 77.8242 46.0801 89.6006 90.1113v0v0
-c1.02344 4.09668 2.04785 8.19238 2.55957 12.8008c1.02441 6.14355 2.04785 12.7998 2.04785 19.4561c0 6.65527 -1.02344 13.3115 -2.04785 19.4561c-0.511719 4.60742 -1.53613 8.70312 -2.55957 12.7998v0zM450.56 297.984l-47.1035 -47.1045
-c7.16797 -17.9199 11.2637 -37.376 11.2637 -57.8555c0 -20.4805 -4.0957 -39.9365 -11.2637 -57.8564l47.1035 -47.1035c17.4082 31.2314 27.6484 66.5596 27.6484 104.96c0 38.3994 -10.2402 73.7275 -27.6484 104.96z" />
-    <glyph glyph-name="uniF12D" unicode="&#xf12d;" 
-d="M94.208 395.264c15.3604 10.752 39.4238 15.8721 72.1924 15.8721h39.4238v-39.9355h-20.9922c-10.2402 0 -19.4561 -0.511719 -26.1123 -1.53613c-6.65527 -1.02441 -11.7754 -3.07227 -15.8721 -5.63184c-3.58398 -3.07227 -6.14355 -6.65625 -7.67969 -11.2646
-c-1.53613 -4.60742 -2.55957 -10.2393 -2.55957 -17.4072c0 -13.8242 0.511719 -27.1367 1.53516 -40.4482c0.512695 -13.3125 1.02441 -27.6484 1.02441 -43.0078c0 -19.4561 -4.0957 -33.792 -11.7764 -42.4961c-7.67969 -8.7041 -20.9912 -14.3359 -39.4238 -17.4082
-v-2.04785c18.4326 -3.07227 31.2324 -9.21582 39.4238 -17.9199c8.19238 -8.7041 11.7764 -22.5283 11.7764 -41.9844c0 -15.8721 -0.511719 -30.208 -1.02441 -43.0078c-1.02344 -13.3125 -1.53516 -26.624 -1.53516 -40.4482
-c0 -7.16797 1.02344 -13.3115 2.55957 -17.9199c1.53613 -4.60742 4.0957 -8.19141 7.67969 -10.752c4.09668 -2.55957 9.2168 -4.6084 15.8721 -5.63184c7.16797 -1.02441 15.8721 -1.53613 26.1123 -1.53613h20.9922v-39.9355h-39.4238
-c-32.7686 0 -56.832 5.11914 -72.1924 15.3594c-15.3604 10.752 -23.04 29.6963 -23.04 57.3438c0 9.2168 0.511719 17.4082 1.02441 24.5762c0.511719 7.16797 1.02344 13.8242 1.53516 20.4805c1.02441 6.65625 1.53613 13.3115 2.04883 19.9678
-c0.511719 6.65625 0.511719 14.3359 0.511719 22.5283c0 4.0957 -1.02441 8.7041 -3.07227 13.3115c-2.04785 4.09668 -5.63184 8.19238 -11.2637 11.7764c-5.12012 3.58398 -12.2881 6.14355 -21.5039 8.7041c-9.21582 2.55957 -20.4805 3.58398 -34.3047 4.0957v44.0322
-c13.8242 0 25.0889 1.53613 34.3047 3.58398c8.7041 2.55957 16.3838 5.12012 21.5039 8.7041c5.63184 3.58398 9.21582 7.67969 11.2637 12.2881c2.04785 4.0957 3.07227 8.7041 3.07227 13.3115c0 7.67969 0 14.8477 -0.511719 22.0166
-c-0.512695 6.65527 -1.02441 13.3115 -2.04883 19.9678c-0.511719 6.65527 -1.02344 13.8242 -1.53516 20.9922c-0.512695 7.67969 -1.02441 15.3594 -1.02441 24.5752c0 27.6484 7.67969 46.5928 23.04 56.832zM478.208 216.576
-c8.7041 -2.04785 20.4805 -3.58398 34.3037 -3.58398v-44.0322c-13.8232 -0.511719 -25.0879 -2.04785 -34.3037 -4.0957s-16.3838 -5.12012 -22.0156 -8.7041c-5.12012 -3.58398 -9.2168 -7.67969 -11.2646 -11.7764
-c-2.04785 -4.60742 -3.07129 -9.21582 -3.07129 -13.3115c0 -8.19238 0.511719 -15.8721 1.02344 -22.5283s1.02441 -13.3115 2.04785 -19.9678c0.512695 -6.65625 1.53613 -13.3125 2.04785 -20.4805c0.512695 -7.16797 0.512695 -15.3594 0.512695 -24.5762
-c0 -27.6475 -7.68066 -46.5918 -23.04 -57.3438c-15.3604 -10.2402 -39.4238 -15.3594 -72.1924 -15.3594h-39.4238v39.9355h20.9922c10.752 0 19.4561 0.511719 26.1113 1.53613c6.65625 1.02344 11.7764 2.55957 15.3604 5.63184
-c4.0957 2.56055 6.65625 6.14453 8.19238 10.752c1.53613 4.6084 2.04785 10.752 2.04785 17.9199c0 13.8242 0 27.1357 -1.02441 40.4482c-0.511719 12.7998 -1.02344 27.1357 -1.02344 43.0078c0 19.4561 4.0957 33.2803 11.7754 41.9844
-c8.19238 8.7041 20.9922 14.8477 39.4248 17.9199v2.04785c-18.4326 3.07227 -31.2324 8.7041 -39.4248 17.4082c-7.67969 8.7041 -11.7754 23.04 -11.7754 42.4961c0 15.3594 0 29.6953 1.02344 43.0078c1.02441 13.3115 1.02441 26.624 1.02441 40.4482
-c0 7.16797 -0.511719 12.7998 -2.04785 17.4072c-1.53613 4.6084 -4.09668 8.19238 -8.19238 11.2646c-3.58398 2.55957 -8.7041 4.60742 -15.3604 5.63184c-6.65527 1.02441 -15.3594 1.53613 -26.1113 1.53613h-20.9922v39.9355h39.4238
-c32.7686 0 56.832 -5.12012 72.1924 -15.8721c15.3594 -10.2393 23.04 -29.1836 23.04 -56.832c0 -9.21582 0 -16.8955 -0.512695 -24.5752c-0.511719 -7.16797 -1.53516 -14.3369 -2.04785 -20.9922c-1.02344 -6.65625 -1.53613 -13.3125 -2.04785 -19.9678
-c-0.511719 -7.16895 -1.02344 -14.3369 -1.02344 -22.0166c0 -4.60742 1.02344 -9.21582 3.07129 -13.3115c2.04785 -4.6084 6.14453 -8.7041 11.2646 -12.2881c5.63184 -3.58398 12.7998 -6.14453 22.0156 -8.7041z" />
-    <glyph glyph-name="uniF152" unicode="&#xf152;" 
-d="M192 96.7676h32.2559v-64h-32.2559v64zM256 96.7676h32.2559v-64h-32.2559v64zM320 96.7676h32.2559v-64h-32.2559v64zM416.256 144.384l95.7441 -79.8721l-95.7441 -79.8721h-32.2559v159.744h32.2559zM512 400.384v-159.744h-159.744v159.744h159.744zM463.872 288.768
-v64h-64v-64h64zM0 -15.3604v159.744h160.256v-159.744h-160.256zM48.1279 96.7676v-64h64v64h-64zM288.256 352.768h31.7441v-64h-31.7441v64zM224.256 352.768h31.7441v-64h-31.7441v64zM160.256 352.768h31.7441v-64h-31.7441v64zM128 240.64h-32.2559l-95.7441 79.8721
-l95.7441 79.8721h32.2559v-159.744z" />
-    <glyph glyph-name="uniF13B" unicode="&#xf13b;" 
-d="M475.648 265.728c9.89844 0 18.4316 -3.58398 25.5996 -10.752s10.752 -15.8717 10.752 -26.1113c0 -10.2402 -3.58398 -18.7738 -10.752 -25.6006c-7.16797 -6.82617 -15.7012 -10.4102 -25.5996 -10.752v-109.567c0 -9.89909 -3.75488 -18.4326 -11.2646 -25.6006
-c-7.50911 -7.16797 -16.0423 -10.9225 -25.5996 -11.2637c-79.5306 66.2188 -156.843 102.4 -231.937 108.544c-10.9225 -3.41341 -19.6263 -9.55729 -26.1113 -18.4316c-6.48568 -8.875 -9.38704 -18.6032 -8.7041 -29.1846
-c0.682292 -10.5814 4.43685 -19.2852 11.2637 -26.1113c-3.75456 -6.48568 -5.97331 -12.8005 -6.65625 -18.9443c-0.682292 -6.14388 0.000651042 -11.6051 2.04883 -16.3838c2.04753 -4.77865 5.11947 -10.0693 9.21582 -15.8721
-c4.0957 -5.80273 8.70345 -10.5814 13.8232 -14.3359c5.12044 -3.75521 11.0941 -8.53385 17.9209 -14.3359c-5.80273 -10.9232 -16.555 -18.7741 -32.2568 -23.5527c-15.7012 -4.77865 -31.7438 -5.97331 -48.1279 -3.58398
-c-16.3835 2.38932 -28.8421 7.68001 -37.376 15.8721c-1.36523 4.4375 -4.2666 12.8001 -8.7041 25.0879c-4.43685 12.2884 -7.50879 21.334 -9.21582 27.1367c-1.70638 5.80273 -3.75423 14.3359 -6.14355 25.5996c-2.38932 11.2643 -3.92546 20.8216 -4.6084 28.6719
-c-0.682292 7.85091 -0.34082 17.2376 1.02441 28.1602c1.36523 10.9225 3.41309 21.5039 6.14355 31.7441h-34.8154c-12.2884 0 -23.0407 4.43717 -32.2568 13.3115c-9.21549 8.875 -13.6527 19.627 -13.3115 32.2559v54.7842c0 12.6296 4.43717 23.3815 13.3115 32.2559
-c8.875 8.875 19.6273 13.3125 32.2568 13.3125h137.216c82.944 0 168.277 36.6934 256 110.08c9.89844 0 18.4316 -3.75456 25.5996 -11.2637c7.16797 -7.50977 10.9229 -16.0433 11.2646 -25.6006v-109.568zM438.784 93.1836v272.385
-c-75.0938 -57.3444 -148.139 -89.9417 -219.136 -97.792v-77.3125c71.6797 -7.85026 144.725 -40.277 219.136 -97.2803z" />
-    <glyph glyph-name="uniF147" unicode="&#xf147;" 
-d="M192 2.04785l-189.952 -63.4883l62.9766 190.465l317.439 317.439l126.977 -126.976zM65.0244 2.04785l95.2314 31.7441l-63.4883 63.4883zM128.512 129.024l63.4883 -63.4883l190.464 190.464l-63.4883 63.4883z" />
-    <glyph glyph-name="uniF115" unicode="&#xf115;" 
-d="M0 448.512h512v-512h-512v512zM448 0.511719v256h-384v-256h384zM448 320.512v64h-384v-64h384zM224.256 32.7676v95.7441h-64l95.7441 96.2559l96.2559 -96.2559h-64v-95.7441h-64z" />
-    <glyph glyph-name="uniF15A" unicode="&#xf15a;" 
-d="M237.568 421.376l228.863 -228.352l-228.863 -229.376l-80.3848 81.9199l89.6006 90.1113h-237.568v114.688h237.568l-89.6006 90.1123z" />
-    <glyph glyph-name="uniF15F" unicode="&#xf15f;" 
-d="M495.616 19.9678c18.9434 -18.9434 18.9434 -49.1514 0 -67.584c-18.4326 -18.9434 -48.6406 -18.9434 -67.584 0l-111.616 111.616c-31.7441 -19.4561 -68.0957 -31.2324 -108.032 -31.2324c-114.176 0 -206.848 92.6729 -206.848 206.849
-s92.6719 206.848 206.848 206.848s206.849 -92.6719 206.849 -206.848c0 -39.4238 -11.7764 -76.2881 -31.2324 -108.032zM208.384 96.7676c78.8486 0 142.849 64 142.849 142.849c0 79.3594 -64 143.359 -142.849 143.359c-79.3594 0 -143.359 -64 -143.359 -143.359
-c0 -78.8486 64 -142.849 143.359 -142.849z" />
-    <glyph glyph-name="uniF134" unicode="&#xf134;" 
-d="M416.256 100.864c0 7.85026 -2.73047 14.3356 -8.19141 19.4561l-59.3926 59.3916c-5.46094 5.46159 -11.9463 8.19238 -19.4561 8.19238c-8.19206 0 -15.0186 -3.07194 -20.4795 -9.21582c0.341146 -0.341797 2.04785 -2.0485 5.12012 -5.12012
-c3.07161 -3.07227 5.11947 -5.12044 6.14355 -6.14453s2.56022 -2.90137 4.6084 -5.63184c2.04753 -2.73047 3.24219 -5.11979 3.58398 -7.16797c0.341146 -2.04818 0.682292 -4.60807 1.02344 -7.67969c0 -7.85091 -2.73047 -14.3363 -8.19141 -19.4561
-c-5.46159 -5.12044 -11.9469 -7.85124 -19.4561 -8.19238c-2.73112 0 -5.29134 0.341471 -7.68066 1.02441c-2.38932 0.682292 -4.77865 1.87695 -7.16797 3.58398c-2.38932 1.70638 -4.2666 3.24219 -5.63184 4.60742s-3.41309 3.41341 -6.14355 6.14453
-c-2.73112 2.73047 -4.43783 4.43717 -5.12012 5.12012c-6.48568 -5.80273 -9.72852 -12.6296 -9.72852 -20.4805s2.73079 -14.3363 8.19238 -19.4561l58.8799 -59.3916c5.11979 -5.12044 11.6051 -7.68066 19.4561 -7.68066c7.50911 0 13.9945 2.56022 19.4561 7.68066
-l41.9844 41.4717c5.46094 5.46159 8.19141 11.9469 8.19141 19.4561v-0.511719zM215.04 302.592c0 7.50977 -2.5599 13.9951 -7.67969 19.4561l-58.8799 58.8799c-5.46159 5.46159 -11.9469 8.19238 -19.4561 8.19238c-7.50977 0 -13.9951 -2.5599 -19.4561 -7.67969
-l-41.9844 -41.9844c-5.46159 -5.11979 -8.19238 -11.4346 -8.19238 -18.9443c0 -7.50911 2.73079 -13.9945 8.19238 -19.4561l59.3916 -59.3916c5.12044 -5.11979 11.6058 -7.67969 19.4561 -7.67969c7.85091 0 14.6777 2.90137 20.4805 8.7041
-c-0.682943 0.682292 -2.56022 2.55957 -5.63184 5.63184c-3.07227 3.07161 -5.12044 5.11947 -6.14453 6.14355s-2.38932 2.73079 -4.0957 5.12012s-2.90104 4.77865 -3.58398 7.16797s-1.02441 5.12012 -1.02441 8.19238c0 7.50911 2.56022 13.9945 7.68066 19.4561
-c5.11979 5.46094 11.6051 8.02083 19.4561 7.67969c3.07161 0 5.80208 -0.341471 8.19141 -1.02441c2.38932 -0.682292 4.77865 -1.87695 7.16797 -3.58398c2.38932 -1.70638 4.09603 -3.07161 5.12012 -4.0957s3.07227 -3.07194 6.14453 -6.14355
-c3.07161 -3.07227 4.94889 -4.94987 5.63184 -5.63281c6.14388 5.80273 9.21582 12.8001 9.21582 20.9922zM471.04 100.864c0 -22.528 -8.19206 -41.8135 -24.5762 -57.8564l-41.9834 -41.4717c-15.7018 -16.043 -34.9873 -24.0645 -57.8564 -24.0645
-c-23.2109 0 -42.667 8.19206 -58.3682 24.5762l-58.8799 58.8799c-15.7012 16.043 -23.5518 35.499 -23.5518 58.3682c0 23.2109 8.36263 43.0085 25.0879 59.3926l-25.0879 25.0879c-16.3841 -16.7253 -36.1816 -25.0879 -59.3926 -25.0879
-c-22.8691 0 -42.3249 8.02116 -58.3672 24.0635l-59.3926 59.3916c-16.0423 16.043 -24.0635 35.499 -24.0635 58.3682c0 22.8698 8.02116 42.1553 24.0635 57.8564l41.9844 41.9834c16.0423 15.7018 35.4984 23.5527 58.3682 23.5527
-c22.8691 0 42.3249 -8.02148 58.3672 -24.0645l58.8809 -59.3916c15.7012 -15.7012 23.5518 -34.9867 23.5518 -57.8564c0 -23.5521 -8.36263 -43.5199 -25.0879 -59.9033l25.0879 -25.0889c16.3841 16.7259 36.1813 25.0889 59.3916 25.0889
-c22.8691 0 42.3252 -8.02148 58.3682 -24.0645l59.3916 -59.3916c16.043 -16.043 24.0645 -35.499 24.0645 -58.3682z" />
-    <glyph glyph-name="uniF140" unicode="&#xf140;" 
-d="M329.216 220.16v-18.4326c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-237.568c-2.73047 0 -4.94889 0.853516 -6.65527 2.56055c-1.70703 1.70638 -2.56055 3.9248 -2.56055 6.65527v18.4326
-c0 2.38932 0.853516 4.43717 2.56055 6.14355c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055h237.568c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.75423 2.55957 -6.14355zM365.568 92.1602v237.567
-c0 12.6296 -4.4375 23.3818 -13.3125 32.2568c-8.87435 8.87435 -19.6263 13.3115 -32.2559 13.3115h-237.568c-12.6289 0 -23.3809 -4.43717 -32.2559 -13.3115c-8.87435 -8.875 -13.4824 -19.6273 -13.8242 -32.2568v-237.567
-c0 -12.6296 4.60807 -23.5524 13.8242 -32.7686c9.21615 -9.21549 19.9681 -13.6527 32.2559 -13.3115h237.568c12.6296 0 23.3815 4.43717 32.2559 13.3115c8.875 8.875 13.3125 19.7979 13.3125 32.7686zM402.432 329.728v-237.567
-c0 -22.8691 -8.02116 -42.3252 -24.0635 -58.3682c-16.043 -16.043 -35.499 -24.0645 -58.3682 -24.0645h-237.568c-22.8691 0 -42.3249 8.02148 -58.3672 24.0645c-16.043 16.043 -24.0645 35.499 -24.0645 58.3682v237.567c0 22.528 8.02148 41.8135 24.0645 57.8564
-c16.0423 16.043 35.498 24.235 58.3672 24.5762h237.568c22.528 0 41.984 -8.19206 58.3682 -24.5762s24.4053 -35.6696 24.0635 -57.8564z" />
-    <glyph glyph-name="uniF11C" unicode="&#xf11c;" 
-d="M292.352 192.512c0 -20.1387 -6.99707 -37.376 -20.9912 -51.7119c-13.9948 -14.3359 -31.2321 -21.5039 -51.7119 -21.5039c-20.4805 0 -37.7181 7.16797 -51.7129 21.5039c-13.9941 14.3359 -21.1621 31.5732 -21.5039 51.7119
-c-0.341146 20.1387 6.82682 37.376 21.5039 51.7119c14.6777 14.3359 31.9154 21.5039 51.7129 21.5039c19.7969 0 37.0342 -7.16797 51.7119 -21.5039c14.6771 -14.3359 21.6742 -31.5732 20.9912 -51.7119zM219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922
-c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832
-c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242
-c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF16E" unicode="&#xf16e;" 
-d="M218.624 307.712c-1.70638 -3.75456 -4.43717 -5.63184 -8.19238 -5.63184h-64v-356.353c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-54.7842c-2.73047 0 -4.94889 0.853516 -6.65527 2.56055
-c-1.70703 1.70638 -2.56055 3.9248 -2.56055 6.65527v356.353h-64c-4.0957 0 -6.82617 1.87728 -8.19141 5.63184c-1.36589 3.75456 -0.854167 6.9974 1.53516 9.72852l99.8408 110.079c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055
-c2.38932 0 4.60807 -0.853516 6.65625 -2.56055l101.376 -110.079c2.38932 -3.07227 2.90137 -6.3151 1.53613 -9.72852z" />
-    <glyph glyph-name="uniF13D" unicode="&#xf13d;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM109.056 150.528h293.889v83.9678h-293.889v-83.9678z" />
-    <glyph glyph-name="uniF165" unicode="&#xf165;" 
-d="M398.464 0h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944zM358.848 122.672
-c3.56836 -3.56836 5.34473 -7.87207 5.34473 -12.96s-1.77637 -9.3916 -5.34473 -12.96c-3.56738 -3.56836 -7.87207 -5.34375 -12.9434 -5.34375c-5.08789 0 -9.4082 1.77539 -12.9766 5.34375l-42.2881 42.6562c-13.1836 -7.87207 -26.9121 -11.792 -41.1357 -11.792
-c-21.5996 0 -40.1279 7.66406 -55.6318 23.0234c-15.4883 15.376 -23.2324 33.9844 -23.2324 55.8242c0 21.584 7.68066 40.0479 23.04 55.4238c15.3604 15.3604 33.9688 23.04 55.8086 23.04c21.8555 0 40.4473 -7.67969 55.8232 -23.04
-c15.3447 -15.376 23.0244 -33.8398 23.0244 -55.4238c0 -13.7119 -4.06348 -27.4238 -12.1924 -41.1357zM210.848 168c10.8008 -10.6562 23.6807 -16 38.6719 -16c14.9766 0 27.8242 5.34375 38.4805 16c10.6562 10.6719 16 23.4883 16 38.4805
-c0 14.9912 -5.34375 27.8076 -16 38.4795s-23.5039 16 -38.4805 16c-14.9912 0 -27.8711 -5.32812 -38.6719 -16c-10.7998 -10.6719 -16.1914 -23.4883 -16.1914 -38.4795c0.015625 -14.9922 5.3916 -27.8086 16.1914 -38.4805z" />
-    <glyph glyph-name="uniF117" unicode="&#xf117;" 
-d="M512 -6.65625c0 -30.208 -24.0645 -54.7842 -54.2725 -54.7842h-400.896c-30.208 0 -54.7842 24.5762 -54.7842 54.7842v400.384c0 30.208 24.5762 54.7842 54.7842 54.7842h400.896c30.208 0 54.2725 -24.5762 54.2725 -54.7842v-400.384zM464.384 398.848
-c0 1.02441 -0.511719 2.04883 -1.53613 2.04883h-411.136c-1.02344 0 -1.53613 -1.02441 -1.53613 -2.04883v-410.624c0 -1.02344 0.512695 -2.04785 1.53613 -2.04785h411.136c1.02441 0 1.53613 1.02441 1.53613 2.04785v410.624zM100.864 76.7998l-38.9121 27.6484
-l96.2559 134.655l61.4404 -61.4395l65.5352 114.688l65.0244 -80.8955l61.4404 98.8164l40.96 -25.0889l-97.792 -156.159l-62.9766 78.3359l-61.4395 -108.032l-66.0488 66.0479z" />
-    <glyph glyph-name="uniF157" unicode="&#xf157;" 
-d="M0 10.752l102.912 103.424l-75.7764 74.752h225.792v-225.792l-74.752 75.7764l-102.912 -102.912zM259.072 195.072v225.792l74.752 -75.7764l103.424 102.912l74.752 -74.752l-102.912 -103.424l75.7764 -74.752h-225.792z" />
-    <glyph glyph-name="uniF14D" unicode="&#xf14d;" 
-d="M365.568 174.08v36.8643c0 4.77865 -1.70671 9.04525 -5.12012 12.7998s-7.68001 5.46126 -12.7998 5.12012h-91.6484v91.6475c0 5.12044 -1.87728 9.38704 -5.63184 12.7998c-3.75456 3.41341 -8.02116 5.29102 -12.7998 5.63281h-36.3525
-c-5.11979 0 -9.38639 -1.8776 -12.7998 -5.63281c-3.41341 -3.75456 -5.29069 -8.02116 -5.63184 -12.7998v-91.6475h-91.1357c-5.12044 0 -9.55794 -1.70671 -13.3125 -5.12012s-5.46126 -7.68001 -5.12012 -12.7998v-36.8643
-c0 -4.77865 1.70671 -9.04525 5.12012 -12.7998s7.85091 -5.46126 13.3125 -5.12012h91.1357v-91.6484c0 -4.77865 1.87728 -9.04525 5.63184 -12.7998s8.02116 -5.63184 12.7998 -5.63184h36.3525c5.11979 0 9.38639 1.87728 12.7998 5.63184
-s5.29069 8.02116 5.63184 12.7998v91.6484h91.6484c4.77865 0 9.04525 1.70671 12.7998 5.12012s5.46126 7.68001 5.12012 12.7998zM438.784 329.728v-274.432c0 -22.528 -8.02148 -41.8132 -24.0645 -57.8555c-16.0423 -16.043 -35.4984 -24.235 -58.3682 -24.5762h-273.92
-c-22.8691 0 -42.3249 8.19206 -58.3672 24.5762c-16.043 16.3835 -24.0645 35.6686 -24.0645 57.8555v274.432c0 22.528 8.02148 41.8135 24.0645 57.8564c16.0423 16.043 35.498 24.235 58.3672 24.5762h273.92c22.8698 0 42.3258 -8.19206 58.3682 -24.5762
-c16.043 -16.3841 24.0645 -35.6696 24.0645 -57.8564z" />
-    <glyph glyph-name="uniF13C" unicode="&#xf13c;" 
-d="M0 120.32v144.384h512v-144.384h-512z" />
-    <glyph glyph-name="uniF15D" unicode="&#xf15d;" 
-d="M0 12.2881l180.224 180.224l-180.224 180.225l75.7764 75.7754l180.224 -179.712l75.7764 -76.2881l-256 -256z" />
-    <glyph glyph-name="uniF161" unicode="&#xf161;" 
-d="M252.384 244.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.752v121.904h121.904v-24.3838h-0.0166016zM398.672 244.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.7686v121.904h121.904v-24.3838zM398.464 16h-284.944
-c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 352
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF136" unicode="&#xf136;" 
-d="M91.6484 228.864h145.92v55.2959c0 20.1387 -7.16797 37.376 -21.5039 51.7119c-14.3366 14.3359 -31.5742 21.3333 -51.7129 20.9922c-20.1387 -0.341797 -37.376 -7.33919 -51.7119 -20.9922c-14.3359 -13.6536 -21.333 -30.891 -20.9912 -51.7119v-55.2959z
-M329.216 201.728v-164.863c0 -7.50977 -2.73047 -13.8245 -8.19141 -18.9443c-5.46159 -5.11979 -11.9469 -7.85059 -19.4561 -8.19238h-273.92c-7.85091 0 -14.3363 2.73079 -19.4561 8.19238c-5.12044 5.46159 -7.85124 11.7764 -8.19238 18.9443v164.863
-c0 7.50977 2.73079 13.9951 8.19238 19.4561c5.46094 5.46159 11.9463 8.02181 19.4561 7.68066h8.70312v55.2959c0 34.8158 12.6296 64.8532 37.8887 90.1123c25.2585 25.2585 55.2956 37.8877 90.1113 37.8877c34.8164 0 65.0244 -12.6292 90.624 -37.8877
-c25.6003 -25.2591 38.0589 -55.2965 37.376 -90.1123v-55.2959h9.2168c7.85026 0 14.3356 -2.56022 19.4561 -7.68066c5.11979 -5.11979 7.85026 -11.6051 8.19141 -19.4561z" />
-    <glyph glyph-name="uniF166" unicode="&#xf166;" 
-d="M252.384 228.576h-73.1357v-24.3838h73.1357v-73.1367h-121.888v24.3682h73.1357v24.3838h-73.1357v73.1523h121.904v-24.3838h-0.0166016zM398.672 228.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.7686v121.904h121.904v-24.3838zM398.464 0
-h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF127" unicode="&#xf127;" 
-d="M484.571 338.286c7.61914 0 14.0954 -2.66667 19.4287 -8s8 -11.8096 8 -19.4287v-347.429c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8096 -8 -19.4287 -8h-274.285c-7.61914 0 -14.0954 2.66667 -19.4287 8s-8 11.8096 -8 19.4287v82.2852h-155.429
-c-7.61914 0 -14.0954 2.66667 -19.4287 8c-5.33333 5.33333 -8 11.8096 -8 19.4287v192c0 7.61914 1.90462 16.0003 5.71387 25.1436c3.8099 9.14258 8.38151 16.3805 13.7148 21.7139l116.571 116.571c5.33333 5.33333 12.5713 9.90495 21.7139 13.7148
-c9.14323 3.80924 17.5244 5.71387 25.1436 5.71387h118.856c7.61914 0 14.0954 -2.66667 19.4287 -8s8 -11.8096 8 -19.4287v-93.7139c12.9525 7.61914 25.1429 11.4287 36.5713 11.4287h118.857zM329.143 277.429l-85.4287 -85.4287h85.4287v85.4287zM146.286 387.143
-l-85.4287 -85.4287h85.4287v85.4287zM202.286 202.286l90.2852 90.2852v118.857h-109.714v-118.857c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8096 -8 -19.4287 -8h-118.857v-182.856h146.286v73.1426c0 7.61914 1.90462 16 5.71387 25.1426
-c3.8099 9.14323 8.38151 16.3815 13.7148 21.7148zM475.429 -27.4287v329.143h-109.715v-118.856c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-118.857v-182.857h256z" />
-    <glyph glyph-name="uniF167" unicode="&#xf167;" 
-d="M243.248 131.04h-121.904v121.92h48.752v-97.5361h24.3848v97.5361h48.7676v-121.92zM389.536 228.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.752v121.904h121.903v-24.3838h-0.015625zM398.464 0h-284.944
-c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF156" unicode="&#xf156;" 
-d="M286.4 -64l75.1992 75.2002l-102.399 104l73.5996 73.5996l104 -102.399l75.2002 75.1992v-225.6h-225.6zM179.2 195.2l-104 104l-75.2002 -76.7998v225.6h225.6l-75.1992 -75.2002l102.399 -104z" />
-    <glyph glyph-name="uniF142" unicode="&#xf142;" 
-d="M25.5996 320v31.7441c0 52.7363 85.5039 95.2314 190.465 95.2314c104.96 0 190.976 -42.4951 190.976 -95.2314v-31.7441c0 -36.3516 -39.4238 -67.584 -98.3037 -83.4561c-2.04785 -0.511719 -4.09668 -1.02441 -6.14453 -1.53613
-c-25.5996 -6.65625 -55.2959 -10.752 -86.5273 -10.752c-104.961 0 -190.465 43.0078 -190.465 95.7441zM384 235.008c14.8477 11.7764 23.04 26.624 23.04 43.0078v-51.1992c-7.16797 3.58398 -14.8477 6.14355 -23.04 8.19141zM205.824 2.04785
-c14.3359 -25.5996 35.8398 -46.5918 61.4395 -60.416c-16.3838 -2.55957 -33.2793 -3.58398 -51.1992 -3.58398c-104.961 0 -190.465 42.4961 -190.465 95.2324v53.7598c0 -50.6885 79.8721 -82.9443 180.225 -84.9922zM191.488 34.3037
-c-93.6963 6.14453 -165.889 46.0801 -165.889 94.7207v53.7598c0 -47.6162 69.1201 -78.8486 159.744 -84.4805c-0.511719 -5.63184 -1.02344 -11.2637 -1.02344 -16.8955c0 -16.3838 2.55957 -32.2559 7.16797 -47.1045zM192 129.536
-c-93.6963 6.14355 -166.4 46.0801 -166.4 94.7197v53.7598c0 -52.7354 85.5039 -85.5039 190.465 -85.5039c5.11914 0 9.72754 0 14.3359 0.512695c-17.4082 -17.9209 -30.7207 -39.4248 -38.4004 -63.4883zM486.912 81.4082c0 -79.3604 -64.5117 -143.36 -143.36 -143.36
-c-78.8477 0 -143.359 64 -143.359 143.36c0 79.3594 64.5117 142.848 143.359 142.848c78.8486 0 143.36 -64 143.36 -142.848zM438.784 97.2803h-79.3604v79.3594h-31.7441v-79.3594h-79.3594v-31.7441h79.3594v-79.8721h31.7441v79.8721h79.3604v31.7441z" />
-    <glyph glyph-name="uniF128" unicode="&#xf128;" 
-d="M455.714 363.714c3.23828 -7.80924 1.90495 -14.4759 -4 -20l-140.856 -140.856v-212c0 -8 -3.71452 -13.6191 -11.1436 -16.8574c-2.47591 -0.952474 -4.85677 -1.42871 -7.14258 -1.42871c-5.14258 0 -9.42839 1.80957 -12.8574 5.42871l-73.1426 73.1426
-c-3.61914 3.61914 -5.42871 7.90495 -5.42871 12.8574v138.857l-140.856 140.856c-5.90495 5.52409 -7.23828 12.1908 -4 20c3.23763 7.42904 8.85645 11.1436 16.8564 11.1436h365.715c8 0 13.6188 -3.71452 16.8564 -11.1436z" />
-    <glyph glyph-name="uniF11B" unicode="&#xf11b;" 
-d="M335.36 447.488l158.72 -158.721v-253.951h-95.2324v-95.2324h-380.928v412.672h95.2324v95.2324h222.208zM335.36 3.07227v31.7441h-222.208v253.951h-31.7441v-285.695h253.952zM430.592 98.3037v158.721h-126.976v126.976h-126.977v-285.696h253.952z" />
-    <glyph glyph-name="uniF105" unicode="&#xf105;" 
-d="M0 -63.4883v205.824h205.824l-81.9199 -81.9199c36.8639 -36.5228 80.8958 -54.7842 132.096 -54.7842c42.6667 0 80.5547 12.8001 113.664 38.4004c33.1094 25.5996 55.2959 58.3675 66.5596 98.3037h70.6562c-11.9466 -59.0508 -41.472 -108.203 -88.5762 -147.456
-c-47.1035 -39.2533 -101.205 -58.7093 -162.304 -58.3682c-70.6562 0 -130.902 24.9173 -180.736 74.752zM5.12012 242.688c11.9466 59.3919 41.472 108.544 88.5762 147.455c47.1035 38.9121 101.205 58.3682 162.304 58.3682c70.6562 0 131.072 -24.9173 181.248 -74.752
-l74.752 74.752v-205.823h-205.824l81.9199 81.9199c-36.8639 36.5221 -80.8958 54.7832 -132.096 54.7832c-42.6667 0 -80.5547 -12.7998 -113.664 -38.3994c-33.1094 -25.6003 -55.2959 -58.3682 -66.5596 -98.3037h-70.6562z" />
-    <glyph glyph-name="uniF160" unicode="&#xf160;" 
-d="M288 -64h-64v48h64v-48zM128 400v48h48v-48h-48zM176 -64h-48v48h48v-48zM224 448h64v-48h-64v48zM432 400v48h80v-80h-48v32h-32zM48 160h-48v64h48v-64zM0 272v48h48v-48h-48zM48 64h-48v48h48v-48zM384 -16v-48h-48v48h48zM80 -16v-48h-80v80h48v-32h32zM464 16h48
-v-80h-80v48h32v32zM464 320h48v-48h-48v48zM48 368h-48v80h80v-48h-32v-32zM336 448h48v-48h-48v48zM464 224h48v-64h-48v64zM512 112v-48h-48v48h48zM147.2 81.5996c-28.7998 30.4004 -44.7998 67.2002 -44.7998 108.801c0 43.1992 14.3994 78.3994 44.7998 108.8
-c30.3994 30.3994 67.2002 44.7998 108.8 44.7998s76.7998 -14.4004 108.8 -44.7998c30.4004 -30.4004 44.7998 -65.6006 44.7998 -108.8c0 -43.2002 -16 -80 -44.7998 -108.801c-30.3994 -30.3994 -65.5996 -44.7998 -108.8 -44.7998s-80 16 -108.8 44.7998zM190.4 204.8
-l-32 -32l64 -64l32 32l99.1992 99.2002l-32 32l-99.1992 -100.8z" />
-    <glyph glyph-name="uniF11A" unicode="&#xf11a;" 
-d="M287.744 447.488l159.231 -159.232v-350.72h-381.951v509.952h222.72zM128.512 1.53613h254.977v254.464h-127.488v127.488h-127.488v-381.952z" />
-    <glyph glyph-name="uniF14C" unicode="&#xf14c;" 
-d="M0 192c0 70.4004 25.5996 131.2 75.2002 180.8c49.5996 49.6006 110.399 76.7998 180.8 75.2002s131.2 -25.5996 180.8 -75.2002c51.2002 -48 75.2002 -108.8 75.2002 -180.8s-25.5996 -131.2 -75.2002 -180.8c-49.5996 -49.6006 -108.8 -73.6006 -180.8 -75.2002
-s-131.2 24 -180.8 75.2002c-49.6006 51.2002 -73.6006 110.399 -75.2002 180.8zM56 192c0 -56 19.2002 -102.4 59.2002 -140.8c40 -38.4004 86.3994 -59.2002 140.8 -59.2002s102.4 19.2002 140.8 59.2002c38.4004 40 59.2002 86.3994 59.2002 140.8
-s-19.2002 102.4 -59.2002 140.8c-40 38.4004 -86.3994 60.7998 -140.8 59.2002c-54.4004 0 -102.4 -19.2002 -140.8 -59.2002c-38.4004 -40 -59.2002 -84.7998 -59.2002 -140.8zM112 152v81.5996h104v102.4h81.5996v-104h102.4v-81.5996h-104v-102.4h-81.5996v104h-102.4z
-" />
-    <glyph glyph-name="uniF172" unicode="&#xf172;" 
-d="M0 102.4l256 256l256 -256l-75.7764 -75.7764l-180.224 179.712l-180.224 -179.712z" />
-    <glyph glyph-name="uniF151" unicode="&#xf151;" 
-d="M492.544 -62.4639h-474.624c0 61.4395 71.6797 112.64 169.472 129.536v25.0879c-40.4473 23.5518 -67.584 67.0723 -67.584 116.736v3.58398c-19.9678 7.16797 -33.792 25.5996 -33.792 47.6152c0 22.0166 13.8242 40.4482 33.792 47.1045v3.58398
-c0 74.752 60.416 135.68 135.681 135.68c75.2637 0 135.68 -60.9277 135.68 -135.68v-3.58398c19.4561 -6.65625 33.792 -25.0879 33.792 -47.1045c0 -22.0156 -14.3359 -40.4473 -33.792 -47.6152v-3.58398c0 -49.6641 -27.6484 -93.1846 -68.0957 -116.736v-25.0879
-c97.792 -16.8965 169.472 -68.0967 169.472 -129.536z" />
-    <glyph glyph-name="uniF14F" unicode="&#xf14f;" 
-d="M240 177.184l0.0644531 123.761l41.4395 -41.4561l80.2559 80.2715l42.6562 -42.6396l-80.2725 -80.2725l40.4004 -40.3994zM414.816 176.896l1.18359 -112.896c0 -17.6641 -14.3359 -32 -32 -32h-256c-17.6641 0 -32 14.3359 -32 32v256c0 17.6641 14.3359 32 32 32h112
-l32 -32l-143.328 -0.624023l-0.255859 -255.584l256.24 0.143555l-0.560547 144.112z" />
-    <glyph glyph-name="uniF149" unicode="&#xf149;" 
-d="M395.424 183.136l-379.424 -210.863c-4.38411 -2.47526 -8.14421 -2.76335 -11.2803 -0.864258c-3.13607 1.89844 -4.70931 5.3278 -4.71973 10.2881v420.576c0 4.94922 1.57324 8.37826 4.71973 10.2871c3.14714 1.90951 6.90723 1.62174 11.2803 -0.863281
-l379.424 -210.864c4.38411 -2.47461 6.57617 -5.42936 6.57617 -8.86426c0 -3.43424 -2.19206 -6.389 -6.57617 -8.86426v0.0322266z" />
-    <glyph glyph-name="uniF174" unicode="&#xf174;" 
-d="M410.624 170.496c49.6641 -27.6484 89.0879 -76.7998 98.8164 -134.656c0 -52.7363 -42.4961 -95.2314 -95.2324 -95.2314h-44.0322c18.9443 16.3838 32.7686 38.3994 39.4238 63.4873h4.6084c17.4082 0 31.7441 13.8242 31.7441 31.7441
-c-8.19238 31.7441 -29.6963 57.8564 -57.8564 75.2637c-14.8477 25.6006 -34.8154 48.6406 -58.8799 67.585c3.58398 6.14355 6.65625 12.7998 9.21582 19.4551c25.6006 8.19238 44.0322 31.7441 44.0322 59.9043v63.4883c0 28.1602 -18.4316 51.7119 -44.0322 59.9043
-c-10.2393 25.0879 -27.1357 47.1035 -48.1279 63.4873c9.21582 2.04785 18.9443 3.58398 28.6719 3.58398c70.1445 0 126.977 -56.832 126.977 -126.976v-63.4883c0 -34.3037 -13.8242 -65.0234 -35.3281 -87.5518zM287.232 -59.3916h-190.465
-c-52.7354 0 -95.2314 42.4951 -95.2314 95.2314v0c9.72754 58.3682 48.6396 107.008 98.8154 134.656c-22.0156 22.5283 -35.3271 53.248 -35.3271 87.5518v63.4883c0 70.1436 56.832 126.976 126.976 126.976s126.976 -56.832 126.976 -126.976v-63.4883
-c0 -33.792 -13.8232 -64.5117 -35.3271 -87.5518c49.6631 -27.6484 89.0879 -76.2881 98.8154 -134.656v0c0 -52.7363 -42.4961 -95.2314 -95.2314 -95.2314zM255.488 258.048v63.4883c0 34.8154 -28.6719 63.4883 -63.4883 63.4883
-c-35.3281 0 -63.4883 -28.6729 -63.4883 -63.4883v-63.4883c0 -35.3281 28.1602 -63.4883 63.4883 -63.4883c34.8164 0 63.4883 28.1602 63.4883 63.4883zM318.976 35.8398c-14.3359 54.7842 -68.0957 95.2324 -126.976 95.2324v0v0
-c-59.3916 0 -113.152 -40.4482 -126.976 -95.2324v0c0 -17.9199 13.8232 -31.7441 31.7432 -31.7441h190.465c17.4072 0 31.7432 13.8242 31.7432 31.7441v0z" />
-    <glyph glyph-name="uniF175" unicode="&#xf175;" 
-d="M109.714 91.4287v-54.8574c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-54.8574c-7.61914 0 -14.0954 2.66667 -19.4287 8c-5.33333 5.33333 -8 11.8096 -8 19.4287v54.8574c0 7.61914 2.66667 14.0954 8 19.4287
-c5.33333 5.33333 11.8096 8 19.4287 8h54.8574c7.61849 0 14.0944 -2.66667 19.4277 -8s8 -11.8096 8 -19.4287zM109.714 237.714v-54.8564c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-54.8574c-7.61914 0 -14.0954 2.66667 -19.4287 8
-c-5.33333 5.33333 -8 11.8096 -8 19.4287v54.8564c0 7.61914 2.66667 14.0954 8 19.4287c5.33333 5.33333 11.8096 8 19.4287 8h54.8574c7.61849 0 14.0944 -2.66667 19.4277 -8c5.33333 -5.33333 8 -11.8096 8 -19.4287zM109.714 384v-54.8574
-c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-54.8574c-7.61914 0 -14.0954 2.66667 -19.4287 8c-5.33333 5.33333 -8 11.8096 -8 19.4287v54.8574c0 7.61914 2.66667 14.0954 8 19.4287c5.33333 5.33333 11.8096 8 19.4287 8h54.8574
-c7.61849 0 14.0944 -2.66667 19.4277 -8s8 -11.8096 8 -19.4287z" />
-    <glyph glyph-name="uniF132" unicode="&#xf132;" 
-d="M182.784 320.512v-256c0 -4.77865 -1.70671 -9.04525 -5.12012 -12.7998s-7.85091 -5.63184 -13.3125 -5.63184c-5.46094 0 -9.72754 1.87728 -12.7998 5.63184l-128 128c-3.41341 3.75456 -5.12012 8.02116 -5.12012 12.7998s1.70671 9.04525 5.12012 12.7998l128 128
-c3.75456 3.75521 8.02116 5.63281 12.7998 5.63281s9.21615 -1.8776 13.3125 -5.63281c4.0957 -3.75456 5.80241 -8.02116 5.12012 -12.7998z" />
-    <glyph glyph-name="uniF173" unicode="&#xf173;" 
-d="M331.776 -62.4639h-191.488c-52.7363 0 -95.2324 42.4961 -95.2324 95.7441v0c9.72852 58.3682 49.1523 107.52 98.8164 135.168c-21.5039 22.5273 -35.3281 53.7598 -35.3281 87.5518v64c0 70.1436 56.832 127.488 127.488 127.488s127.487 -57.3447 127.487 -127.488
-v-64c0 -33.792 -13.8232 -65.0244 -35.3271 -87.5518c49.6641 -27.6484 89.0879 -76.7998 98.8154 -135.168v0c0 -53.248 -42.4961 -95.7441 -95.2314 -95.7441zM299.52 256v64c0 34.8164 -28.1592 63.4883 -63.4873 63.4883s-63.4883 -28.6719 -63.4883 -63.4883v-64
-c0 -34.8164 28.1602 -63.4883 63.4883 -63.4883s63.4873 28.6719 63.4873 63.4883zM363.52 33.2803c-14.3359 54.7842 -68.0957 95.2314 -127.487 95.2314v0v0c-59.3926 0 -113.152 -40.4473 -127.488 -95.2314v0c0 -17.9199 14.3359 -32.2559 31.7441 -32.2559h190.976
-c17.9199 0 32.2559 14.3359 32.2559 32.2559v0z" />
-    <glyph glyph-name="uniF10C" unicode="&#xf10c;" 
-d="M399.872 448.512v-512l-143.872 131.072l-143.872 -131.072v512h287.744zM335.872 256.512v32.2559h-64v64h-31.7441v-64h-64v-32.2559h64v-64h31.7441v64h64z" />
-    <glyph glyph-name="uniF163" unicode="&#xf163;" 
-d="M211.248 171.44h48.7676v-24.3848h-97.5195v121.904h48.752v-97.5195zM406.304 244.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.7676v121.904h121.903v-24.3838zM398.464 16h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944
-c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 352c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944
-c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF170" unicode="&#xf170;" 
-d="M319.488 198.144c-1.70703 -3.75456 -4.6084 -5.63184 -8.7041 -5.63184h-54.7842v-100.352c0 -2.73047 -0.85319 -4.94922 -2.55957 -6.65625c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-54.7842c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957
-c-1.70638 1.70703 -2.55957 3.92578 -2.55957 6.65625v100.352h-54.7842c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527c0 2.38932 1.02409 4.60807 3.07227 6.65625l91.1357 91.1357
-c2.04818 1.70703 4.26693 2.56055 6.65625 2.56055s4.43717 -0.853516 6.14355 -2.56055l91.6484 -91.1357c2.73047 -3.07161 3.41309 -6.48503 2.04785 -10.2402zM219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922
-c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832
-c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242
-c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF124" unicode="&#xf124;" 
-d="M0 448.512h512v-512h-512v512zM448 0.511719v256h-384v-256h384zM448 320.512v64h-384v-64h384zM352.256 128.512l-96.2559 -95.7441l-95.7441 95.7441h64v96.2559h64v-96.2559h64z" />
-    <glyph glyph-name="uniF118" unicode="&#xf118;" 
-d="M250.368 -60.9277c-104.96 0 -190.464 42.4961 -190.464 95.2314v0v53.7607c0 -52.7363 85.5039 -85.5049 190.464 -85.5049c105.472 0 190.976 32.7686 190.976 85.5049v-53.7607c0 -52.7354 -85.5039 -95.2314 -190.976 -95.2314zM250.368 34.3037
-c-104.96 0 -190.464 42.4961 -190.464 95.2324v53.7598c0 -52.7363 85.5039 -85.5039 190.464 -85.5039c105.472 0 190.976 32.7676 190.976 85.5039v-53.7598c0 -52.7363 -85.5039 -95.2324 -190.976 -95.2324zM250.368 129.536
-c-104.96 0 -190.464 43.0078 -190.464 95.7441v53.248c0 -52.7363 85.5039 -85.5039 190.464 -85.5039c105.472 0 190.976 32.7676 190.976 85.5039v-53.248c0 -52.7363 -85.5039 -95.7441 -190.976 -95.7441zM250.368 225.28c-104.96 0 -190.464 42.4961 -190.464 95.2314
-v31.7441c0 52.7363 85.5039 95.2324 190.464 95.2324s190.976 -42.4961 190.976 -95.2324v-31.7441c0 -52.7354 -85.5039 -95.2314 -190.976 -95.2314z" />
-    <glyph glyph-name="uniF110" unicode="&#xf110;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM55.8076 192.512c0 -55.2956 19.627 -102.399 58.8809 -141.312
-c39.2533 -38.9121 86.3571 -58.5387 141.312 -58.8799c54.9544 -0.341797 102.058 19.2848 141.312 58.8799c39.2539 39.5944 58.8809 86.6982 58.8809 141.312s-19.627 101.717 -58.8809 141.312c-39.2533 39.5944 -86.3571 59.221 -141.312 58.8799
-c-54.9544 -0.341146 -102.058 -19.9678 -141.312 -58.8799c-39.2539 -38.9121 -58.8809 -86.0163 -58.8809 -141.312zM130.048 122.368l70.1445 70.1436l-70.1445 70.1445l55.8086 55.8076l70.1436 -70.1436l70.1436 70.1436l55.8086 -55.8076l-70.1445 -70.1445
-l70.1445 -70.1436l-55.8086 -55.8086l-70.1436 70.1445l-70.1436 -70.1445z" />
-    <glyph glyph-name="uniF13A" unicode="&#xf13a;" 
-d="M577.143 444.857c5.33333 -3.8099 8 -8.85775 8 -15.1436v-402.285c0 -3.8099 -1.04753 -7.23861 -3.14258 -10.2861c-2.09505 -3.04753 -4.8571 -5.23796 -8.28613 -6.57129l-182.856 -73.1426c-4.57161 -2.09505 -9.14323 -2.09505 -13.7148 0l-176 70.2852
-l-176 -70.2852c-1.9043 -0.952474 -4.18978 -1.42871 -6.85645 -1.42871c-3.61914 0 -7.04785 1.04753 -10.2861 3.14258c-5.33333 3.8099 -8 8.85775 -8 15.1436v402.285c0 3.8099 1.04753 7.23861 3.14258 10.2861c2.0957 3.04753 4.85775 5.23796 8.28613 6.57129
-l182.857 73.1426c4.57096 2.09505 9.14225 2.09505 13.7139 0l176 -70.2852l176 70.2852c6.09505 2.47656 11.8092 1.90527 17.1426 -1.71387zM210.286 406.286v-362.857l164.571 -65.7148v362.857zM36.5713 344.286v-362.857l155.429 62v362.857zM548.571 39.7139v362.857
-l-155.429 -62v-362.857z" />
-    <glyph glyph-name="uniF176" unicode="&#xf176;" 
-d="M505.712 357.712c3.75977 -12 6.25586 -24.4961 6.25586 -37.7119c0 -70.6562 -57.248 -128 -128 -128c-19.6318 0 -38.1279 4.84766 -54.7842 12.7842l-256.367 -256.288c-7.63281 -7.74414 -18.3203 -12.4961 -30.1279 -12.4961
-c-23.6328 0 -42.6885 19.1201 -42.6885 42.624c0 11.8721 4.81641 22.4961 12.4961 30.2559l256.32 256.24c-8 16.7197 -12.8164 35.168 -12.8164 54.8799c0 70.6562 57.3115 128 127.968 128c12.8799 0 25.0078 -2.46387 36.752 -6l-79.376 -79.3438v-85.3125h84z" />
-    <glyph glyph-name="uniF12B" unicode="&#xf12b;" 
-d="M256 55.2959v54.7842c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-54.7842c-2.73047 0 -4.94922 -0.85319 -6.65625 -2.55957c-1.70638 -1.70703 -2.55957 -3.92578 -2.55957 -6.65625v-54.7842
-c0 -2.73047 0.85319 -4.94922 2.55957 -6.65625c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h54.7842c2.73047 0 4.94922 0.85319 6.65625 2.55957c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM329.216 247.296
-c0 16.7253 -5.29069 32.2559 -15.8721 46.5918s-23.7227 25.4294 -39.4238 33.2803s-31.9144 11.7764 -48.6396 11.7764c-46.4212 0 -81.7493 -20.3096 -105.984 -60.9287c-3.07161 -4.77865 -2.389 -8.87467 2.04785 -12.2881l37.8887 -28.1592
-c1.36523 -1.36589 3.07161 -2.04883 5.11914 -2.04883c3.07227 0 5.46159 1.19466 7.16797 3.58398c10.2402 12.9707 18.4323 21.6748 24.5762 26.1123c6.48568 4.77865 14.6777 7.16797 24.5762 7.16797c9.21615 0 17.4082 -2.5599 24.5762 -7.67969
-s10.752 -10.752 10.752 -16.8965c0 -7.16797 -1.87728 -12.9704 -5.63184 -17.4072c-3.75456 -4.4375 -10.2399 -8.70443 -19.4561 -12.8008c-11.9466 -5.46094 -23.04 -13.6527 -33.2803 -24.5752c-10.2396 -10.9232 -15.1888 -22.8701 -14.8477 -35.8408v-10.2393
-c0 -2.73112 0.85319 -4.94987 2.55957 -6.65625c1.70703 -1.70703 3.92578 -2.56055 6.65625 -2.56055h54.7842c2.73047 0 4.94922 0.853516 6.65625 2.56055c1.70638 1.70638 2.55957 3.92513 2.55957 6.65625c0 3.41341 2.04785 8.02116 6.14355 13.8232
-c4.09635 5.80273 9.21647 10.5814 15.3604 14.3359c6.14388 3.41341 10.9225 6.14421 14.3359 8.19238s7.68001 5.29102 12.7998 9.72852c5.12044 4.43685 9.38737 9.0446 12.8008 13.8232c3.41276 4.77865 6.14323 10.5814 8.19141 17.4082s3.24284 14.5068 3.58398 23.04z
-M438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953
-c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963
-c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF12F" unicode="&#xf12f;" 
-d="M512 220.16v-55.2959c0 -2.38932 -0.85319 -4.4375 -2.55957 -6.14453c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-356.353v-64c0 -4.09635 -1.87728 -6.99772 -5.63184 -8.7041s-6.99707 -1.19434 -9.72754 1.53613l-110.08 100.352
-c-1.70703 1.70703 -2.56055 3.75521 -2.56055 6.14453c0 2.73047 0.853516 5.11979 2.56055 7.16797l110.08 100.863c3.07161 2.73112 6.31413 3.41406 9.72754 2.04883c3.75456 -1.70703 5.63184 -4.6084 5.63184 -8.7041v-64h356.353
-c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.75423 2.55957 -6.14355z" />
-  </font>
-</defs></svg>
diff --git a/assets/fonts/fauxtonicon5.ttf b/assets/fonts/fauxtonicon5.ttf
deleted file mode 100644
index 9a382e9..0000000
--- a/assets/fonts/fauxtonicon5.ttf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fauxtonicon5.woff b/assets/fonts/fauxtonicon5.woff
deleted file mode 100644
index 104a3d7..0000000
--- a/assets/fonts/fauxtonicon5.woff
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontawesome-webfont.eot b/assets/fonts/fontawesome-webfont.eot
deleted file mode 100755
index 0662cb9..0000000
--- a/assets/fonts/fontawesome-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontawesome-webfont.svg b/assets/fonts/fontawesome-webfont.svg
deleted file mode 100755
index 2edb4ec..0000000
--- a/assets/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,399 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
-<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
-<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
-<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
-<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
-<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
-<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
-<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
-<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
-<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
-<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
-<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
-<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
-<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
-<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
-<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
-<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
-<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
-<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
-<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
-<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
-<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
-<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
-<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
-<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
-<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
-<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
-<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
-<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
-<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
-<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
-<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
-<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
-<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
-<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
-<glyph unicode="&#xf116;" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf117;" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" />
-<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
-<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
-<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
-<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
-<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
-<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
-<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
-<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
-<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
-<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
-<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
-<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
-<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
-<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
-<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
-<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
-<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
-<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" />
-<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
-<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
-<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
-<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
-<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
-<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
-<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
-<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
-<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
-<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
-<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
-<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
-<glyph unicode="&#xf158;" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
-<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
-<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
-<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
-<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
-<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
-<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
-<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
-<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
-<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
-<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
-<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
-<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
-<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
-<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
-<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
-<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
-<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
-<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
-<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
-<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
-<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
-<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
-<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
-<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
-<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
-<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
-<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
-<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
-<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
-<glyph unicode="&#xf18b;" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" />
-<glyph unicode="&#xf18c;" horiz-adv-x="1792" />
-<glyph unicode="&#xf18d;" horiz-adv-x="1792" />
-<glyph unicode="&#xf18e;" horiz-adv-x="1792" />
-<glyph unicode="&#xf500;" horiz-adv-x="1792" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/assets/fonts/fontawesome-webfont.ttf b/assets/fonts/fontawesome-webfont.ttf
deleted file mode 100755
index d365924..0000000
--- a/assets/fonts/fontawesome-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontawesome-webfont.woff b/assets/fonts/fontawesome-webfont.woff
deleted file mode 100755
index b9bd17e..0000000
--- a/assets/fonts/fontawesome-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontcustom.yml b/assets/fonts/fontcustom.yml
deleted file mode 100644
index 619adf8..0000000
--- a/assets/fonts/fontcustom.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-# --------------------------------------------------------------------------- #
-# Project Info
-#   Defaults shown. Learn more about these options by running
-#   `fontcustom help` or visiting <http://fontcustom.com>.
-# --------------------------------------------------------------------------- #
-
-font_name: fauxtonicon5
-css_selector: .fonticon-{{glyph}}
-preprocessor_path: "../fonts/"
-autowidth: false
-no_hash: true
-force: false
-debug: true
-quiet: false
-
-
-# --------------------------------------------------------------------------- #
-# Input Paths
-# --------------------------------------------------------------------------- #
-
-input:
-  vectors: /Applications/MAMP/htdocs/couchdb-fauxton/assets/icons         # required
-  templates: /Applications/MAMP/htdocs/couchdb-fauxton/assets/fonts/templates
-
-
-# --------------------------------------------------------------------------- #
-# Output Paths
-# --------------------------------------------------------------------------- #
-
-output:
-  fonts: /Applications/MAMP/htdocs/couchdb-fauxton/assets/fonts                              # required
-  # css: PUT_YOUR_PATH_HERE/couchdb-fauxton/assets/less
-  preview: /Applications/MAMP/htdocs/couchdb-fauxton/assets/fonts/styleguide
-  icons.less: /Applications/MAMP/htdocs/couchdb-fauxton/assets/less
-  #my-custom-template.yml: path/to/template/output
-
-
-# --------------------------------------------------------------------------- #
-# Templates
-#   Included in Font Custom: preview, css, scss, scss-rails
-#   Custom templates should be saved in the INPUT[:templates] directory and
-#   referenced by their baserame.
-# --------------------------------------------------------------------------- #
-
-templates:
- # - css
- - preview
- - icons.less
-
-# FYI... KNOWN ISSUE: https://github.com/FontCustom/fontcustom/issues/172.
-# TEMP SOLUTION W/ PATH FIX: https://github.com/skirchmeier/fontcustom/tree/master
diff --git a/assets/fonts/styleguide/fauxtonicon5-preview.html b/assets/fonts/styleguide/fauxtonicon5-preview.html
deleted file mode 100644
index 17a3d63..0000000
--- a/assets/fonts/styleguide/fauxtonicon5-preview.html
+++ /dev/null
@@ -1,2003 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>fauxtonicon5 glyphs preview</title>
-
-    <style>
-      /* Page Styles */
-
-      * {
-        -moz-box-sizing: border-box;
-        -webkit-box-sizing: border-box;
-        box-sizing: border-box;
-        margin: 0;
-        padding: 0;
-      }
-
-      body {
-        background: #fff;
-        color: #444;
-        font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
-      }
-
-      a,
-      a:visited {
-        color: #888;
-        text-decoration: underline;
-      }
-      a:hover,
-      a:focus { color: #000; }
-
-      header {
-        border-bottom: 2px solid #ddd;
-        margin-bottom: 20px;
-        overflow: hidden;
-        padding: 20px 0;
-      }
-
-      header h1 {
-        color: #888;
-        float: left;
-        font-size: 36px;
-        font-weight: 300;
-      }
-
-      header a {
-        float: right;
-        font-size: 14px;
-      }
-
-      .container {
-        margin: 0 auto;
-        max-width: 1200px;
-        min-width: 960px;
-        padding: 0 40px;
-        width: 90%;
-      }
-
-      .glyph {
-        border-bottom: 1px dotted #ccc;
-        padding: 10px 0 20px;
-        margin-bottom: 20px;
-      }
-
-      .preview-glyphs { vertical-align: bottom; }
-
-      .preview-scale {
-        color: #888;
-        font-size: 12px;
-        margin-top: 5px;
-      }
-
-      .step {
-        display: inline-block;
-        line-height: 1;
-        position: relative;
-        width: 10%;
-      }
-
-      .step .letters,
-      .step i {
-        -webkit-transition: opacity .3s;
-        -moz-transition: opacity .3s;
-        -ms-transition: opacity .3s;
-        -o-transition: opacity .3s;
-        transition: opacity .3s;
-      }
-
-      .step:hover .letters { opacity: 1; }
-      .step:hover i { opacity: .3; }
-
-      .letters {
-        opacity: .3;
-        position: absolute;
-      }
-
-      .characters-off .letters { display: none; }
-      .characters-off .step:hover i { opacity: 1; }
-
-      
-      .size-12 { font-size: 12px; }
-      
-      .size-14 { font-size: 14px; }
-      
-      .size-16 { font-size: 16px; }
-      
-      .size-18 { font-size: 18px; }
-      
-      .size-21 { font-size: 21px; }
-      
-      .size-24 { font-size: 24px; }
-      
-      .size-36 { font-size: 36px; }
-      
-      .size-48 { font-size: 48px; }
-      
-      .size-60 { font-size: 60px; }
-      
-      .size-72 { font-size: 72px; }
-      
-
-      .usage { margin-top: 10px; }
-
-      .usage input {
-        font-family: monospace;
-        margin-right: 3px;
-        padding: 2px 5px;
-        text-align: center;
-      }
-
-      .usage .point { width: 150px; }
-
-      .usage .class { width: 250px; }
-
-      footer {
-        color: #888;
-        font-size: 12px;
-        padding: 20px 0;
-      }
-
-      /* Icon Font: fauxtonicon5 */
-
-      @font-face {
-  font-family: "fauxtonicon5";
-  src: url("../fauxtonicon5.eot");
-  src: url("../fauxtonicon5.eot?#iefix") format("embedded-opentype"),
-       url("../fauxtonicon5.woff") format("woff"),
-       url("../fauxtonicon5.ttf") format("truetype"),
-       url("../fauxtonicon5.svg#fauxtonicon5") format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  @font-face {
-    font-family: "fauxtonicon5";
-    src: url("../fauxtonicon5.svg#fauxtonicon5") format("svg");
-  }
-}
-
-      [data-icon]:before { content: attr(data-icon); }
-
-      [data-icon]:before,
-      .fonticon-activetasks:before,
-.fonticon-arrow-box-down:before,
-.fonticon-arrow-box-up:before,
-.fonticon-arrow_left:before,
-.fonticon-arrow_right:before,
-.fonticon-arrows-cw:before,
-.fonticon-article:before,
-.fonticon-attention-alt:before,
-.fonticon-attention-circled:before,
-.fonticon-bell:before,
-.fonticon-block:before,
-.fonticon-bookmark:before,
-.fonticon-bookmark-ribbon-wplus:before,
-.fonticon-burger:before,
-.fonticon-cancel:before,
-.fonticon-cancel-circled:before,
-.fonticon-cancel-circled2:before,
-.fonticon-circle-empty:before,
-.fonticon-clipboard:before,
-.fonticon-clock:before,
-.fonticon-cog:before,
-.fonticon-collapse:before,
-.fonticon-cw:before,
-.fonticon-dashboard:before,
-.fonticon-database:before,
-.fonticon-deselect-all:before,
-.fonticon-document:before,
-.fonticon-documents:before,
-.fonticon-dot-circled:before,
-.fonticon-down:before,
-.fonticon-down-1:before,
-.fonticon-down-circled:before,
-.fonticon-down-dir:before,
-.fonticon-down-open:before,
-.fonticon-drop-down-dots:before,
-.fonticon-exchange:before,
-.fonticon-expand:before,
-.fonticon-eye:before,
-.fonticon-file-code-o:before,
-.fonticon-files-o:before,
-.fonticon-filter:before,
-.fonticon-gears:before,
-.fonticon-help:before,
-.fonticon-help-circled:before,
-.fonticon-info-circled:before,
-.fonticon-json:before,
-.fonticon-key:before,
-.fonticon-left:before,
-.fonticon-left-1:before,
-.fonticon-left-circled:before,
-.fonticon-left-dir:before,
-.fonticon-left-open:before,
-.fonticon-link:before,
-.fonticon-list-alt:before,
-.fonticon-lock:before,
-.fonticon-mail:before,
-.fonticon-mail-alt:before,
-.fonticon-map:before,
-.fonticon-map2:before,
-.fonticon-megaphone:before,
-.fonticon-minus:before,
-.fonticon-minus-circled:before,
-.fonticon-minus-circled2:before,
-.fonticon-minus-squared:before,
-.fonticon-minus-squared-alt:before,
-.fonticon-mixer:before,
-.fonticon-new-database:before,
-.fonticon-ok:before,
-.fonticon-ok-circled:before,
-.fonticon-ok-circled-2:before,
-.fonticon-paperclip:before,
-.fonticon-pencil:before,
-.fonticon-picture:before,
-.fonticon-play:before,
-.fonticon-plus:before,
-.fonticon-plus-circled:before,
-.fonticon-plus-circled2:before,
-.fonticon-plus-squared:before,
-.fonticon-plus-squared-alt:before,
-.fonticon-popin:before,
-.fonticon-popout:before,
-.fonticon-profile:before,
-.fonticon-replicate:before,
-.fonticon-reply:before,
-.fonticon-reply-all:before,
-.fonticon-resize-full:before,
-.fonticon-resize-full-reverse:before,
-.fonticon-resize-small:before,
-.fonticon-resize-small-reverse:before,
-.fonticon-right:before,
-.fonticon-right-1:before,
-.fonticon-right-circled:before,
-.fonticon-right-dir:before,
-.fonticon-right-open:before,
-.fonticon-save:before,
-.fonticon-search:before,
-.fonticon-select-all:before,
-.fonticon-sidenav-filter-function:before,
-.fonticon-sidenav-info:before,
-.fonticon-sidenav-list-function:before,
-.fonticon-sidenav-map-reduce:before,
-.fonticon-sidenav-search:before,
-.fonticon-sidenav-show-function:before,
-.fonticon-sidenav-update-function:before,
-.fonticon-sitemap:before,
-.fonticon-stats:before,
-.fonticon-support:before,
-.fonticon-swap-arrows:before,
-.fonticon-table:before,
-.fonticon-trash:before,
-.fonticon-up:before,
-.fonticon-up-1:before,
-.fonticon-up-circled:before,
-.fonticon-up-dir:before,
-.fonticon-up-open:before,
-.fonticon-user:before,
-.fonticon-users:before,
-.fonticon-vertical-ellipsis:before,
-.fonticon-wrench:before,
-.fonticon-wrench2:before {
-        display: inline-block;
-  font-family: "fauxtonicon5";
-  font-style: normal;
-  font-weight: normal;
-  font-variant: normal;
-  line-height: 1;
-  text-decoration: inherit;
-  text-rendering: optimizeLegibility;
-  text-transform: none;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  font-smoothing: antialiased;
-      }
-
-      .fonticon-activetasks:before { content: "\f100"; }
-.fonticon-arrow-box-down:before { content: "\f101"; }
-.fonticon-arrow-box-up:before { content: "\f102"; }
-.fonticon-arrow_left:before { content: "\f103"; }
-.fonticon-arrow_right:before { content: "\f104"; }
-.fonticon-arrows-cw:before { content: "\f105"; }
-.fonticon-article:before { content: "\f106"; }
-.fonticon-attention-alt:before { content: "\f107"; }
-.fonticon-attention-circled:before { content: "\f108"; }
-.fonticon-bell:before { content: "\f109"; }
-.fonticon-block:before { content: "\f10a"; }
-.fonticon-bookmark:before { content: "\f10b"; }
-.fonticon-bookmark-ribbon-wplus:before { content: "\f10c"; }
-.fonticon-burger:before { content: "\f10d"; }
-.fonticon-cancel:before { content: "\f10e"; }
-.fonticon-cancel-circled:before { content: "\f10f"; }
-.fonticon-cancel-circled2:before { content: "\f110"; }
-.fonticon-circle-empty:before { content: "\f111"; }
-.fonticon-clipboard:before { content: "\f112"; }
-.fonticon-clock:before { content: "\f113"; }
-.fonticon-cog:before { content: "\f114"; }
-.fonticon-collapse:before { content: "\f115"; }
-.fonticon-cw:before { content: "\f116"; }
-.fonticon-dashboard:before { content: "\f117"; }
-.fonticon-database:before { content: "\f118"; }
-.fonticon-deselect-all:before { content: "\f119"; }
-.fonticon-document:before { content: "\f11a"; }
-.fonticon-documents:before { content: "\f11b"; }
-.fonticon-dot-circled:before { content: "\f11c"; }
-.fonticon-down:before { content: "\f11d"; }
-.fonticon-down-1:before { content: "\f11e"; }
-.fonticon-down-circled:before { content: "\f11f"; }
-.fonticon-down-dir:before { content: "\f120"; }
-.fonticon-down-open:before { content: "\f121"; }
-.fonticon-drop-down-dots:before { content: "\f122"; }
-.fonticon-exchange:before { content: "\f123"; }
-.fonticon-expand:before { content: "\f124"; }
-.fonticon-eye:before { content: "\f125"; }
-.fonticon-file-code-o:before { content: "\f126"; }
-.fonticon-files-o:before { content: "\f127"; }
-.fonticon-filter:before { content: "\f128"; }
-.fonticon-gears:before { content: "\f129"; }
-.fonticon-help:before { content: "\f12a"; }
-.fonticon-help-circled:before { content: "\f12b"; }
-.fonticon-info-circled:before { content: "\f12c"; }
-.fonticon-json:before { content: "\f12d"; }
-.fonticon-key:before { content: "\f12e"; }
-.fonticon-left:before { content: "\f12f"; }
-.fonticon-left-1:before { content: "\f130"; }
-.fonticon-left-circled:before { content: "\f131"; }
-.fonticon-left-dir:before { content: "\f132"; }
-.fonticon-left-open:before { content: "\f133"; }
-.fonticon-link:before { content: "\f134"; }
-.fonticon-list-alt:before { content: "\f135"; }
-.fonticon-lock:before { content: "\f136"; }
-.fonticon-mail:before { content: "\f137"; }
-.fonticon-mail-alt:before { content: "\f138"; }
-.fonticon-map:before { content: "\f139"; }
-.fonticon-map2:before { content: "\f13a"; }
-.fonticon-megaphone:before { content: "\f13b"; }
-.fonticon-minus:before { content: "\f13c"; }
-.fonticon-minus-circled:before { content: "\f13d"; }
-.fonticon-minus-circled2:before { content: "\f13e"; }
-.fonticon-minus-squared:before { content: "\f13f"; }
-.fonticon-minus-squared-alt:before { content: "\f140"; }
-.fonticon-mixer:before { content: "\f141"; }
-.fonticon-new-database:before { content: "\f142"; }
-.fonticon-ok:before { content: "\f143"; }
-.fonticon-ok-circled:before { content: "\f144"; }
-.fonticon-ok-circled-2:before { content: "\f145"; }
-.fonticon-paperclip:before { content: "\f146"; }
-.fonticon-pencil:before { content: "\f147"; }
-.fonticon-picture:before { content: "\f148"; }
-.fonticon-play:before { content: "\f149"; }
-.fonticon-plus:before { content: "\f14a"; }
-.fonticon-plus-circled:before { content: "\f14b"; }
-.fonticon-plus-circled2:before { content: "\f14c"; }
-.fonticon-plus-squared:before { content: "\f14d"; }
-.fonticon-plus-squared-alt:before { content: "\f14e"; }
-.fonticon-popin:before { content: "\f14f"; }
-.fonticon-popout:before { content: "\f150"; }
-.fonticon-profile:before { content: "\f151"; }
-.fonticon-replicate:before { content: "\f152"; }
-.fonticon-reply:before { content: "\f153"; }
-.fonticon-reply-all:before { content: "\f154"; }
-.fonticon-resize-full:before { content: "\f155"; }
-.fonticon-resize-full-reverse:before { content: "\f156"; }
-.fonticon-resize-small:before { content: "\f157"; }
-.fonticon-resize-small-reverse:before { content: "\f158"; }
-.fonticon-right:before { content: "\f159"; }
-.fonticon-right-1:before { content: "\f15a"; }
-.fonticon-right-circled:before { content: "\f15b"; }
-.fonticon-right-dir:before { content: "\f15c"; }
-.fonticon-right-open:before { content: "\f15d"; }
-.fonticon-save:before { content: "\f15e"; }
-.fonticon-search:before { content: "\f15f"; }
-.fonticon-select-all:before { content: "\f160"; }
-.fonticon-sidenav-filter-function:before { content: "\f161"; }
-.fonticon-sidenav-info:before { content: "\f162"; }
-.fonticon-sidenav-list-function:before { content: "\f163"; }
-.fonticon-sidenav-map-reduce:before { content: "\f164"; }
-.fonticon-sidenav-search:before { content: "\f165"; }
-.fonticon-sidenav-show-function:before { content: "\f166"; }
-.fonticon-sidenav-update-function:before { content: "\f167"; }
-.fonticon-sitemap:before { content: "\f168"; }
-.fonticon-stats:before { content: "\f169"; }
-.fonticon-support:before { content: "\f16a"; }
-.fonticon-swap-arrows:before { content: "\f16b"; }
-.fonticon-table:before { content: "\f16c"; }
-.fonticon-trash:before { content: "\f16d"; }
-.fonticon-up:before { content: "\f16e"; }
-.fonticon-up-1:before { content: "\f16f"; }
-.fonticon-up-circled:before { content: "\f170"; }
-.fonticon-up-dir:before { content: "\f171"; }
-.fonticon-up-open:before { content: "\f172"; }
-.fonticon-user:before { content: "\f173"; }
-.fonticon-users:before { content: "\f174"; }
-.fonticon-vertical-ellipsis:before { content: "\f175"; }
-.fonticon-wrench:before { content: "\f176"; }
-.fonticon-wrench2:before { content: "\f177"; }
-    </style>
-
-    <!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
-
-    <script>
-      function toggleCharacters() {
-        var body = document.getElementsByTagName('body')[0];
-        body.className = body.className === 'characters-off' ? '' : 'characters-off';
-      }
-    </script>
-  </head>
-
-  <body class="characters-off">
-    <div id="page" class="container">
-      <header>
-        <h1>fauxtonicon5 contains 120 glyphs:</h1>
-        <a onclick="toggleCharacters(); return false;" href="#">Toggle Preview Characters</a>
-      </header>
-
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-activetasks" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf100;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow-box-down" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf101;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow-box-up" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf102;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow_left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf103;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow_right" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf104;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrows-cw" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf105;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-article" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf106;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-attention-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf107;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-attention-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf108;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-bell" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf109;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-block" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-bookmark" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-bookmark-ribbon-wplus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-burger" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cancel" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cancel-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cancel-circled2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf110;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-circle-empty" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf111;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-clipboard" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf112;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-clock" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf113;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cog" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf114;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-collapse" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf115;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cw" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf116;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-dashboard" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf117;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-database" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf118;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-deselect-all" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf119;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-document" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-documents" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-dot-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf120;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf121;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-drop-down-dots" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf122;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-exchange" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf123;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-expand" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf124;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-eye" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf125;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-file-code-o" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf126;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-files-o" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf127;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-filter" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf128;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-gears" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf129;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-help" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-help-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-info-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-json" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-key" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf130;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf131;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf132;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf133;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-link" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf134;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-list-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf135;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-lock" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf136;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-mail" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf137;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-mail-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf138;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-map" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf139;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-map2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-megaphone" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-circled2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-squared" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-squared-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf140;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-mixer" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf141;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-new-database" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf142;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-ok" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf143;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-ok-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf144;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-ok-circled-2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf145;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-paperclip" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf146;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-pencil" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf147;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-picture" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf148;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-play" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf149;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-circled2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-squared" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-squared-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-popin" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-popout" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf150;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-profile" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf151;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-replicate" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf152;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-reply" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf153;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-reply-all" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf154;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-full" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf155;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-full-reverse" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf156;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-small" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf157;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-small-reverse" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf158;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf159;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-save" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-search" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-select-all" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf160;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-filter-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf161;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-info" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf162;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-list-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf163;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-map-reduce" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf164;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-search" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf165;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-show-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf166;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-update-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf167;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sitemap" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf168;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-stats" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf169;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-support" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-swap-arrows" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-table" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-trash" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf170;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf171;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf172;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-user" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf173;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-users" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf174;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-vertical-ellipsis" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf175;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-wrench" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf176;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-wrench2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf177;" />
-        </div>
-      </div>
-      
-
-      <footer>
-        Made with love using <a href="http://fontcustom.com">Font Custom</a>.
-      </footer>
-    </div>
-  </body>
-</html>
diff --git a/assets/fonts/templates/icons.less b/assets/fonts/templates/icons.less
deleted file mode 100644
index 95aa953..0000000
--- a/assets/fonts/templates/icons.less
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-*	Icon Font: <%= font_name %>
-*/
-
-/*  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.
- */
-
-/* had to add a custom template to the generator to get this to compile to append the proper path and specify  "url" instead of "font-url":
-https://github.com/seanbarclay/fontcustom/blob/1c3ad3d2633d3a8add39e8827115394e9ec02d88/lib/fontcustom/generator/template.rb
-*/
-@fauxtonFont: "<%=font_name%>";
-<%= glyph_vars %>
-
-<%= font_face(:LESS) %>
-
-[data-icon]:before { content: attr(data-icon); }
-
-[data-icon]:before,
-<%= glyph_selectors %> {
-<%= glyph_properties %>
-}
-
-<%= glyphs_less %>
diff --git a/assets/icons/activetasks.svg b/assets/icons/activetasks.svg
deleted file mode 100755
index 5683da6..0000000
--- a/assets/icons/activetasks.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M18.272 25.12h11.456v-2.304h-11.456v2.304zM11.424 15.968h18.304v-2.272h-18.304v2.272zM22.848 6.816h6.88v-2.272h-6.88v2.272zM32 21.696v4.544q0 0.48-0.352 0.8t-0.8 0.352h-29.696q-0.48 0-0.8-0.352t-0.352-0.8v-4.544q0-0.48 0.352-0.832t0.8-0.32h29.696q0.48 0 0.8 0.32t0.352 0.832zM32 12.544v4.576q0 0.448-0.352 0.8t-0.8 0.32h-29.696q-0.48 0-0.8-0.32t-0.352-0.8v-4.576q0-0.48 0.352-0.8t0.8-0.352h29.696q0.48 0 0.8 0.352t0.352 0.8zM32 3.392v4.576q0 0.48-0.352 0.8t-0.8 0.352h-29.696q-0.48 0-0.8-0.352t-0.352-0.8v-4.576q0-0.448 0.352-0.8t0.8-0.352h29.696q0.48 0 0.8 0.352t0.352 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/arrow-box-down.svg b/assets/icons/arrow-box-down.svg
deleted file mode 100755
index 8da5fc3..0000000
--- a/assets/icons/arrow-box-down.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 31.968v-32h-32v32h32zM28 27.968h-24v-24h24v24zM16 21.952l-8-12h16l-8 12z" fill="#000000" />
-</svg>
diff --git a/assets/icons/arrow-box-up.svg b/assets/icons/arrow-box-up.svg
deleted file mode 100755
index 7995927..0000000
--- a/assets/icons/arrow-box-up.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0-0.032v32h32v-32h-32zM28 27.968h-24v-24h24v24zM24 21.952h-16l8-12 8 12z" fill="#000000" />
-</svg>
diff --git a/assets/icons/arrow_left.svg b/assets/icons/arrow_left.svg
deleted file mode 100644
index 08c48f4..0000000
--- a/assets/icons/arrow_left.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">

-<polygon points="6.412,9 8.057,9 8.057,14 32.057,14 32.057,17 8.057,17 8.057,22 6.412,22 0,15.5 "/>

-</svg>

diff --git a/assets/icons/arrow_right.svg b/assets/icons/arrow_right.svg
deleted file mode 100644
index c0c6198..0000000
--- a/assets/icons/arrow_right.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">

-<polygon points="32.057,15.5 25.645,22 24,22 24,17 0,17 0,14 24,14 24,9 25.645,9 "/>

-</svg>

diff --git a/assets/icons/arrows-cw.svg b/assets/icons/arrows-cw.svg
deleted file mode 100755
index e3f190b..0000000
--- a/assets/icons/arrows-cw.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 31.968v-12.864h12.864l-5.12 5.12q3.456 3.424 8.256 3.424 4 0 7.104-2.4t4.16-6.144h4.416q-1.12 5.536-5.536 9.216t-10.144 3.648q-6.624 0-11.296-4.672zM0.32 12.832q1.12-5.568 5.536-9.216t10.144-3.648q6.624 0 11.328 4.672l4.672-4.672v12.864h-12.864l5.12-5.12q-3.456-3.424-8.256-3.424-4 0-7.104 2.4t-4.16 6.144h-4.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/article.svg b/assets/icons/article.svg
deleted file mode 100755
index 9ab58a1..0000000
--- a/assets/icons/article.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M29.152 5.248h-28.576v-3.584h28.576v3.584zM18.432 12.384h-17.856v-3.584h17.856v3.584zM29.152 23.104h-28.576v-3.584h28.576v3.584zM22.016 30.272h-21.44v-3.616h21.44v3.616zM29.152 28.448q0 0.768-0.512 1.28t-1.248 0.544-1.28-0.544-0.544-1.28 0.544-1.248 1.28-0.544q0.704 0 1.248 0.544t0.512 1.248z" fill="#000000" />
-</svg>
diff --git a/assets/icons/attention-alt.svg b/assets/icons/attention-alt.svg
deleted file mode 100755
index 0675391..0000000
--- a/assets/icons/attention-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11" height="32" viewBox="0 0 11 32">
-<g>
-</g>
-	<path d="M9.152 22.24v4q0 0.48-0.352 0.8t-0.8 0.352h-4.576q-0.448 0-0.8-0.352t-0.352-0.8v-4q0-0.448 0.352-0.8t0.8-0.32h4.576q0.48 0 0.8 0.32t0.352 0.8zM9.664 3.392l-0.48 13.728q-0.032 0.448-0.384 0.8t-0.8 0.32h-4.576q-0.448 0-0.8-0.32t-0.384-0.8l-0.48-13.728q-0.032-0.448 0.288-0.8t0.8-0.352h5.728q0.448 0 0.8 0.352t0.288 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/attention-circled.svg b/assets/icons/attention-circled.svg
deleted file mode 100755
index ea0567d..0000000
--- a/assets/icons/attention-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M13.728 2.24q3.712 0 6.88 1.856t4.992 4.992 1.824 6.88-1.824 6.88-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856zM16 24.512v-3.392q0-0.256-0.16-0.416t-0.384-0.16h-3.424q-0.256 0-0.416 0.16t-0.192 0.416v3.392q0 0.256 0.192 0.416t0.416 0.192h3.424q0.224 0 0.384-0.192t0.16-0.416zM15.968 18.368l0.32-11.072q0-0.224-0.192-0.32-0.16-0.16-0.416-0.16h-3.936q-0.256 0-0.416 0.16-0.192 0.096-0.192 0.32l0.32 11.072q0 0.192 0.16 0.32t0.448 0.128h3.296q0.256 0 0.416-0.128t0.192-0.32z" fill="#000000" />
-</svg>
diff --git a/assets/icons/bell.svg b/assets/icons/bell.svg
deleted file mode 100644
index 86353e1..0000000
--- a/assets/icons/bell.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="18px" height="20px" viewBox="0 0 18 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
-    <!-- Generator: Sketch 3.3.3 (12081) - http://www.bohemiancoding.com/sketch -->
-    <title>Fill 180 Copy</title>
-    <desc>Created with Sketch.</desc>
-    <defs></defs>
-    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
-        <g id="Notifications-(Cloudant)-V2" sketch:type="MSArtboardGroup" transform="translate(-1304.000000, -65.000000)" fill="#C0C0C0">
-            <g id="Group" sketch:type="MSLayerGroup" transform="translate(1278.000000, 42.000000)">
-                <path d="M27.0872514,38.9987862 C27.3474103,39.2589451 27.6639095,39.3890246 28.016864,39.3890246 L32.6665839,39.3890246 C32.6665839,40.1330461 32.9267429,40.7469881 33.4478893,41.267306 C33.9682073,41.7876239 34.600377,42.0486114 35.3261707,42.0486114 C36.0693637,42.0486114 36.6833057,41.7876239 37.2044521,41.267306 C37.7247701,40.7469881 37.984929,40.1330461 37.984929,39.3890246 L42.634649,39.3890246 C42.9876035,39.3890246 43.3041026,39.2589451 43.5642616,38.9987862 C43.8244205,38.7377987 43.9545,38.4221281 43.9545,38.0683451 C42.634649,36.9531414 41.6486962,35.5769502 40.9792426,33.9397715 C40.309789,32.3034214 39.9750622,30.5742757 39.9750622,28.7697337 C39.9750622,27.617246 39.6403354,26.7240889 38.9891094,26.0546352 C38.3196558,25.3669539 37.4082709,24.9767155 36.2557833,24.8275798 C36.3112949,24.715728 36.3303512,24.5856485 36.3303512,24.455569 C36.3303512,24.1763538 36.2367271,23.9352511 36.0329083,23.7488315 C35.8464887,23.5441841 35.6045574,23.4513886 35.3261707,23.4513886 C35.0469556,23.4513886 34.8240805,23.5441841 34.6376609,23.7488315 C34.4330136,23.9352511 34.340218,24.1763538 34.340218,24.455569 C34.340218,24.5856485 34.3584457,24.715728 34.4147859,24.8275798 C33.2614697,24.9767155 32.3500848,25.3669539 31.6806312,26.0546352 C31.0111776,26.7240889 30.6764508,27.617246 30.6764508,28.7697337 C30.6764508,30.5742757 30.341724,32.3034214 29.6722703,33.9397715 C29.0028167,35.5769502 28.016864,36.9531414 26.697013,38.0683451 C26.697013,38.4221281 26.8270924,38.7377987 27.0872514,38.9987862 L27.0872514,38.9987862 Z M33.6707644,39.2216612 C33.7826162,39.2216612 33.8381278,39.2771728 33.8381278,39.3890246 C33.8381278,39.7983193 33.986435,40.1512738 34.2847064,40.430489 C34.563093,40.7279319 34.9168761,40.8770676 35.3261707,40.8770676 C35.437194,40.8770676 35.4935341,40.9325792 35.4935341,41.044431 C35.4935341,41.1554542 35.437194,41.2117944 35.3261707,41.2117944 C34.8240805,41.2117944 34.3957296,41.0253747 34.0427751,40.6724202 C33.6889921,40.3186372 33.503401,39.8911148 33.503401,39.3890246 C33.503401,39.2771728 33.5589126,39.2216612 33.6707644,39.2216612 L33.6707644,39.2216612 Z" id="Fill-180-Copy" sketch:type="MSShapeGroup"></path>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/assets/icons/block.svg b/assets/icons/block.svg
deleted file mode 100755
index ae3d84f..0000000
--- a/assets/icons/block.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M23.424 15.904q0-2.88-1.536-5.248l-13.472 13.44q2.432 1.6 5.312 1.6 1.984 0 3.776-0.8t3.072-2.080 2.080-3.104 0.768-3.808zM5.6 21.248l13.472-13.472q-2.4-1.6-5.344-1.6-2.656 0-4.896 1.28t-3.52 3.584-1.312 4.864q0 2.912 1.6 5.344zM27.424 15.904q0 2.816-1.088 5.376t-2.912 4.384-4.384 2.944-5.312 1.088-5.344-1.088-4.384-2.944-2.912-4.384-1.088-5.376 1.088-5.344 2.912-4.384 4.384-2.912 5.344-1.088 5.312 1.088 4.384 2.912 2.912 4.384 1.088 5.344z" fill="#000000" />
-</svg>
diff --git a/assets/icons/bookmark-ribbon-wplus.svg b/assets/icons/bookmark-ribbon-wplus.svg
deleted file mode 100755
index c4f6b31..0000000
--- a/assets/icons/bookmark-ribbon-wplus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M24.992-0.032h-17.984v32l8.992-8.192 8.992 8.192v-32zM20.992 11.968h-4v4h-1.984v-4h-4v-2.016h4v-4h1.984v4h4v2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/bookmark.svg b/assets/icons/bookmark.svg
deleted file mode 100755
index d27d25b..0000000
--- a/assets/icons/bookmark.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M29.952 27.808c-3.072 0.16-8.864 0.672-12 2.304-0.16 0.96-0.96 1.696-1.952 1.696-0.992 0-1.76-0.736-1.92-1.696-3.136-1.632-8.96-2.176-12-2.304-1.088 0-1.984-0.896-1.984-1.984v-23.872c0-1.088 0.896-1.984 1.984-1.984 0.064 0 0.128 0.032 0.192 0.032 13.696 0.352 13.728 3.936 13.728 3.936s0.064-3.584 13.728-3.936c0.096 0 0.128-0.032 0.224-0.032 1.088 0 1.984 0.896 1.984 1.984v23.872c0 1.088-0.896 1.984-1.984 1.984zM14.016 6.208c-2.56-1.312-6.816-1.856-9.952-2.080v19.808c5.344 0.288 8.352 1.088 9.952 1.888v-19.616zM27.936 4.128c-3.136 0.224-7.36 0.768-9.92 2.080v19.616c1.6-0.8 4.608-1.6 9.92-1.888v-19.808zM25.952 7.936v3.968c0 0-5.952 0-5.952 1.984v-3.968c0 0 0-1.984 5.952-1.984zM25.952 15.872v4c0 0-5.952 0-5.952 1.984v-4c0 0 0-1.984 5.952-1.984zM12.032 9.92v3.968c0-1.984-5.952-1.984-5.952-1.984v-3.968c5.952 0 5.952 1.984 5.952 1.984zM12.032 17.856v4c0-1.984-5.952-1.984-5.952-1.984v-4c5.952 0 5.952 1.984 5.952 1.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/burger.svg b/assets/icons/burger.svg
deleted file mode 100755
index 91351b6..0000000
--- a/assets/icons/burger.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 4.96h32v6.016h-32v-6.016zM0 12.96h32v6.016h-32v-6.016zM0 20.96h32v6.016h-32v-6.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cancel-circled.svg b/assets/icons/cancel-circled.svg
deleted file mode 100755
index 19de5b7..0000000
--- a/assets/icons/cancel-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM7.008 20.96l4 4 4.992-4.992 4.992 4.992 4-4-4.992-4.992 4.992-4.992-4-4-4.992 4.992-4.992-4.992-4 4 4.992 4.992z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cancel-circled2.svg b/assets/icons/cancel-circled2.svg
deleted file mode 100755
index be09a72..0000000
--- a/assets/icons/cancel-circled2.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM3.488 15.968q0 5.184 3.68 8.832t8.832 3.68 8.832-3.68 3.68-8.832-3.68-8.832-8.832-3.68-8.832 3.68-3.68 8.832zM8.128 20.352l4.384-4.384-4.384-4.384 3.488-3.488 4.384 4.384 4.384-4.384 3.488 3.488-4.384 4.384 4.384 4.384-3.488 3.488-4.384-4.384-4.384 4.384z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cancel.svg b/assets/icons/cancel.svg
deleted file mode 100755
index 56cd8a2..0000000
--- a/assets/icons/cancel.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M20.928 16l11.072 11.072-4.928 4.928-11.072-11.072-11.072 11.072-4.928-4.928 11.072-11.072-11.072-11.072 4.928-4.928 11.072 11.072 11.072-11.072 4.928 4.928z" fill="#000000" />
-</svg>
diff --git a/assets/icons/circle-empty.svg b/assets/icons/circle-empty.svg
deleted file mode 100755
index 08379ab..0000000
--- a/assets/icons/circle-empty.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/clipboard.svg b/assets/icons/clipboard.svg
deleted file mode 100755
index ca97e89..0000000
--- a/assets/icons/clipboard.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M24 32.041h-18c-1.105 0-2-0.893-2-1.996v-24.097c0-1.102 0.895-1.995 2-1.995h5v2.079h-4c-0.552 0-1 0.446-1 0.998v22.017c0 0.553 0.448 0.998 1 0.998h16c0.553 0 1-0.445 1-0.998v-22.017c0-0.552-0.447-0.998-1-0.998h-4v-2.079h5c1.104 0 2 0.894 2 1.995v24.097c0 1.103-0.896 1.996-2 1.996zM11 12.019h11v0.998h-11v-0.998zM11 15.013h11v0.998h-11v-0.998zM11 18.008h11v0.998h-11v-0.998zM11 21.002h11v0.998h-11v-0.998zM22 27.986h-11v-0.996h11v0.996zM11 23.996h11v0.998h-11v-0.998zM8 11.999h1v0.998h-1v-0.998zM8 14.993h1v0.998h-1v-0.998zM8 17.986h1v0.998h-1v-0.998zM8 20.98h1v0.998h-1v-0.998zM9 27.967h-1v-0.998h1v0.998zM8 23.975h1v0.998h-1v-0.998zM21 7.091c0.553 0 1 0.447 1 0.999 0 0.551 0 1.933 0 1.933h-14c0 0 0-1.382 0-1.933 0-0.552 0.447-0.999 1-0.999h3c0 0 0.012-1.419 0.012-3.041 0-1.684 1.3-3.092 2.988-3.092s3.033 1.48 3.033 3.102c0 1.747-0.033 3.031-0.033 3.031h3zM15 3.953c-0.553 0-1 0.446-1 0.997 0 0.552 0.447 0.998 1 0.998s1-0.446 1-0.998c0-0.551-0.447-0.997-1-0.997z" fill="#000000" />
-</svg>
diff --git a/assets/icons/clock.svg b/assets/icons/clock.svg
deleted file mode 100755
index 150cfed..0000000
--- a/assets/icons/clock.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M16 9.696v8q0 0.224-0.16 0.384t-0.416 0.16h-5.696q-0.256 0-0.416-0.16t-0.16-0.384v-1.152q0-0.256 0.16-0.416t0.416-0.16h4v-6.272q0-0.256 0.16-0.416t0.384-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM23.424 15.968q0-2.656-1.312-4.864t-3.52-3.552-4.864-1.312-4.896 1.312-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cog.svg b/assets/icons/cog.svg
deleted file mode 100755
index c33f549..0000000
--- a/assets/icons/cog.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M18.272 15.968q0-1.888-1.312-3.232t-3.232-1.344-3.232 1.344-1.344 3.232 1.344 3.232 3.232 1.344 3.232-1.344 1.312-3.232zM27.424 14.016v3.968q0 0.224-0.128 0.416t-0.352 0.224l-3.328 0.512q-0.32 0.96-0.672 1.632 0.608 0.864 1.888 2.464 0.192 0.192 0.192 0.416t-0.16 0.416q-0.48 0.672-1.76 1.952t-1.696 1.248q-0.224 0-0.448-0.16l-2.464-1.92q-0.8 0.416-1.632 0.672-0.288 2.432-0.512 3.328-0.128 0.512-0.64 0.512h-3.968q-0.256 0-0.448-0.16t-0.192-0.384l-0.512-3.296q-0.864-0.288-1.6-0.672l-2.528 1.92q-0.192 0.16-0.448 0.16t-0.448-0.192q-2.24-2.048-2.944-3.008-0.128-0.16-0.128-0.416 0-0.192 0.16-0.384 0.256-0.384 0.896-1.184t0.96-1.28q-0.48-0.896-0.736-1.76l-3.264-0.48q-0.224-0.032-0.352-0.224t-0.16-0.416v-3.968q0-0.224 0.16-0.416t0.32-0.224l3.328-0.512q0.256-0.8 0.704-1.632-0.736-1.024-1.92-2.464-0.192-0.224-0.192-0.448 0-0.16 0.16-0.384 0.48-0.64 1.76-1.92t1.696-1.28q0.224 0 0.48 0.16l2.464 1.92q0.768-0.416 1.6-0.672 0.288-2.432 0.544-3.328 0.096-0.48 0.64-0.48h3.968q0.224 0 0.416 0.128t0.224 0.384l0.48 3.296q0.896 0.288 1.6 0.672l2.56-1.92q0.16-0.16 0.416-0.16 0.224 0 0.448 0.16 2.304 2.144 2.944 3.040 0.128 0.16 0.128 0.416 0 0.192-0.128 0.384-0.288 0.384-0.928 1.216t-0.96 1.248q0.448 0.896 0.736 1.76l3.264 0.48q0.224 0.032 0.384 0.224t0.128 0.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/collapse.svg b/assets/icons/collapse.svg
deleted file mode 100755
index 1f1ff7b..0000000
--- a/assets/icons/collapse.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0-0.032v32h32v-32h-32zM28 27.968h-24v-16h24v16zM28 7.968h-24v-4h24v4zM14.016 25.952h4v-5.984h4l-6.016-6.016-5.984 6.016h4v5.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cw.svg b/assets/icons/cw.svg
deleted file mode 100755
index 6ee3077..0000000
--- a/assets/icons/cw.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672q6.688 0 11.36 4.736l4.64-3.296v14.88l-14.24-4.768 4.192-2.976q-2.624-2.080-5.952-2.080-3.936 0-6.72 2.784t-2.784 6.72 2.784 6.72 6.72 2.784q2.624 0 4.8-1.28t3.456-3.488l5.632 3.264q-2.144 3.616-5.824 5.824t-8.064 2.176q-6.624 0-11.296-4.672t-4.704-11.328z" fill="#000000" />
-</svg>
diff --git a/assets/icons/dashboard.svg b/assets/icons/dashboard.svg
deleted file mode 100755
index b1ca985..0000000
--- a/assets/icons/dashboard.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 28.416c0 1.888-1.504 3.424-3.392 3.424h-25.056c-1.888 0-3.424-1.536-3.424-3.424v-25.024c0-1.888 1.536-3.424 3.424-3.424h25.056c1.888 0 3.392 1.536 3.392 3.424v25.024zM29.024 3.072c0-0.064-0.032-0.128-0.096-0.128h-25.696c-0.064 0-0.096 0.064-0.096 0.128v25.664c0 0.064 0.032 0.128 0.096 0.128h25.696c0.064 0 0.096-0.064 0.096-0.128v-25.664zM6.304 23.2l-2.432-1.728 6.016-8.416 3.84 3.84 4.096-7.168 4.064 5.056 3.84-6.176 2.56 1.568-6.112 9.76-3.936-4.896-3.84 6.752-4.128-4.128-3.968 5.536z" fill="#000000" />
-</svg>
diff --git a/assets/icons/database.svg b/assets/icons/database.svg
deleted file mode 100755
index ccee72e..0000000
--- a/assets/icons/database.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M15.648 31.808c-6.56 0-11.904-2.656-11.904-5.952v0-3.36c0 3.296 5.344 5.344 11.904 5.344 6.592 0 11.936-2.048 11.936-5.344v3.36c0 3.296-5.344 5.952-11.936 5.952zM15.648 25.856c-6.56 0-11.904-2.656-11.904-5.952v-3.36c0 3.296 5.344 5.344 11.904 5.344 6.592 0 11.936-2.048 11.936-5.344v3.36c0 3.296-5.344 5.952-11.936 5.952zM15.648 19.904c-6.56 0-11.904-2.688-11.904-5.984v-3.328c0 3.296 5.344 5.344 11.904 5.344 6.592 0 11.936-2.048 11.936-5.344v3.328c0 3.296-5.344 5.984-11.936 5.984zM15.648 13.92c-6.56 0-11.904-2.656-11.904-5.952v-1.984c0-3.296 5.344-5.952 11.904-5.952s11.936 2.656 11.936 5.952v1.984c0 3.296-5.344 5.952-11.936 5.952z" fill="#000000" />
-</svg>
diff --git a/assets/icons/deselect-all.svg b/assets/icons/deselect-all.svg
deleted file mode 100644
index c25b446..0000000
--- a/assets/icons/deselect-all.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">

-<path d="M18,32h-4v-3h4V32z M8,3h3V0H8V3z M11,32v-3H8v3H11z M14,0v3h4V0H14z M27,3h2v2h3V0h-5V3z M3,18v-4H0v4H3z M0,11h3V8H0V11z

-	 M3,24v-3H0v3H3z M24,29h-3v3h3V29z M5,29H3v-2H0v5h5V29z M29,27v2h-2v3h5v-5H29z M29,8v3h3V8H29z M3,5V3h2V0H0v5H3z M21,0v3h3V0H21

-	z M29,14v4h3v-4H29z M32,21h-3v3h3V21z M22.8,9.1c-0.9-0.9-1.9-1.5-3.1-2c-1.2-0.5-2.4-0.8-3.7-0.8c-1.3,0-2.5,0.3-3.7,0.8

-	c-1.2,0.5-2.2,1.2-3.1,2c-0.9,0.9-1.5,1.9-2,3.1S6.4,14.7,6.4,16c0,1.3,0.3,2.6,0.8,3.8c0.5,1.2,1.2,2.2,2,3.1

-	c0.9,0.9,1.9,1.5,3.1,2c1.2,0.5,2.4,0.8,3.7,0.8c1.3,0,2.5-0.3,3.7-0.8c1.2-0.5,2.2-1.2,3.1-2c0.9-0.9,1.5-1.9,2-3.1

-	c0.5-1.2,0.8-2.4,0.8-3.8c0-1.3-0.3-2.6-0.8-3.7S23.6,10,22.8,9.1z M9.2,16c0-1.2,0.3-2.4,0.9-3.4c0.6-1.1,1.4-1.9,2.5-2.5

-	c1-0.6,2.2-0.9,3.4-0.9c1.4,0,2.6,0.4,3.8,1.1l-9.4,9.4C9.6,18.6,9.2,17.3,9.2,16z M22.3,18.6c-0.4,0.8-0.8,1.6-1.5,2.2

-	c-0.6,0.6-1.3,1.1-2.2,1.5c-0.8,0.4-1.7,0.5-2.6,0.5c-1.3,0-2.6-0.4-3.7-1.1l9.4-9.4c0.7,1.1,1.1,2.3,1.1,3.7

-	C22.8,16.9,22.6,17.8,22.3,18.6z"/>

-</svg>

diff --git a/assets/icons/document.svg b/assets/icons/document.svg
deleted file mode 100755
index 126879d..0000000
--- a/assets/icons/document.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M17.984 0.032h-13.92v31.872h23.872v-21.92l-9.952-9.952zM8.032 27.904v-23.872h7.968v7.968h7.968v15.904h-15.936z" fill="#000000" />
-</svg>
diff --git a/assets/icons/documents.svg b/assets/icons/documents.svg
deleted file mode 100755
index 9f4504b..0000000
--- a/assets/icons/documents.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M20.96 0.032h-13.888v5.952h-5.952v25.792h23.808v-5.952h5.952v-15.872l-9.92-9.92zM20.96 27.808h-15.872v-17.856h1.984v15.872h13.888v1.984zM26.912 21.856h-15.872v-17.856h7.936v7.936h7.936v9.92z" fill="#000000" />
-</svg>
diff --git a/assets/icons/dot-circled.svg b/assets/icons/dot-circled.svg
deleted file mode 100755
index 797ceb6..0000000
--- a/assets/icons/dot-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M18.272 15.968q0 1.888-1.312 3.232t-3.232 1.344-3.232-1.344-1.344-3.232 1.344-3.232 3.232-1.344 3.232 1.344 1.312 3.232zM13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-1.svg b/assets/icons/down-1.svg
deleted file mode 100755
index a52f5e8..0000000
--- a/assets/icons/down-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M29.152 15.936l-14.304 14.336-14.272-14.336 5.056-5.056 5.664 5.632v-14.848h7.136v14.848l5.632-5.6z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-circled.svg b/assets/icons/down-circled.svg
deleted file mode 100755
index 036674a..0000000
--- a/assets/icons/down-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M20 16.544q0 0.224-0.192 0.416l-5.696 5.696q-0.192 0.16-0.384 0.16t-0.416-0.16l-5.728-5.696q-0.256-0.288-0.128-0.64 0.16-0.352 0.544-0.352h3.424v-6.272q0-0.256 0.16-0.416t0.416-0.16h3.424q0.256 0 0.416 0.16t0.16 0.416v6.272h3.424q0.256 0 0.416 0.16t0.16 0.416zM13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-dir.svg b/assets/icons/down-dir.svg
deleted file mode 100755
index dd8a769..0000000
--- a/assets/icons/down-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
-<g>
-</g>
-	<path d="M18.272 12.544q0 0.448-0.32 0.8l-8 8q-0.352 0.352-0.8 0.352t-0.8-0.352l-8-8q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h16q0.448 0 0.8 0.352t0.32 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-open.svg b/assets/icons/down-open.svg
deleted file mode 100755
index 0f5a932..0000000
--- a/assets/icons/down-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 10.336l4.736-4.736 11.264 11.232 11.264-11.232 4.736 4.736-16 16-4.736-4.736z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down.svg b/assets/icons/down.svg
deleted file mode 100755
index 634a471..0000000
--- a/assets/icons/down.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="32" viewBox="0 0 14 32">
-<g>
-</g>
-	<path d="M13.664 23.168q0.128 0.32-0.096 0.608l-6.24 6.88q-0.192 0.16-0.416 0.16-0.256 0-0.416-0.16l-6.336-6.88q-0.256-0.288-0.096-0.608 0.16-0.352 0.512-0.352h4v-22.272q0-0.256 0.16-0.416t0.416-0.16h3.424q0.256 0 0.416 0.16t0.16 0.416v22.272h4q0.352 0 0.512 0.352z" fill="#000000" />
-</svg>
diff --git a/assets/icons/drop-down-dots.svg b/assets/icons/drop-down-dots.svg
deleted file mode 100755
index 1a1d202..0000000
--- a/assets/icons/drop-down-dots.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M12 1.952h8v8h-8v-8zM12 11.968h8v8h-8v-8zM12 21.952h8v8.032h-8v-8.032z" fill="#000000" />
-</svg>
diff --git a/assets/icons/exchange.svg b/assets/icons/exchange.svg
deleted file mode 100755
index 1bde3c3..0000000
--- a/assets/icons/exchange.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 21.12v3.424q0 0.224-0.16 0.384t-0.416 0.192h-24.576v3.424q0 0.224-0.16 0.384t-0.416 0.192q-0.192 0-0.416-0.192l-5.696-5.696q-0.16-0.16-0.16-0.416t0.16-0.416l5.728-5.696q0.16-0.16 0.384-0.16 0.256 0 0.416 0.16t0.16 0.416v3.424h24.576q0.224 0 0.416 0.16t0.16 0.416zM32 11.392q0 0.256-0.16 0.416l-5.728 5.728q-0.16 0.16-0.384 0.16-0.256 0-0.416-0.192t-0.16-0.384v-3.424h-24.576q-0.224 0-0.416-0.192t-0.16-0.384v-3.424q0-0.256 0.16-0.416t0.416-0.16h24.576v-3.424q0-0.256 0.16-0.416t0.416-0.16q0.192 0 0.416 0.16l5.696 5.696q0.16 0.16 0.16 0.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/expand.svg b/assets/icons/expand.svg
deleted file mode 100755
index 9d47d8c..0000000
--- a/assets/icons/expand.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0-0.032v32h32v-32h-32zM28 27.968h-24v-16h24v16zM28 7.968h-24v-4h24v4zM22.016 19.968h-4v-6.016h-4v6.016h-4l5.984 5.984 6.016-5.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/eye.svg b/assets/icons/eye.svg
deleted file mode 100755
index d5ef732..0000000
--- a/assets/icons/eye.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M14.88 5.248q2.176 0 4.48 1.088t3.968 2.624 3.040 3.104 2.048 2.656l0.736 1.088q-0.288 0.448-0.768 1.184t-2.016 2.592-3.104 3.296-3.872 2.624-4.512 1.152-4.48-1.088-3.968-2.72-3.072-3.2-2.048-2.752l-0.736-1.088q0.256-0.448 0.736-1.152t2.016-2.528 3.136-3.232 3.904-2.528 4.512-1.12zM14.88 23.104q2.944 0 5.056-2.080t2.080-5.056-2.080-5.056-5.056-2.112-5.056 2.112-2.112 5.056 2.112 5.056 5.056 2.080zM11.296 15.968q0-3.584 3.584-3.584t3.552 3.584-3.552 3.552-3.584-3.552z" fill="#000000" />
-</svg>
diff --git a/assets/icons/file-code-o.svg b/assets/icons/file-code-o.svg
deleted file mode 100644
index 5b50cb2..0000000
--- a/assets/icons/file-code-o.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1596 380q28 28 48 76t20 88v1152q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h896q40 0 88 20t76 48zm-444-244v376h376q-10-29-22-41l-313-313q-12-12-41-22zm384 1528v-1024h-416q-40 0-68-28t-28-68v-416h-768v1536h1280zm-928-896q8-11 21-12.5t24 6.5l51 38q11 8 12.5 21t-6.5 24l-182 243 182 243q8 11 6.5 24t-12.5 21l-51 38q-11 8-24 6.5t-21-12.5l-226-301q-14-19 0-38zm802 301q14 19 0 38l-226 301q-8 11-21 12.5t-24-6.5l-51-38q-11-8-12.5-21t6.5-24l182-243-182-243q-8-11-6.5-24t12.5-21l51-38q11-8 24-6.5t21 12.5zm-620 461q-13-2-20.5-13t-5.5-24l138-831q2-13 13-20.5t24-5.5l63 10q13 2 20.5 13t5.5 24l-138 831q-2 13-13 20.5t-24 5.5z"/></svg>
diff --git a/assets/icons/files-o.svg b/assets/icons/files-o.svg
deleted file mode 100644
index 5d2767d..0000000
--- a/assets/icons/files-o.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1696 384q40 0 68 28t28 68v1216q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-288h-544q-40 0-68-28t-28-68v-672q0-40 20-88t48-76l408-408q28-28 76-48t88-20h416q40 0 68 28t28 68v328q68-40 128-40h416zm-544 213l-299 299h299v-299zm-640-384l-299 299h299v-299zm196 647l316-316v-416h-384v416q0 40-28 68t-68 28h-416v640h512v-256q0-40 20-88t48-76zm956 804v-1152h-384v416q0 40-28 68t-68 28h-416v640h896z"/></svg>
diff --git a/assets/icons/filter.svg b/assets/icons/filter.svg
deleted file mode 100644
index f979c94..0000000
--- a/assets/icons/filter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1595 295q17 41-14 70l-493 493v742q0 42-39 59-13 5-25 5-27 0-45-19l-256-256q-19-19-19-45v-486l-493-493q-31-29-14-70 17-39 59-39h1280q42 0 59 39z"/></svg>
diff --git a/assets/icons/gears.svg b/assets/icons/gears.svg
deleted file mode 100755
index 74890d0..0000000
--- a/assets/icons/gears.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
-<g>
-</g>
-	<path d="M16 16q0-1.893-1.339-3.232t-3.232-1.339-3.232 1.339-1.339 3.232 1.339 3.232 3.232 1.339 3.232-1.339 1.339-3.232zM29.714 25.143q0-0.929-0.679-1.607t-1.607-0.679-1.607 0.679-0.679 1.607q0 0.946 0.67 1.616t1.616 0.67 1.616-0.67 0.67-1.616zM29.714 6.857q0-0.929-0.679-1.607t-1.607-0.679-1.607 0.679-0.679 1.607q0 0.946 0.67 1.616t1.616 0.67 1.616-0.67 0.67-1.616zM22.857 14.375v3.304q0 0.179-0.125 0.348t-0.286 0.188l-2.768 0.429q-0.196 0.625-0.571 1.357 0.607 0.857 1.607 2.054 0.125 0.179 0.125 0.357 0 0.214-0.125 0.339-0.411 0.536-1.473 1.598t-1.402 1.063q-0.196 0-0.375-0.125l-2.054-1.607q-0.661 0.339-1.375 0.554-0.196 1.929-0.411 2.768-0.125 0.429-0.536 0.429h-3.321q-0.196 0-0.357-0.134t-0.179-0.313l-0.411-2.732q-0.607-0.179-1.339-0.554l-2.107 1.589q-0.125 0.125-0.357 0.125-0.196 0-0.375-0.143-2.571-2.375-2.571-2.857 0-0.161 0.125-0.339 0.179-0.25 0.732-0.946t0.839-1.089q-0.411-0.786-0.625-1.464l-2.714-0.429q-0.179-0.018-0.304-0.17t-0.125-0.348v-3.304q0-0.179 0.125-0.348t0.286-0.188l2.768-0.429q0.196-0.625 0.571-1.357-0.607-0.857-1.607-2.054-0.125-0.196-0.125-0.357 0-0.214 0.125-0.357 0.393-0.536 1.464-1.589t1.411-1.054q0.196 0 0.375 0.125l2.054 1.607q0.607-0.321 1.375-0.571 0.196-1.929 0.411-2.75 0.125-0.429 0.536-0.429h3.321q0.196 0 0.357 0.134t0.179 0.313l0.411 2.732q0.607 0.179 1.339 0.554l2.107-1.589q0.143-0.125 0.357-0.125 0.196 0 0.375 0.143 2.571 2.375 2.571 2.857 0 0.161-0.125 0.339-0.214 0.286-0.75 0.964t-0.804 1.071q0.411 0.857 0.607 1.464l2.714 0.411q0.179 0.036 0.304 0.188t0.125 0.348zM34.286 23.893v2.5q0 0.286-2.661 0.554-0.214 0.482-0.536 0.929 0.911 2.018 0.911 2.464 0 0.071-0.071 0.125-2.179 1.268-2.214 1.268-0.143 0-0.821-0.839t-0.929-1.214q-0.357 0.036-0.536 0.036t-0.536-0.036q-0.25 0.375-0.929 1.214t-0.821 0.839q-0.036 0-2.214-1.268-0.071-0.054-0.071-0.125 0-0.446 0.911-2.464-0.321-0.446-0.536-0.929-2.661-0.268-2.661-0.554v-2.5q0-0.286 2.661-0.554 0.232-0.518 0.536-0.929-0.911-2.018-0.911-2.464 0-0.071 0.071-0.125 0.071-0.036 0.625-0.357t1.054-0.607 0.536-0.286q0.143 0 0.821 0.83t0.929 1.205q0.357-0.036 0.536-0.036t0.536 0.036q0.911-1.268 1.643-2l0.107-0.036q0.071 0 2.214 1.25 0.071 0.054 0.071 0.125 0 0.446-0.911 2.464 0.304 0.411 0.536 0.929 2.661 0.268 2.661 0.554zM34.286 5.607v2.5q0 0.286-2.661 0.554-0.214 0.482-0.536 0.929 0.911 2.018 0.911 2.464 0 0.071-0.071 0.125-2.179 1.268-2.214 1.268-0.143 0-0.821-0.839t-0.929-1.214q-0.357 0.036-0.536 0.036t-0.536-0.036q-0.25 0.375-0.929 1.214t-0.821 0.839q-0.036 0-2.214-1.268-0.071-0.054-0.071-0.125 0-0.446 0.911-2.464-0.321-0.446-0.536-0.929-2.661-0.268-2.661-0.554v-2.5q0-0.286 2.661-0.554 0.232-0.518 0.536-0.929-0.911-2.018-0.911-2.464 0-0.071 0.071-0.125 0.071-0.036 0.625-0.357t1.054-0.607 0.536-0.286q0.143 0 0.821 0.83t0.929 1.205q0.357-0.036 0.536-0.036t0.536 0.036q0.911-1.268 1.643-2l0.107-0.036q0.071 0 2.214 1.25 0.071 0.054 0.071 0.125 0 0.446-0.911 2.464 0.304 0.411 0.536 0.929 2.661 0.268 2.661 0.554z" fill="#000000" />
-</svg>
diff --git a/assets/icons/help-circled.svg b/assets/icons/help-circled.svg
deleted file mode 100755
index 964f822..0000000
--- a/assets/icons/help-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M16 24.544v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-3.424q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h3.424q0.256 0 0.416-0.16t0.16-0.416zM20.576 12.544q0-1.568-0.992-2.912t-2.464-2.080-3.040-0.736q-4.352 0-6.624 3.808-0.288 0.448 0.128 0.768l2.368 1.76q0.128 0.128 0.32 0.128 0.288 0 0.448-0.224 0.96-1.216 1.536-1.632 0.608-0.448 1.536-0.448 0.864 0 1.536 0.48t0.672 1.056q0 0.672-0.352 1.088t-1.216 0.8q-1.12 0.512-2.080 1.536t-0.928 2.24v0.64q0 0.256 0.16 0.416t0.416 0.16h3.424q0.256 0 0.416-0.16t0.16-0.416q0-0.32 0.384-0.864t0.96-0.896q0.576-0.32 0.896-0.512t0.8-0.608 0.8-0.864 0.512-1.088 0.224-1.44zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/help.svg b/assets/icons/help.svg
deleted file mode 100755
index ee3a4c9..0000000
--- a/assets/icons/help.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
-<g>
-</g>
-	<path d="M12.576 22.4v4.288q0 0.288-0.224 0.512t-0.48 0.192h-4.288q-0.288 0-0.512-0.192t-0.224-0.512v-4.288q0-0.288 0.224-0.512t0.512-0.192h4.288q0.256 0 0.48 0.192t0.224 0.512zM18.208 11.68q0 0.96-0.256 1.792t-0.64 1.376-0.992 1.056-1.024 0.8-1.088 0.608q-0.736 0.416-1.216 1.184t-0.48 1.184q0 0.32-0.224 0.576t-0.512 0.288h-4.288q-0.256 0-0.448-0.32t-0.192-0.672v-0.832q0-1.472 1.184-2.784t2.528-1.92q1.056-0.48 1.504-1.024t0.448-1.344q0-0.736-0.832-1.312t-1.92-0.576q-1.152 0-1.92 0.512-0.64 0.448-1.92 2.048-0.224 0.288-0.544 0.288-0.224 0-0.448-0.128l-2.912-2.24q-0.256-0.192-0.288-0.448t0.096-0.512q2.848-4.736 8.288-4.736 1.44 0 2.88 0.544t2.592 1.472 1.888 2.304 0.736 2.816z" fill="#000000" />
-</svg>
diff --git a/assets/icons/info-circled.svg b/assets/icons/info-circled.svg
deleted file mode 100755
index 919715d..0000000
--- a/assets/icons/info-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M18.272 24.544v-2.848q0-0.256-0.16-0.416t-0.384-0.16h-1.728v-9.152q0-0.256-0.16-0.416t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.416v2.848q0 0.256 0.16 0.416t0.416 0.16h1.696v5.728h-1.696q-0.256 0-0.416 0.16t-0.16 0.416v2.848q0 0.256 0.16 0.416t0.416 0.16h8q0.224 0 0.384-0.16t0.16-0.416zM16 8.544v-2.848q0-0.256-0.16-0.416t-0.416-0.16h-3.424q-0.256 0-0.416 0.16t-0.16 0.416v2.848q0 0.256 0.16 0.416t0.416 0.16h3.424q0.256 0 0.416-0.16t0.16-0.416zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/json.svg b/assets/icons/json.svg
deleted file mode 100755
index 5bc7923..0000000
--- a/assets/icons/json.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M5.888 3.296c-0.96 0.64-1.44 1.824-1.44 3.552 0 0.576 0.032 1.056 0.064 1.536 0.032 0.448 0.064 0.896 0.096 1.312 0.064 0.416 0.096 0.832 0.128 1.248 0.032 0.448 0.032 0.896 0.032 1.376 0 0.288-0.064 0.576-0.192 0.832-0.128 0.288-0.352 0.544-0.704 0.768-0.32 0.224-0.8 0.384-1.344 0.544-0.576 0.128-1.28 0.224-2.144 0.224v2.752c0.864 0.032 1.568 0.096 2.144 0.256s1.024 0.32 1.344 0.544c0.352 0.224 0.576 0.48 0.704 0.736 0.128 0.288 0.192 0.576 0.192 0.832 0 0.512 0 0.992-0.032 1.408-0.032 0.416-0.064 0.832-0.128 1.248-0.032 0.416-0.064 0.832-0.096 1.28s-0.064 0.96-0.064 1.536c0 1.728 0.48 2.912 1.44 3.584 0.96 0.64 2.464 0.96 4.512 0.96h2.464v-2.496h-1.312c-0.64 0-1.184-0.032-1.632-0.096-0.416-0.064-0.736-0.192-0.992-0.352-0.224-0.16-0.384-0.384-0.48-0.672-0.096-0.288-0.16-0.672-0.16-1.12 0-0.864 0.032-1.696 0.096-2.528 0.032-0.8 0.064-1.696 0.064-2.688 0-1.216-0.224-2.080-0.736-2.624s-1.312-0.928-2.464-1.12v-0.128c1.152-0.192 1.984-0.544 2.464-1.088s0.736-1.44 0.736-2.656c0-0.96-0.032-1.856-0.064-2.688-0.064-0.832-0.096-1.664-0.096-2.528 0-0.448 0.064-0.8 0.16-1.088 0.096-0.288 0.256-0.512 0.48-0.704 0.256-0.16 0.576-0.288 0.992-0.352s0.992-0.096 1.632-0.096h1.312v-2.496h-2.464c-2.048 0-3.552 0.32-4.512 0.992zM29.888 14.464c-0.576-0.16-1.024-0.32-1.376-0.544-0.32-0.224-0.576-0.48-0.704-0.768-0.128-0.256-0.192-0.544-0.192-0.832 0-0.48 0.032-0.928 0.064-1.376 0.032-0.416 0.064-0.832 0.128-1.248 0.032-0.416 0.096-0.864 0.128-1.312 0.032-0.48 0.032-0.96 0.032-1.536 0-1.728-0.48-2.912-1.44-3.552-0.96-0.672-2.464-0.992-4.512-0.992h-2.464v2.496h1.312c0.672 0 1.216 0.032 1.632 0.096s0.736 0.192 0.96 0.352c0.256 0.192 0.416 0.416 0.512 0.704 0.096 0.288 0.128 0.64 0.128 1.088 0 0.864 0 1.696-0.064 2.528s-0.064 1.728-0.064 2.688c0 1.216 0.256 2.112 0.736 2.656 0.512 0.544 1.312 0.896 2.464 1.088v0.128c-1.152 0.192-1.952 0.576-2.464 1.12-0.48 0.544-0.736 1.408-0.736 2.624 0 0.992 0.032 1.888 0.064 2.688 0.064 0.832 0.064 1.664 0.064 2.528 0 0.448-0.032 0.832-0.128 1.12-0.096 0.288-0.256 0.512-0.512 0.672-0.224 0.192-0.544 0.288-0.96 0.352-0.416 0.064-0.96 0.096-1.632 0.096h-1.312v2.496h2.464c2.048 0 3.552-0.32 4.512-0.96 0.96-0.672 1.44-1.856 1.44-3.584 0-0.576 0-1.088-0.032-1.536-0.032-0.448-0.096-0.864-0.128-1.28-0.064-0.416-0.096-0.832-0.128-1.248-0.032-0.416-0.064-0.896-0.064-1.408 0-0.256 0.064-0.544 0.192-0.832 0.128-0.256 0.384-0.512 0.704-0.736 0.352-0.224 0.8-0.416 1.376-0.544s1.28-0.224 2.144-0.256v-2.752c-0.864 0-1.6-0.096-2.144-0.224z" fill="#000000" />
-</svg>
diff --git a/assets/icons/key.svg b/assets/icons/key.svg
deleted file mode 100755
index 101535d..0000000
--- a/assets/icons/key.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M20.256 5.248q-2.24 0-3.808 1.568t-1.6 3.744q0 0.448 0.128 1.024l0.352 1.824q-1.856 1.856-5.6 5.6t-5.568 5.536v2.112h3.552v-3.552h3.584v-3.584h3.552v-1.504l2.56-2.528 1.824 0.352q0.576 0.096 0.992 0.096 2.24 0 3.808-1.568t1.536-3.776-1.536-3.776-3.776-1.568zM20.256 1.664q3.68 0 6.304 2.624t2.592 6.304-2.592 6.304-6.336 2.624q-0.896 0-1.632-0.16l-0.16 0.16v3.584h-3.584v3.552h-3.552v3.616h-10.72v-7.168l10.88-10.88q-0.16-0.736-0.16-1.664 0-3.68 2.624-6.272t6.336-2.624zM18.432 10.56q0-1.76 1.792-1.76t1.792 1.76q0 1.824-1.792 1.824t-1.792-1.824z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-1.svg b/assets/icons/left-1.svg
deleted file mode 100755
index 078fd4c..0000000
--- a/assets/icons/left-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M14.848 30.272l-14.272-14.336 14.272-14.272 5.088 5.056-5.664 5.664h14.88v7.136h-14.88l5.664 5.632z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-circled.svg b/assets/icons/left-circled.svg
deleted file mode 100755
index a11eb04..0000000
--- a/assets/icons/left-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M20.576 14.24v3.456q0 0.224-0.16 0.384t-0.416 0.16h-6.272v3.456q0 0.224-0.16 0.384t-0.416 0.16q-0.224 0-0.448-0.16l-5.696-5.696q-0.16-0.16-0.16-0.416t0.16-0.416l5.728-5.696q0.16-0.16 0.416-0.16 0.224 0 0.384 0.16t0.192 0.384v3.456h6.272q0.224 0 0.416 0.16t0.16 0.384zM23.424 15.968q0-2.656-1.312-4.864t-3.52-3.552-4.864-1.312-4.896 1.312-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-dir.svg b/assets/icons/left-dir.svg
deleted file mode 100755
index 24ac831..0000000
--- a/assets/icons/left-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11" height="32" viewBox="0 0 11 32">
-<g>
-</g>
-	<path d="M11.424 7.968v16q0 0.448-0.32 0.8t-0.832 0.352-0.8-0.352l-8-8q-0.32-0.352-0.32-0.8t0.32-0.8l8-8q0.352-0.352 0.8-0.352t0.832 0.352 0.32 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-open.svg b/assets/icons/left-open.svg
deleted file mode 100755
index c968974..0000000
--- a/assets/icons/left-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="32" viewBox="0 0 21 32">
-<g>
-</g>
-	<path d="M0 15.968l4.736-4.768 11.264-11.232 4.736 4.736-11.232 11.264 11.232 11.264-4.736 4.736-11.264-11.264z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left.svg b/assets/icons/left.svg
deleted file mode 100755
index 3a1e099..0000000
--- a/assets/icons/left.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 14.24v3.456q0 0.224-0.16 0.384t-0.416 0.16h-22.272v4q0 0.384-0.352 0.544t-0.608-0.096l-6.88-6.272q-0.16-0.16-0.16-0.384 0-0.256 0.16-0.448l6.88-6.304q0.288-0.256 0.608-0.128 0.352 0.16 0.352 0.544v4h22.272q0.256 0 0.416 0.16t0.16 0.384z" fill="#000000" />
-</svg>
diff --git a/assets/icons/link.svg b/assets/icons/link.svg
deleted file mode 100755
index f385901..0000000
--- a/assets/icons/link.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M26.016 21.696q0-0.736-0.512-1.216l-3.712-3.712q-0.512-0.512-1.216-0.512-0.768 0-1.28 0.576 0.032 0.032 0.32 0.32t0.384 0.384 0.288 0.352 0.224 0.448 0.064 0.48q0 0.736-0.512 1.216t-1.216 0.512q-0.256 0-0.48-0.064t-0.448-0.224-0.352-0.288-0.384-0.384-0.32-0.32q-0.608 0.544-0.608 1.28 0 0.736 0.512 1.216l3.68 3.712q0.48 0.48 1.216 0.48 0.704 0 1.216-0.48l2.624-2.592q0.512-0.512 0.512-1.216zM13.44 9.088q0-0.704-0.48-1.216l-3.68-3.68q-0.512-0.512-1.216-0.512-0.704 0-1.216 0.48l-2.624 2.624q-0.512 0.48-0.512 1.184t0.512 1.216l3.712 3.712q0.48 0.48 1.216 0.48 0.736 0 1.28-0.544-0.064-0.064-0.352-0.352t-0.384-0.384-0.256-0.32-0.224-0.448-0.064-0.512q0-0.704 0.48-1.216t1.216-0.48q0.288 0 0.512 0.064t0.448 0.224 0.32 0.256 0.384 0.384 0.352 0.352q0.576-0.544 0.576-1.312zM29.44 21.696q0 2.112-1.536 3.616l-2.624 2.592q-1.472 1.504-3.616 1.504-2.176 0-3.648-1.536l-3.68-3.68q-1.472-1.504-1.472-3.648 0-2.176 1.568-3.712l-1.568-1.568q-1.536 1.568-3.712 1.568-2.144 0-3.648-1.504l-3.712-3.712q-1.504-1.504-1.504-3.648t1.504-3.616l2.624-2.624q1.504-1.472 3.648-1.472t3.648 1.504l3.68 3.712q1.472 1.472 1.472 3.616 0 2.208-1.568 3.744l1.568 1.568q1.536-1.568 3.712-1.568 2.144 0 3.648 1.504l3.712 3.712q1.504 1.504 1.504 3.648z" fill="#000000" />
-</svg>
diff --git a/assets/icons/list-alt.svg b/assets/icons/list-alt.svg
deleted file mode 100755
index bfdd3a5..0000000
--- a/assets/icons/list-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M6.848 21.12v1.12q0 0.256-0.16 0.416t-0.416 0.16h-1.12q-0.224 0-0.416-0.16t-0.16-0.416v-1.12q0-0.256 0.16-0.416t0.416-0.16h1.12q0.256 0 0.416 0.16t0.16 0.416zM6.848 16.544v1.152q0 0.224-0.16 0.384t-0.416 0.16h-1.12q-0.224 0-0.416-0.16t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h1.12q0.256 0 0.416 0.16t0.16 0.416zM6.848 11.968v1.152q0 0.224-0.16 0.384t-0.416 0.192h-1.12q-0.224 0-0.416-0.192t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h1.12q0.256 0 0.416 0.16t0.16 0.416zM27.424 21.12v1.12q0 0.256-0.16 0.416t-0.416 0.16h-17.12q-0.256 0-0.416-0.16t-0.16-0.416v-1.12q0-0.256 0.16-0.416t0.416-0.16h17.12q0.256 0 0.416 0.16t0.16 0.416zM27.424 16.544v1.152q0 0.224-0.16 0.384t-0.416 0.16h-17.12q-0.256 0-0.416-0.16t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h17.12q0.256 0 0.416 0.16t0.16 0.416zM27.424 11.968v1.152q0 0.224-0.16 0.384t-0.416 0.192h-17.12q-0.256 0-0.416-0.192t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h17.12q0.256 0 0.416 0.16t0.16 0.416zM29.728 24.544v-14.848q0-0.256-0.192-0.416t-0.384-0.16h-26.304q-0.224 0-0.384 0.16t-0.192 0.416v14.848q0 0.224 0.192 0.384t0.384 0.192h26.304q0.224 0 0.384-0.192t0.192-0.384zM32 5.12v19.424q0 1.184-0.832 2.016t-2.016 0.832h-26.304q-1.152 0-2.016-0.832t-0.832-2.016v-19.424q0-1.184 0.832-2.016t2.016-0.864h26.304q1.184 0 2.016 0.864t0.832 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/lock.svg b/assets/icons/lock.svg
deleted file mode 100755
index fcfa074..0000000
--- a/assets/icons/lock.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="32" viewBox="0 0 21 32">
-<g>
-</g>
-	<path d="M5.728 13.696h9.12v-3.456q0-1.888-1.344-3.232t-3.232-1.312-3.232 1.312-1.312 3.232v3.456zM20.576 15.392v10.304q0 0.704-0.512 1.184t-1.216 0.512h-17.12q-0.736 0-1.216-0.512t-0.512-1.184v-10.304q0-0.704 0.512-1.216t1.216-0.48h0.544v-3.456q0-3.264 2.368-5.632t5.632-2.368 5.664 2.368 2.336 5.632v3.456h0.576q0.736 0 1.216 0.48t0.512 1.216z" fill="#000000" />
-</svg>
diff --git a/assets/icons/mail-alt.svg b/assets/icons/mail-alt.svg
deleted file mode 100755
index 7dcbae2..0000000
--- a/assets/icons/mail-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 12.64v14.176q0 1.184-0.832 2.016t-2.016 0.864h-26.304q-1.152 0-2.016-0.864t-0.832-2.016v-14.176q0.8 0.896 1.792 1.568 6.464 4.384 8.896 6.144 1.024 0.768 1.632 1.184t1.696 0.864 1.952 0.416h0.064q0.896 0 1.952-0.416t1.696-0.864 1.632-1.184q3.040-2.176 8.896-6.144 1.024-0.704 1.792-1.568zM32 7.392q0 1.408-0.864 2.688t-2.176 2.208q-6.72 4.672-8.384 5.792-0.16 0.128-0.736 0.544t-0.96 0.704-0.928 0.576-1.056 0.48-0.864 0.16h-0.064q-0.384 0-0.864-0.16t-1.056-0.48-0.928-0.576-0.96-0.704-0.736-0.544q-1.632-1.12-4.704-3.232t-3.648-2.56q-1.12-0.736-2.080-2.048t-0.992-2.464q0-1.376 0.736-2.304t2.112-0.928h26.304q1.152 0 1.984 0.832t0.864 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/mail.svg b/assets/icons/mail.svg
deleted file mode 100755
index a36ebba..0000000
--- a/assets/icons/mail.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M29.728 26.816v-13.696q-0.576 0.64-1.248 1.184-4.768 3.648-7.616 6.016-0.896 0.768-1.472 1.216t-1.536 0.864-1.824 0.416h-0.064q-0.832 0-1.824-0.416t-1.536-0.864-1.472-1.216q-2.816-2.368-7.616-6.016-0.672-0.544-1.248-1.184v13.696q0 0.256 0.192 0.416t0.384 0.16h26.304q0.224 0 0.384-0.16t0.192-0.416zM29.728 8.064v-0.448t-0.032-0.224-0.032-0.224-0.096-0.16-0.16-0.128-0.256-0.064h-26.304q-0.224 0-0.384 0.192t-0.192 0.384q0 3.008 2.624 5.088 3.456 2.72 7.168 5.664 0.128 0.064 0.64 0.512t0.8 0.672 0.8 0.576 0.896 0.48 0.768 0.16h0.064q0.352 0 0.768-0.16t0.896-0.48 0.8-0.576 0.8-0.672 0.64-0.512q3.712-2.944 7.168-5.664 0.96-0.768 1.792-2.080t0.832-2.336zM32 7.392v19.424q0 1.184-0.832 2.016t-2.016 0.864h-26.304q-1.152 0-2.016-0.864t-0.832-2.016v-19.424q0-1.184 0.832-2.016t2.016-0.832h26.304q1.184 0 2.016 0.832t0.832 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/map.svg b/assets/icons/map.svg
deleted file mode 100644
index a9ecb15..0000000
--- a/assets/icons/map.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -256 1792 1792">
-  <g transform="matrix(1 0 0 -1 0 1536)">
-   <path fill="currentColor"
-d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
-q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
-  </g>
-
-</svg>
diff --git a/assets/icons/map2.svg b/assets/icons/map2.svg
deleted file mode 100644
index 55a81d8..0000000
--- a/assets/icons/map2.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -257 2048 1792">
-  <g transform="matrix(1 0 0 -1 0 1536)">
-   <path fill="currentColor"
-d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
-v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
-  </g>
-
-</svg>
diff --git a/assets/icons/megaphone.svg b/assets/icons/megaphone.svg
deleted file mode 100755
index a0838a8..0000000
--- a/assets/icons/megaphone.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M29.728 11.392q0.928 0 1.6 0.672t0.672 1.632-0.672 1.6-1.6 0.672v6.848q0 0.928-0.704 1.6t-1.6 0.704q-7.456-6.208-14.496-6.784-1.024 0.32-1.632 1.152t-0.544 1.824 0.704 1.632q-0.352 0.608-0.416 1.184t0.128 1.024 0.576 0.992 0.864 0.896 1.12 0.896q-0.544 1.024-2.016 1.472t-3.008 0.224-2.336-0.992q-0.128-0.416-0.544-1.568t-0.576-1.696-0.384-1.6-0.288-1.792 0.064-1.76 0.384-1.984h-2.176q-1.152 0-2.016-0.832t-0.832-2.016v-3.424q0-1.184 0.832-2.016t2.016-0.832h8.576q7.776 0 16-6.88 0.928 0 1.6 0.704t0.704 1.6v6.848zM27.424 22.176v-17.024q-7.040 5.376-13.696 6.112v4.832q6.72 0.736 13.696 6.080z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus-circled.svg b/assets/icons/minus-circled.svg
deleted file mode 100755
index 028965c..0000000
--- a/assets/icons/minus-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM6.816 18.592h18.368v-5.248h-18.368v5.248z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus-circled2.svg b/assets/icons/minus-circled2.svg
deleted file mode 100644
index 584bef9..0000000
--- a/assets/icons/minus-circled2.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">

-<path d="M6.8,18.6h18.4v-5.2H6.8V18.6z M0,16c0-4.4,1.6-8.2,4.7-11.3S11.6-0.1,16,0s8.2,1.6,11.3,4.7C30.5,7.7,32,11.5,32,16

-	c0,4.5-1.6,8.2-4.7,11.3S20.5,31.9,16,32s-8.2-1.5-11.3-4.7S0.1,20.4,0,16z M3.5,16c0,3.5,1.2,6.4,3.7,8.8c2.5,2.4,5.4,3.7,8.8,3.7

-	c3.4,0,6.4-1.2,8.8-3.7s3.7-5.4,3.7-8.8s-1.2-6.4-3.7-8.8S19.4,3.4,16,3.5c-3.4,0-6.4,1.2-8.8,3.7S3.5,12.5,3.5,16z"/>

-</svg>

diff --git a/assets/icons/minus-squared-alt.svg b/assets/icons/minus-squared-alt.svg
deleted file mode 100755
index 220a3bf..0000000
--- a/assets/icons/minus-squared-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M20.576 14.24v1.152q0 0.256-0.16 0.416t-0.416 0.16h-14.848q-0.256 0-0.416-0.16t-0.16-0.416v-1.152q0-0.224 0.16-0.384t0.416-0.16h14.848q0.256 0 0.416 0.16t0.16 0.384zM22.848 22.24v-14.848q0-1.184-0.832-2.016t-2.016-0.832h-14.848q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.048t2.016 0.832h14.848q1.184 0 2.016-0.832t0.832-2.048zM25.152 7.392v14.848q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h14.848q2.112 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus-squared.svg b/assets/icons/minus-squared.svg
deleted file mode 100755
index 45736fc..0000000
--- a/assets/icons/minus-squared.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M22.848 17.12v-2.304q0-0.448-0.32-0.8t-0.8-0.32h-16q-0.48 0-0.832 0.32t-0.32 0.8v2.304q0 0.448 0.32 0.8t0.832 0.32h16q0.448 0 0.8-0.32t0.32-0.8zM27.424 7.392v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus.svg b/assets/icons/minus.svg
deleted file mode 100755
index 0aa14dc..0000000
--- a/assets/icons/minus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 20.48v-9.024h32v9.024h-32z" fill="#000000" />
-</svg>
diff --git a/assets/icons/mixer.svg b/assets/icons/mixer.svg
deleted file mode 100755
index 0b3a857..0000000
--- a/assets/icons/mixer.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M25.952 31.808h-19.808c-3.296 0-5.952-2.688-5.952-5.952v-19.808c0-3.296 2.656-5.952 5.952-5.952h19.808c3.264 0 5.952 2.656 5.952 5.952v19.808c0 3.264-2.688 5.952-5.952 5.952zM27.936 6.048c0-1.12-0.896-1.984-1.984-1.984h-19.808c-1.12 0-1.984 0.896-1.984 1.984v19.808c0 1.088 0.864 1.984 1.984 1.984h19.808c1.088 0 1.984-0.896 1.984-1.984v-19.808zM21.984 21.888v2.976c0 0.544-0.448 0.992-0.992 0.992s-0.992-0.448-0.992-0.992v-2.976c-1.088 0-1.984-0.896-1.984-1.984v-1.984c0-1.088 0.896-1.984 1.984-1.984v-8.896c0-0.544 0.448-0.992 0.992-0.992s0.992 0.448 0.992 0.992v8.896c1.088 0 1.984 0.896 1.984 1.984v1.984c0 1.088-0.896 1.984-1.984 1.984zM12.064 15.936v8.928c0 0.544-0.448 0.992-0.992 0.992s-0.992-0.448-0.992-0.992v-8.928c-1.088 0-1.984-0.896-1.984-1.984v-1.984c0-1.088 0.896-1.952 1.984-1.952v-2.976c0-0.544 0.448-0.992 0.992-0.992s0.992 0.448 0.992 0.992v2.976c1.12 0 1.984 0.864 1.984 1.952v1.984c0 1.12-0.864 1.984-1.984 1.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/new-database.svg b/assets/icons/new-database.svg
deleted file mode 100755
index b9681a7..0000000
--- a/assets/icons/new-database.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M1.6 8v-1.984c0-3.296 5.344-5.952 11.904-5.952s11.936 2.656 11.936 5.952v1.984c0 2.272-2.464 4.224-6.144 5.216-0.128 0.032-0.256 0.064-0.384 0.096-1.6 0.416-3.456 0.672-5.408 0.672-6.56 0-11.904-2.688-11.904-5.984zM24 13.312c0.512 0.128 0.992 0.288 1.44 0.512v-3.2c0 1.024-0.512 1.952-1.44 2.688zM12.864 27.872c-6.272-0.128-11.264-2.144-11.264-5.312v3.36c0 3.296 5.344 5.952 11.904 5.952 1.12 0 2.176-0.064 3.2-0.224-1.6-0.864-2.944-2.176-3.84-3.776zM11.968 25.856c-0.288-0.928-0.448-1.92-0.448-2.944 0-0.352 0.032-0.704 0.064-1.056-5.664-0.352-9.984-2.304-9.984-5.28v3.36c0 3.040 4.512 5.536 10.368 5.92zM12 19.904c0.48-1.504 1.312-2.848 2.4-3.968-0.288 0.032-0.576 0.032-0.896 0.032-6.56 0-11.904-2.048-11.904-5.344v3.36c0 3.040 4.544 5.536 10.4 5.92zM30.432 22.912c0 4.96-4.032 8.96-8.96 8.96s-8.96-4-8.96-8.96 4.032-8.928 8.96-8.928c4.928 0 8.96 4 8.96 8.928zM27.424 21.92h-4.96v-4.96h-1.984v4.96h-4.96v1.984h4.96v4.992h1.984v-4.992h4.96v-1.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/ok-circled-2.svg b/assets/icons/ok-circled-2.svg
deleted file mode 100755
index 3f2de78..0000000
--- a/assets/icons/ok-circled-2.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 16q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM3.488 16q0 5.184 3.68 8.832t8.832 3.68 8.832-3.68 3.68-8.832-3.68-8.832-8.832-3.68-8.832 3.68-3.68 8.832zM6.88 17.632l3.008-2.944 2.976 3.008 9.248-9.312 3.008 2.976-9.312 9.28-2.944 2.976-2.976-2.976z" fill="#000000" />
-</svg>
diff --git a/assets/icons/ok-circled.svg b/assets/icons/ok-circled.svg
deleted file mode 100755
index e01ccbd..0000000
--- a/assets/icons/ok-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM5.824 17.792l6.688 6.688 3.296-3.328 10.368-10.368-3.296-3.328-10.368 10.4-3.392-3.392z" fill="#000000" />
-</svg>
diff --git a/assets/icons/ok.svg b/assets/icons/ok.svg
deleted file mode 100755
index 149f2da..0000000
--- a/assets/icons/ok.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 18.848l5.184-5.184 5.312 5.248 16.256-16.32 5.248 5.248-21.504 21.504-5.184-5.248z" fill="#000000" />
-</svg>
diff --git a/assets/icons/paperclip.svg b/assets/icons/paperclip.svg
deleted file mode 100644
index 24f0a78..0000000
--- a/assets/icons/paperclip.svg
+++ /dev/null
@@ -1,1364 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1000px"

-	 height="1000px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">

-<g id="Layer_1" display="none">

-	<g id="Layer_1_3_">

-		<g id="Layer_1_2_" display="inline">

-			

-				<g id="Layer_1_1_" inkscape:version="0.48.2 r9819" sodipodi:docname="clock_scaled.svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd">

-				

-					<sodipodi:namedview  inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1916" inkscape:window-height="1036" inkscape:guide-bbox="true" inkscape:current-layer="Layer_1" inkscape:window-x="4" inkscape:window-maximized="0" inkscape:window-y="22" inkscape:zoom="0.5" inkscape:cy="451.84046" showguides="true" pagecolor="#ffffff" inkscape:cx="500" bordercolor="#666666" objecttolerance="10" gridtolerance="10" guidetolerance="10" showgrid="false" id="namedview3067" borderopacity="1">

-					</sodipodi:namedview>

-				<g id="g3061" transform="matrix(38.592158,0,0,38.593647,-11301.328,-14803.751)">

-					<path id="path3063" inkscape:connector-curvature="0" d="M305.796,383.58c-7.155,0-12.956,5.8-12.956,12.956

-						s5.801,12.955,12.956,12.955c7.155,0,12.956-5.799,12.956-12.955S312.951,383.58,305.796,383.58z M305.796,406.252

-						c-5.358,0-9.717-4.359-9.717-9.716c0-5.358,4.359-9.716,9.717-9.716c5.357,0,9.716,4.358,9.716,9.716

-						C315.513,401.893,311.153,406.252,305.796,406.252z"/>

-					<path id="path3065" inkscape:connector-curvature="0" d="M312.081,399.439l-5.125-3.461v-5.959c0-0.142-0.057-0.28-0.158-0.382

-						c-0.101-0.1-0.239-0.158-0.382-0.158H305c-0.143,0-0.281,0.059-0.382,0.158c-0.1,0.102-0.157,0.241-0.157,0.382v7.037

-						c0,0.142,0.057,0.28,0.157,0.382c0.042,0.041,0.089,0.074,0.14,0.1l5.971,4c0.09,0.06,0.194,0.092,0.3,0.092

-						c0.038,0,0.076-0.006,0.115-0.014c0.143-0.031,0.266-0.117,0.344-0.242l0.751-1.2

-						C312.391,399.928,312.322,399.602,312.081,399.439L312.081,399.439z"/>

-				</g>

-				<g id="Fork__x2F__Knife_copy_3">

-					<g>

-						<path d="M381.613,42.025h-1.729c0.042,0.626,0.064,1.254,0.064,1.882l-0.231,283.326c0,19.722-11.172,34.556-30.2,34.556

-							c-19.022,0-36.591-15.975-36.591-35.697L312.19,42.025h-68.208l-0.736,284.067c0,19.722-17.563,35.697-36.592,35.697

-							c-19.036,0-30.2-14.834-30.2-34.556l-0.231-283.326c0-0.628,0.022-1.255,0.064-1.882h-1.606

-							c-25.212,0-45.643,24.349-45.643,54.387l-21.3,278.192c0,79.535,41.597,146.895,110.692,169.892l-41.688,320.803

-							c-7.602,66.491,37.309,128.188,101.417,128.188c64.104,0,109.024-61.695,101.417-128.188l-42.148-324.34

-							c66.515-25.826,111.129-90.562,111.129-166.355L427.256,96.412C427.256,66.374,406.825,42.025,381.613,42.025z

-							 M890.619,865.298l-43.362-333.729c14.694-43.554,11.042-104.943,11.042-162.453l-0.555-200.922

-							c0-104.363,6.568-163.113-87.494-163.113c-68.325,0-117.392,260.768-117.392,391.159c0,89.035,1.854,169.086,71.265,189.463

-							L687.785,865.3c-7.604,66.491,37.312,128.188,101.432,128.188C853.318,993.484,898.236,931.789,890.619,865.298z"/>

-					</g>

-				</g>

-				<g id="Coffee_Cup_copy_5">

-					<g>

-						<path d="M868.535,346.061c-7.253,0-14.354,2.084-21.24,5.894c0.833-14.979,1.448-30.36,1.852-46.135

-							c0.365-2.916,0.557-5.852,0.557-8.803c0-1.946-0.088-3.884-0.248-5.814c0.158-9.517,0.248-19.161,0.248-28.97h-8.771

-							c-39.521-77.244-208.016-135.284-409.9-135.284c-201.875,0-370.373,58.041-409.893,135.284h-8.77

-							c0,9.818,0.087,19.477,0.245,29.006c-0.158,1.918-0.245,3.844-0.245,5.778c0,6.584,0.282,12.913,0.834,18.998

-							C26.93,749.146,208.745,872.088,431.028,872.088c148.137,0,278.296-54.593,352.718-219.193

-							c21.369,3.397,51.458-4.771,84.796-4.771c64.82,0,117.391-67.619,117.391-151.014

-							C985.926,413.679,933.355,346.061,868.535,346.061z M426.754,389.691c-180.338,0-326.557-39.579-326.557-88.406

-							c0-48.827,146.219-88.406,326.557-88.406c180.354,0,326.557,39.579,326.557,88.406

-							C753.311,350.112,607.107,389.691,426.754,389.691z M864.684,559.48c-33.391,0-40.459,0-40.459,0

-							s9.201-137.914,42.578-137.914s60.433,33.763,60.433,75.396S898.045,559.48,864.684,559.48z"/>

-					</g>

-				</g>

-				<g id="Shape_116_1_">

-					<g>

-						<path d="M499.475,168.775c-133.939,0-428.312,29.208-428.312,243.366h856.63C927.79,197.983,633.404,168.775,499.475,168.775z

-							 M499.475,830.721c133.945,0,428.315,0,428.315-155.758H71.159C71.159,830.721,365.544,830.721,499.475,830.721z

-							 M927.79,519.221h-29.207c-25.72,0-59.904,21.068-92.987,41.476c-38.479,23.72-74.848,46.137-111.436,46.137

-							c-31.129,0-67.313-16.604-109.218-35.827c-52.896-24.262-112.877-51.779-173.075-51.779H71.159

-							c-32.246,0-58.4,26.152-58.4,58.398s26.154,58.416,58.4,58.416H927.79c32.246,0,58.399-26.17,58.399-58.416

-							S960.036,519.221,927.79,519.221z M32.231,490.012c0,0,194.686,0,379.636,0c44.261,0,87.604,13.146,127.604,29.208

-							c7.896,3.162,15.627,6.449,23.238,9.771c0.155,0.062,0.264,0.125,0.419,0.202c28.216,12.319,54.322,25.108,77.359,34.463

-							c0.419,0.187,0.853,0.341,1.271,0.512c4.79,1.923,9.487,3.736,14.016,5.317c0.188,0.073,0.355,0.124,0.562,0.195

-							c4.17,1.442,8.186,2.688,12.092,3.783c0.62,0.17,1.287,0.372,1.906,0.543c3.861,1.038,7.582,1.829,11.162,2.438

-							c0.729,0.124,1.427,0.217,2.141,0.326c3.658,0.49,7.193,0.852,10.525,0.852c3.287,0,6.666-0.354,10.093-0.883

-							c0.667-0.094,1.333-0.188,2.016-0.312c3.333-0.604,6.719-1.408,10.154-2.418c0.604-0.187,1.194-0.389,1.782-0.59

-							c3.411-1.054,6.822-2.279,10.311-3.688c0.248-0.108,0.518-0.188,0.765-0.301c3.752-1.52,7.528-3.271,11.349-5.109

-							c0.604-0.295,1.178-0.574,1.768-0.869c23.504-11.627,48.523-28.494,73.577-43.146c28.267-16.557,56.539-30.292,82.615-30.292

-							c58.398,0,68.135,0,68.135,0c10.744,0,19.477-8.712,19.477-19.472c0-10.743-8.729-19.456-19.477-19.456H32.231

-							c-10.743,0-19.472,8.713-19.472,19.456C12.759,481.3,21.488,490.012,32.231,490.012z"/>

-					</g>

-				</g>

-				<g id="Shape_91">

-					<g>

-						<path d="M215.181,491.383c86.132-179.95,201.292-274.255,274.375-319.438l-60.383-83.668c0,0-202.715,71.487-333.961,345.689

-							C-36.015,708.152,35.455,910.885,35.455,910.885l103.032-5.465C127.834,820.155,129.049,671.333,215.181,491.383z

-							 M512.146,203.229c-68.189,42.077-180.192,132.183-262.697,304.55c-82.506,172.386-82.438,316.124-72.425,395.593

-							l809.335-42.875L512.146,203.229z M423.031,717.244c-18.132,37.861-63.506,53.854-101.366,35.744

-							c-37.86-18.132-53.858-63.506-35.743-101.366c18.114-37.86,63.506-53.858,101.366-35.744

-							C425.148,634.011,441.146,679.384,423.031,717.244z M576.521,748.581c-9.062,18.931-31.725,26.946-50.666,17.872

-							c-18.947-9.062-26.936-31.753-17.872-50.666c9.058-18.913,31.729-26.946,50.684-17.872

-							C577.597,706.973,585.578,729.668,576.521,748.581z M598.21,527.266c-13.586,28.393-47.611,40.411-76.016,26.812

-							c-28.422-13.604-40.396-47.646-26.812-76.021c13.586-28.387,47.601-40.405,76.021-26.808

-							C599.824,464.853,611.796,498.879,598.21,527.266z M712.902,771.729c-28.422-13.604-40.396-47.63-26.812-76.017

-							s47.6-40.411,76.021-26.808c28.422,13.603,40.395,47.646,26.809,76.016C775.332,773.307,741.307,785.331,712.902,771.729z"/>

-					</g>

-				</g>

-				<g id="Shape_85">

-					<g>

-						<path d="M555.163,569.594c144.896-35.427,254.812-201.206,254.812-362.249h-0.025v-62.184

-							c1.183-8.377,1.684-13.05,1.684-13.05h-1.684V-1.298H187.322v208.643c0,161.518,110.663,327.983,256.389,362.614

-							c3.452,0.896,6.95,1.708,10.494,2.438v339.7c-150.878,6.167-266.851,43.172-266.851,87.901h622.621

-							c0-44.729-116.037-81.734-266.836-87.901v-339.68C547.205,571.586,551.214,570.646,555.163,569.594z M765.467,43.177

-							l0.026,88.936H231.797V43.177H765.467z"/>

-					</g>

-				</g>

-				<g id="Shape_84">

-					<g>

-						<path d="M750.273,452.651c-21.689,1.42-173.646,23.873-131.484-15.462c69.436-64.796,221.329,19.553,298.779-82.884

-							C1007.337,235.581,810.14,5.855,680.426,6.1c-98.146,13.982-146.002,96.058-157.572,186.024

-							c-17.318,134.706,1.496,183.551-35.818,47.151C442.489,76.604,376.075-46.562,208.994,73.827

-							C142.717,121.573,36.983,226.269,58.017,315.351c33.52,141.91,193.259,92.913,291.224,123.089

-							c121.457,37.396-112.069,13.646-155.037,23.477C109.258,481.332,25.55,531.002,43.256,634.188

-							c10.502,61.361,142.72,222.967,200.647,239.951c109.428,32.133,177.552-76.794,199.532-167.899

-							c28.162-116.71,48.402-145.375,36.665-1.083c-6.817,83.922-43.335,278.396,40.129,290.245

-							c61.941,0.382-16.348-302.021,4.854-374.22c24.194-82.438,41.732,90.775,55.653,120.927

-							c40.328,87.321,113.271,161.368,211.958,110.711C989.172,751.934,1040.582,433.785,750.273,452.651z"/>

-					</g>

-				</g>

-				<g id="Shape_113">

-					<g>

-						<path d="M390.73,808.576h36.259v-507.67H390.73V808.576z M535.766,808.576h36.273v-507.67h-36.273V808.576z M680.816,808.576

-							h36.271v-507.67h-36.271V808.576z M789.607,44.87c-24.037,0-46.262,7.803-64.275,20.965

-							c-26.699-34.77-68.693-57.224-115.938-57.224c-41.146,0-78.299,17.001-104.89,44.375c-12.708-5.249-26.669-8.116-41.257-8.116

-							c-22.517,0-43.451,6.831-60.844,18.567c-19.229-11.768-41.89-18.567-66.078-18.567c-70.104,0-126.906,56.801-126.906,126.921

-							c0,34.488,13.773,65.827,36.149,88.704v40.411H209.34h-36.259c0,0-72.533,0-72.533,72.518c0,72.533,0,326.361,0,326.361

-							s0,72.533,72.533,72.533c25.173,0,50.344,0,72.486,0v145.051c0,40.082,32.545,72.518,72.518,72.518h471.411

-							c40.129,0,72.533-32.436,72.533-72.518V663.525V234.829c22.312-19.947,36.369-48.904,36.369-81.167

-							C898.4,93.539,849.621,44.87,789.607,44.87z M245.569,663.525v36.259h-72.314l-0.172-1.552V373.706l1.52-0.282h34.739h36.228

-							L245.569,663.525L245.569,663.525z M789.498,409.698v217.631v217.506c0,40.082-32.404,72.533-72.518,72.533H390.62

-							c-39.988,0-72.533-32.451-72.533-72.533v-72.518c0.028,0,0.047,0,0.047,0V300.906h-0.047v-3.51

-							c5.954,0.894,12.05,1.316,18.239,1.316c37.121,0,70.512-15.983,93.729-41.398c10.498,3.321,21.607,5.14,33.188,5.14

-							c14.021,0,27.453-2.664,39.768-7.521c26.645,28.299,64.448,45.974,106.38,45.974c47.869,0,90.364-23.05,117.034-58.682

-							c17.785,12.708,39.564,20.183,63.068,20.229L789.498,409.698L789.498,409.698z"/>

-					</g>

-				</g>

-				<g id="Shape_83">

-					<g>

-						<path d="M499.475,474.65c110.623,0,200.312-27.154,200.312-71.583c0-69.062-89.699-125.049-200.322-125.049

-							c-110.595,0-200.295,55.992-200.295,125.049C299.166,447.496,388.866,474.65,499.475,474.65z M859.41,484.516

-							c0-38.002,46.492-37.02,35.742-76.509c-9.164-33.679-99.725-37.777-173.701-51.585c10.469,17.373,16.306,36.402,16.306,56.511

-							c0,58.479-89.138,96.271-227.112,96.271c-3.812,0-7.438-0.146-11.184-0.21c-3.733,0.064-7.354,0.21-11.156,0.21

-							c-137.974,0-227.14-37.791-227.14-96.271c0-20.124,5.866-39.138,16.32-56.511c-73.968,13.809-164.538,17.906-173.702,51.585

-							c-10.735,39.489,35.756,38.493,35.756,76.509c0,27.154-134.128,49.094-134.128,107.788

-							c0,96.271,371.104,129.181,494.05,129.181c122.943,0,494.078-32.908,494.078-129.181

-							C993.539,533.604,859.41,511.67,859.41,484.516z"/>

-					</g>

-				</g>

-				<g id="Shape_33">

-					<g>

-						<path d="M990.29,596.405V6.813L324.652,72.887v614.982C191.951,627.508,36.456,708.39,10.644,828.287

-							c-8.379,39.018,9.007,81.205,25.14,100.561c90.846,108.438,288.869,57.854,379.93-58.69

-							c40.396-51.712,37.012-96.895,37.012-207.709c0-130.248,0-319.392,0-465.021l409.501-33.27c0,200.781,0,457.678,0,457.678

-							c-132.719-60.36-288.215,20.521-314.029,140.419c-8.387,39.021,9.021,81.204,25.14,100.562

-							c90.854,108.438,288.896,57.867,379.931-58.695C993.657,752.402,990.29,707.226,990.29,596.405z"/>

-					</g>

-				</g>

-				<g id="Shape_86">

-					<g>

-						<path d="M91.753-1.502v1001.5h814.443V-1.502H91.753z M237.116,929.453h-74.833v-74.817h74.833V929.453z M237.116,817.229

-							h-74.833v-74.812h74.833V817.229z M237.116,705.002h-74.833v-74.814h74.833V705.002z M237.116,592.777h-74.833V517.96h74.833

-							V592.777z M237.116,480.552h-74.833v-74.833h74.833V480.552z M237.116,368.311h-74.833v-74.817h74.833V368.311z

-							 M237.116,256.086h-74.833v-74.817h74.833V256.086z M237.116,143.86h-74.833V69.044h74.833V143.86z M709.234,929.453H288.714

-							V517.96h420.521L709.234,929.453L709.234,929.453z M709.234,480.552H288.714V69.044h420.521L709.234,480.552L709.234,480.552z

-							 M835.666,929.453H760.85v-74.817h74.816V929.453L835.666,929.453z M835.666,817.229H760.85v-74.812h74.816V817.229

-							L835.666,817.229z M835.666,705.002H760.85v-74.814h74.816V705.002L835.666,705.002z M835.666,592.777H760.85V517.96h74.816

-							V592.777L835.666,592.777z M835.666,480.552H760.85v-74.833h74.816V480.552L835.666,480.552z M835.666,368.311H760.85v-74.817

-							h74.816V368.311L835.666,368.311z M835.666,256.086H760.85v-74.817h74.816V256.086L835.666,256.086z M835.666,143.86H760.85

-							V69.044h74.816V143.86L835.666,143.86z"/>

-					</g>

-				</g>

-				<g id="Shape_106">

-					<g>

-						<path d="M540.389,207.571c-45.938,0-83.215,37.308-83.215,83.232c0,45.908,37.273,83.216,83.215,83.216

-							c45.942,0,83.232-37.308,83.232-83.216C623.621,244.879,586.331,207.571,540.389,207.571z M540.439,915.974V527.209

-							L986.381,57.916L12.678,57.354L450.1,527.226h7.104v388.747c-141.174,5.779-249.681,40.401-249.681,82.27H790.12

-							C790.12,956.375,681.529,921.753,540.439,915.974z M499.138,467.993L141.495,124.339h714.572L512.446,466.923L499.138,467.993

-							z"/>

-					</g>

-				</g>

-				<g id="Shape_105">

-					<g>

-						<path d="M465.875,4.779C182.97,22.61-29.022,287.27,8.874,566.536c34.72,255.992,267.902,443.421,524.738,427.192

-							C791.934,977.453,993.128,755.486,995.46,499.26C992.912,215.2,750.186-13.168,465.875,4.779z M243.329,620.659

-							c-7.758-1.837-15.499-3.656-23.257-5.492c-39.848-9.396-56.77,51.856-16.889,61.269c7.989,1.892,15.979,3.771,23.952,5.657

-							c-1.489,4.698-3.027,9.379-4.632,14.044c-8.783-3.474-17.566-6.941-26.35-10.438c-16.111-6.401-34.853,6.848-39.07,22.197

-							c-4.962,18.062,6.104,32.687,22.198,39.088c6.567,2.597,13.15,5.188,19.717,7.808c-1.985,4.317-4.102,8.585-6.203,12.869

-							c-6.914-3.806-13.828-7.626-20.743-11.414c-7.725-4.251-15.201-4.896-21.917-3.357

-							c-24.001-33.028-43.52-69.341-57.448-107.812c-47.325-130.646-25.837-276.173,50.897-390.82

-							c2.067-3.077,4.218-6.054,6.352-9.048c6.468,1.24,13.597,0.446,20.941-3.59c7.642-4.218,15.301-8.419,22.959-12.638

-							c2.118,4.317,4.251,8.618,6.27,12.985c-6.931,2.746-13.862,5.491-20.792,8.254c-16.095,6.352-27.177,21.008-22.198,39.07

-							c4.218,15.334,22.959,28.566,39.07,22.182c9.164-3.622,18.311-7.245,27.475-10.867c1.621,4.714,3.242,9.445,4.764,14.226

-							c-8.75,2.051-17.467,4.118-26.218,6.17c-39.864,9.412-22.943,70.697,16.889,61.285c8.403-1.985,16.79-3.97,25.208-5.938

-							c0.91,4.466,1.771,8.966,2.581,13.448c-5.955,0.761-11.91,1.505-17.881,2.266c-17.187,2.184-31.776,12.819-31.776,31.776

-							c0,15.664,14.54,33.959,31.776,31.759c8.568-1.071,17.153-2.167,25.721-3.237c0.348,4.812,0.811,9.645,1.026,14.475h-26.764

-							c-40.973,0-40.973,63.552,0,63.552h26.483c-0.281,4.813-0.811,9.596-1.208,14.424c-9.958-1.271-19.932-2.525-29.89-3.787

-							c-17.203-2.185-31.775,16.1-31.775,31.774c0,18.957,14.623,29.593,31.775,31.76c7.196,0.909,14.358,1.837,21.537,2.729

-							C245.082,611.743,244.255,616.209,243.329,620.659z M722.115,869.836c-105.616,63.204-234.456,77.529-352.857,41.568

-							c-32.504-9.875-63.387-23.919-92.201-41.369c18.973-10.951,26.632-41.389,1.803-55.05

-							c-9.975-5.479-19.965-10.973-29.939-16.458c3.259-6.688,6.468-13.399,9.527-20.187c10.239,4.059,20.479,8.089,30.718,12.157

-							c16.111,6.401,34.869-6.848,39.07-22.182c4.962-18.079-6.104-32.702-22.198-39.09c-8.139-3.229-16.276-6.438-24.415-9.657

-							c2.613-7.595,5.111-15.201,7.46-22.876c9.396,2.216,18.791,4.433,28.187,6.646c39.854,9.412,56.771-51.854,16.895-61.269

-							c-9.729-2.283-19.47-4.604-29.212-6.883c1.39-6.637,2.68-13.281,3.87-19.969c10.967,1.395,21.934,2.778,32.885,4.169

-							c17.235,2.169,31.771-16.107,31.771-31.771c0-18.956-14.591-29.594-31.771-31.775c-8.188-1.021-16.376-2.062-24.581-3.094

-							c0.629-7.443,1.142-14.903,1.521-22.38h28.604c40.989,0,40.989-63.535,0-63.535h-28.16c-0.033-0.744-0.017-1.488-0.05-2.25

-							c-0.312-6.765-0.761-13.497-1.273-20.213c9.825-1.24,19.651-2.481,29.479-3.723c17.187-2.188,31.771-12.808,31.771-31.775

-							c0-15.681-14.539-33.942-31.771-31.775c-12.423,1.588-24.861,3.159-37.301,4.73c-1.18-6.731-2.438-13.431-3.821-20.081

-							c9.347-2.216,18.709-4.416,28.038-6.616c39.881-9.429,22.959-70.697-16.891-61.285c-8.97,2.117-17.945,4.251-26.934,6.368

-							c-2.398-7.741-4.929-15.416-7.592-23.025c7.758-3.076,15.532-6.153,23.29-9.213c16.095-6.386,27.16-21.024,22.198-39.087

-							c-4.223-15.334-22.959-28.584-39.07-22.198c-10.024,3.97-20.031,7.939-30.056,11.909c-3.126-6.799-6.368-13.53-9.71-20.197

-							c8.718-4.797,17.435-9.594,26.136-14.391c24.134-13.266,17.533-42.329-0.281-54.007

-							c104.789-62.374,235.3-79.263,354.977-42.889c33.691,10.223,65.318,24.646,94.48,42.527

-							c-18.162,11.463-25.105,40.973-0.761,54.371c8.701,4.797,17.418,9.594,26.119,14.391c-3.325,6.667-6.567,13.396-9.693,20.181

-							c-10.008-3.953-20.031-7.923-30.039-11.893c-16.128-6.402-34.869,6.864-39.087,22.198

-							c-4.963,18.062,6.104,32.701,22.186,39.07c7.771,3.06,15.551,6.153,23.309,9.229c-2.663,7.609-5.178,15.268-7.576,23.009

-							c-8.979-2.117-17.964-4.251-26.929-6.352c-39.864-9.412-56.786,51.84-16.895,61.269c9.329,2.2,18.691,4.417,28.021,6.617

-							c-1.373,6.649-2.646,13.332-3.807,20.064c-12.438-1.572-24.882-3.144-37.304-4.715c-17.23-2.167-31.792,16.095-31.792,31.776

-							c0,18.973,14.605,29.592,31.792,31.771c9.812,1.24,19.638,2.481,29.479,3.728c-0.517,6.716-0.979,13.442-1.274,20.213

-							c-0.03,0.745-0.03,1.483-0.062,2.25h-28.142c-41.006,0-41.006,63.534,0,63.534h28.583c0.397,7.461,0.896,14.938,1.521,22.358

-							c-8.188,1.042-16.396,2.085-24.58,3.11c-17.188,2.167-31.775,12.814-31.775,31.771c0,15.665,14.561,33.942,31.775,31.775

-							c10.967-1.389,21.934-2.778,32.884-4.168c1.19,6.683,2.48,13.332,3.871,19.948c-9.729,2.3-19.47,4.599-29.195,6.896

-							c-39.881,9.396-22.976,70.687,16.894,61.271c9.38-2.22,18.791-4.438,28.17-6.649c2.35,7.658,4.848,15.284,7.461,22.859

-							c-8.144,3.226-16.276,6.448-24.438,9.677c-16.074,6.368-27.145,21.008-22.182,39.087

-							c4.218,15.334,22.959,28.584,39.087,22.183c10.239-4.053,20.479-8.104,30.717-12.152c3.062,6.777,6.271,13.497,9.528,20.164

-							c-9.978,5.508-19.967,11-29.925,16.475C695.964,828.565,703.391,858.736,722.115,869.836z M827.417,756.264

-							c-6.914,3.811-13.846,7.626-20.76,11.414c-2.104-4.284-4.201-8.552-6.203-12.869c6.584-2.608,13.146-5.211,19.718-7.808

-							c16.111-6.385,27.177-21.023,22.198-39.087c-4.201-15.352-22.942-28.6-39.07-22.198c-8.783,3.49-17.562,6.964-26.334,10.438

-							c-1.621-4.665-3.143-9.352-4.646-14.044c7.984-1.892,15.963-3.771,23.946-5.657c39.864-9.396,22.942-70.664-16.889-61.271

-							c-7.741,1.836-15.479,3.654-23.257,5.491c-0.927-4.45-1.737-8.916-2.58-13.382c7.179-0.91,14.357-1.82,21.536-2.713

-							c17.17-2.188,31.772-12.819,31.772-31.776c0-15.681-14.559-33.959-31.772-31.771c-9.978,1.257-19.935,2.515-29.892,3.771

-							c-0.385-4.812-0.931-9.594-1.209-14.405h26.479c40.989,0,40.989-63.554,0-63.554H743.7c0.229-4.812,0.689-9.644,1.042-14.474

-							c8.562,1.075,17.137,2.167,25.722,3.242c17.236,2.194,31.776-16.101,31.776-31.765c0-18.957-14.606-29.593-31.776-31.771

-							c-5.971-0.744-11.926-1.505-17.881-2.266c0.794-4.483,1.654-8.966,2.581-13.465c8.402,1.985,16.806,3.97,25.208,5.955

-							c39.849,9.412,56.753-51.857,16.889-61.269c-8.729-2.068-17.479-4.136-26.218-6.188c1.506-4.781,3.127-9.512,4.747-14.226

-							c9.164,3.622,18.328,7.262,27.492,10.884c16.128,6.385,34.869-6.864,39.064-22.198c4.979-18.062-6.087-32.719-22.192-39.07

-							c-6.937-2.746-13.861-5.509-20.812-8.254c2.034-4.351,4.151-8.668,6.271-12.985c7.656,4.218,15.334,8.437,22.976,12.638

-							c6.933,3.821,13.729,4.797,19.916,3.838c52.271,72.881,82.541,161.812,83.385,253.812

-							c-0.811,91.897-30.089,180.525-82.651,253.604C842.535,751.368,835.075,752.029,827.417,756.264z"/>

-					</g>

-				</g>

-				<g id="Shape_89">

-					<g>

-						<path d="M710.807,331.839c-46.459-12.13-86.855-26.955-121.222-41.932c4.8,36.162,8.813,77.943,10.191,121.919

-							c33.134,2.71,67.706-13.462,67.706-13.462s-27.41,54.271-67.561,65.616c-1.09,46.41-5.812,88.401-14.144,125.729

-							c17.653-6.208,37.222-8.329,58.438-2.786c91.146,23.854,89.754,153.25,89.754,153.25s-48.05-64.465-108.771-80.271

-							c-19.812-5.164-40.917-5.136-60.438-2.808c-17.34,41.613-40.896,74.823-70.562,99.021

-							c23.271,25.938,53.026,45.598,91.354,55.637C852.865,881.537,990.778,353.02,990.778,353.02S874.143,374.482,710.807,331.839z

-							 M766.777,515.118c-54.668-14.25-50.7-104.08-50.7-104.08s28.56,39.918,64.979,49.442

-							c36.45,9.521,80.854-11.326,80.854-11.326S821.475,529.398,766.777,515.118z M543.791,176.393

-							c0,0-92.404,74.354-256.345,114.483c-163.987,40.13-280.272,16.93-280.272,16.93s129.914,530.53,398.238,464.792

-							C673.752,706.908,543.791,176.393,543.791,176.393z M155.518,491.237c0,0-2.65-89.875,52.244-103.292

-							c54.879-13.432,94.085,67.448,94.085,67.448s-44.052-21.519-80.653-12.563C184.607,451.789,155.518,491.237,155.518,491.237z

-							 M385.983,693.34c-91.481,22.381-151.875-92.087-151.875-92.087s72.96,33.876,133.942,18.929

-							c60.967-14.961,110.021-78.639,110.021-78.639S477.464,670.928,385.983,693.34z M418.087,397.999

-							c-36.768,8.087-66.782,46.899-66.782,46.899s-0.545-89.906,54.622-102.083c55.167-12.16,92.496,69.583,92.496,69.583

-							S454.87,389.868,418.087,397.999z"/>

-					</g>

-				</g>

-				<g id="Shape_120">

-					<g>

-						<path d="M812.992,241.865c-76.589,0-138.329-14.593-177.104,4.792c0,0-95.729,19.14-114.884,19.14

-							c-19.14,0-100.508-4.792-148.373-14.362c-47.863-9.57-263.27-19.141-359,23.932v52.657c0,0,19.154,14.362,23.932,19.141

-							c4.792,4.792,33.517,57.435,43.086,90.951c9.57,33.503,38.295,119.662,224.962,100.508c0,0,18.762-2.212,44.094-12.983

-							c-10.086,22.481-17.188,48.232-14.951,70.885c2.003,20.191,11.154,36.265,26.464,46.471c3.438,2.292,7.18,4.687,11.151,7.145

-							c-28.188,28.314-43.93,50.475-75.598,52.903c-41.76,3.235-53.063-22.483-46.646-40.677c6.01-17.021,36.995-2.234,40.148,5.896

-							c-1.326-7.77-8.73-42.667-36.318-45.51c-31.053-3.208-38.187,31.854-38.187,48.979s4.075,90.188,129.341,90.188

-							c83.39,0,129.389-35.084,150.829-58.539c3.355,0.46,6.545,0.729,9.47,0.729c3.208,0,6.24-0.271,8.988-0.826

-							c2.06-0.413,5.354-1.469,9.579-3.077c20.312,23.312,67.021,61.717,154.289,61.717c125.252,0,130.127-73.065,130.127-90.188

-							c0-17.123-7.178-52.188-38.217-48.979c-27.567,2.844-35.027,37.713-36.346,45.51c3.143-8.136,34.031-22.897,40.014-5.896

-							c6.444,18.188-5.062,43.912-46.816,40.677c-37.356-2.87-52.873-33.158-92.521-68.641

-							c19.869-17.592,34.096-36.749,34.096-55.205c0-16.688-7.438-34.566-17.481-51.701c24.354,6.919,87.404,21.376,147.501,6.354

-							c76.589-19.153,90.952-28.729,124.454-110.097c33.503-81.367,38.295-71.797,43.071-76.589

-							c4.794-4.778,19.15-4.778,19.15-47.865v-23.933C985.311,275.368,889.581,241.865,812.992,241.865z M602.479,611.091

-							c-46.147-21.688-91.174,10.58-91.174,10.58s-55.932-40.678-107.33,0c-0.683,0.541-1.334,1.079-2.004,1.618

-							c-6.8-3.981-13.367-8.062-19.505-12.15c-3.574-2.383-8.46-6.89-9.598-18.396c-2.992-30.279,22.254-76.75,36.454-90.95

-							c25.524-25.53,50.024-69.402,51.059-71.256l0.866-1.543l0.569-1.692c0.771-2.328,2.024-6.562,3.668-12.114

-							c1.188-4.021,2.344-7.859,3.467-11.55c6.713-14.134,8.78-23.204,9.642-30.157c3.775-11.157,7.034-19.93,9.834-26.82

-							c5.69-3.554,14.562-6.617,23.062-6.028c5.845,9.472,10.411,21.106,8.993,29.599c-4.209,25.313,14.146,54.322,36.732,86.863

-							c4.55,6.565,10.809,15.559,11.858,18.071c2.409,7.242,8.104,14.863,19.722,30.038c15.526,20.291,41.521,54.254,41.521,73.989

-							C630.317,582.206,624.613,593.302,602.479,611.091z M323.014,509.062c-47.865,9.564-201.042,38.295-229.754-119.667

-							c0,0-28.724-81.367,23.933-105.3c52.643-23.932,191.459-14.362,220.184-9.57c28.71,4.779,100.508,19.141,95.729,100.508

-							c-0.594,9.989-1.979,19.397-4.033,28.241c-0.104,0.352-0.208,0.692-0.312,1.052c-1.137,3.844-2.058,6.998-2.748,9.188

-							c-4.413,7.7-24.433,41.854-43.771,61.196c-3.58,3.581-7.604,8.454-11.758,14.292

-							C355.064,499.325,338.536,505.957,323.014,509.062z M910.48,384.647C881.754,542.605,728.59,513.894,680.725,504.309

-							c-26.891-5.376-56.806-21.323-78.707-48.698c-2.854-5.178-7.145-11.429-13.341-20.351c-0.227-0.326-0.467-0.672-0.707-1.018

-							c-9.505-17.839-15.878-39.104-17.337-63.943c-4.792-81.381,67.005-95.729,95.729-100.521

-							c28.724-4.792,167.521-14.362,220.185,9.57C939.191,303.28,910.48,384.647,910.48,384.647z"/>

-					</g>

-				</g>

-				<g id="Shape_117">

-					<g>

-						<path d="M784.293,331.32c-36.211,0-74.01,10.757-110.783,35.085c0-7.497,6.074-8.938,7.354-14.994

-							c19.146-42.747,33.018-55.026,37.48-89.78C739.395,101.432,615.869,18.585,494.18,18.585

-							c-111.544,0-221.581,69.607-217.443,213.058c1.439,51.999,34.292,89.632,37.468,127.266

-							c-35.234-19.048-69.607-27.438-101.746-27.438c-117.766,0-206.355,112.205-205.082,222.011

-							C8.817,690.711,119.003,773.47,238.375,773.47c12.759,0,25.519-0.96,38.362-2.857

-							c98.718-14.685,159.636-94.249,209.715-172.164c0.646,201.59-94.896,298.719-239.686,344.328

-							c-23.765,7.479-72.09-1.758-81.986,37.138h666.314l7.021-7.166c-89.473-39.868-177.99-47.845-239.395-112.271

-							c-60.121-62.84-78.625-146.729-89.94-262.026c45.543,108.929,158.924,168.408,264.262,168.408

-							c103.896,0,199.818-57.896,214.812-183.319C1004.137,447.415,903.102,331.32,784.293,331.32z"/>

-					</g>

-				</g>

-				<g id="Shape_35_2_">

-					<g>

-						<path d="M359.044,692.846c-38.815,0-70.215,31.398-70.215,70.229c0,38.73,31.396,70.207,70.215,70.207

-							c38.744,0,70.215-31.477,70.215-70.207C429.259,724.244,397.788,692.846,359.044,692.846z M745.225,692.846

-							c-38.795,0-70.209,31.398-70.209,70.229c0,38.73,31.414,70.207,70.209,70.207c38.75,0,70.229-31.477,70.229-70.207

-							C815.447,724.244,783.975,692.846,745.225,692.846z M201.57,271.554l-70.727-105.333H60.621

-							c-29.104,0-52.66,23.592-52.66,52.667c0,29.075,23.556,52.667,52.66,52.667h31.025l179.627,351.069h601.474l118.241-351.069

-							L201.57,271.554L201.57,271.554z M675.016,324.207c9.691,0,17.562,7.82,17.562,17.556c0,9.677-7.865,17.556-17.562,17.556

-							c-9.705,0-17.555-7.879-17.555-17.556C657.461,332.027,665.311,324.207,675.016,324.207z M639.904,394.429

-							c9.707,0,17.557,7.82,17.557,17.556c0,9.661-7.85,17.541-17.557,17.541c-9.691,0-17.561-7.879-17.561-17.541

-							C622.35,402.249,630.213,394.429,639.904,394.429z M604.809,324.207c9.691,0,17.541,7.82,17.541,17.556

-							c0,9.677-7.85,17.556-17.541,17.556c-9.707,0-17.541-7.879-17.541-17.556C587.268,332.027,595.102,324.207,604.809,324.207z

-							 M569.727,394.429c9.77,0,17.541,7.82,17.541,17.556c0,9.661-7.771,17.541-17.541,17.541c-9.678,0-17.556-7.879-17.556-17.541

-							C552.171,402.249,560.049,394.429,569.727,394.429z M464.363,324.207c9.706,0,17.556,7.82,17.556,17.556

-							c0,9.677-7.85,17.556-17.556,17.556c-9.699,0-17.548-7.879-17.548-17.556C446.815,332.027,454.665,324.207,464.363,324.207z

-							 M394.155,324.207c9.693,0,17.548,7.82,17.548,17.556c0,9.677-7.854,17.556-17.548,17.556

-							c-9.706,0-17.562-7.879-17.562-17.556C376.6,332.027,384.449,324.207,394.155,324.207z M323.933,324.207

-							c9.706,0,17.562,7.82,17.562,17.556c0,9.677-7.854,17.556-17.562,17.556s-17.556-7.879-17.556-17.556

-							C306.377,332.027,314.227,324.207,323.933,324.207z M253.718,359.318c-9.772,0-17.556-7.879-17.556-17.556

-							c0-9.735,7.784-17.556,17.556-17.556c9.699,0,17.556,7.82,17.556,17.556C271.273,351.439,263.417,359.318,253.718,359.318z

-							 M288.829,429.526c-9.706,0-17.556-7.879-17.556-17.541c0-9.735,7.85-17.556,17.556-17.556c9.699,0,17.548,7.82,17.548,17.556

-							C306.377,421.647,298.528,429.526,288.829,429.526z M323.933,499.748c-9.706,0-17.556-7.879-17.556-17.556

-							c0-9.735,7.85-17.562,17.556-17.562s17.562,7.821,17.562,17.562C341.489,491.869,333.639,499.748,323.933,499.748z

-							 M359.044,394.429c9.699,0,17.556,7.82,17.556,17.556c0,9.661-7.854,17.541-17.556,17.541

-							c-9.706,0-17.555-7.879-17.555-17.541C341.489,402.249,349.338,394.429,359.044,394.429z M359.044,569.971

-							c-9.706,0-17.526-7.894-17.526-17.556c0-9.735,7.821-17.556,17.526-17.556c9.699,0,17.556,7.814,17.556,17.556

-							C376.6,562.077,368.743,569.971,359.044,569.971z M394.155,499.748c-9.706,0-17.562-7.879-17.562-17.556

-							c0-9.735,7.854-17.562,17.562-17.562c9.693,0,17.548,7.821,17.548,17.562C411.704,491.869,403.854,499.748,394.155,499.748z

-							 M429.259,394.429c9.699,0,17.562,7.82,17.562,17.556c0,9.661-7.857,17.541-17.562,17.541

-							c-9.706,0-17.556-7.879-17.556-17.541C411.704,402.249,419.553,394.429,429.259,394.429z M429.259,569.971

-							c-9.706,0-17.519-7.894-17.519-17.556c0-9.735,7.812-17.556,17.519-17.556c9.699,0,17.562,7.814,17.562,17.556

-							C446.815,562.077,438.958,569.971,429.259,569.971z M464.363,499.748c-9.699,0-17.548-7.879-17.548-17.556

-							c0-9.735,7.85-17.562,17.548-17.562c9.706,0,17.556,7.821,17.556,17.562C481.919,491.869,474.069,499.748,464.363,499.748z

-							 M499.475,569.971c-9.705,0-17.521-7.894-17.521-17.556c0-9.735,7.815-17.556,17.521-17.556

-							c9.699,0,17.562,7.814,17.562,17.556C517.03,562.077,509.174,569.971,499.475,569.971z M499.475,429.526

-							c-9.705,0-17.556-7.879-17.556-17.541c0-9.735,7.851-17.556,17.556-17.556c9.699,0,17.562,7.82,17.562,17.556

-							C517.03,421.647,509.174,429.526,499.475,429.526z M534.586,324.207c9.706,0,17.556,7.82,17.556,17.556

-							c0,9.677-7.85,17.556-17.556,17.556s-17.556-7.879-17.556-17.556C517.03,332.027,524.88,324.207,534.586,324.207z

-							 M534.586,499.748c-9.706,0-17.526-7.879-17.526-17.556c0-9.735,7.82-17.562,17.526-17.562s17.556,7.821,17.556,17.562

-							C552.142,491.869,544.292,499.748,534.586,499.748z M569.58,569.971c-9.662,0-17.438-7.894-17.438-17.556

-							c0-9.735,7.776-17.556,17.438-17.556c9.779,0,17.57,7.814,17.57,17.556C587.15,562.077,579.359,569.971,569.58,569.971z

-							 M604.809,499.748c-9.707,0-17.541-7.879-17.541-17.556c0-9.735,7.834-17.562,17.541-17.562

-							c9.691,0,17.541,7.821,17.541,17.562C622.35,491.869,614.5,499.748,604.809,499.748z M639.803,569.971

-							c-9.677,0-17.453-7.894-17.453-17.556c0-9.735,7.776-17.556,17.453-17.556c9.77,0,17.562,7.814,17.562,17.556

-							C657.358,562.077,649.566,569.971,639.803,569.971z M674.914,499.748c-9.677,0-17.453-7.879-17.453-17.556

-							c0-9.735,7.776-17.562,17.453-17.562c9.764,0,17.541,7.821,17.541,17.562C692.455,491.869,684.678,499.748,674.914,499.748z

-							 M710.127,394.429c9.691,0,17.557,7.82,17.557,17.556c0,9.661-7.859,17.541-17.557,17.541

-							c-9.705,0-17.555-7.879-17.555-17.541C692.572,402.249,700.422,394.429,710.127,394.429z M710.127,569.971

-							c-9.705,0-17.525-7.894-17.525-17.556c0-9.735,7.82-17.556,17.525-17.556c9.691,0,17.557,7.814,17.557,17.556

-							C727.684,562.077,719.818,569.971,710.127,569.971z M745.137,499.748c-9.678,0-17.453-7.879-17.453-17.556

-							c0-9.735,7.775-17.562,17.453-17.562c9.77,0,17.541,7.821,17.541,17.562C762.678,491.869,754.9,499.748,745.137,499.748z

-							 M745.225,359.318c-9.707,0-17.541-7.879-17.541-17.556c0-9.735,7.834-17.556,17.541-17.556c9.705,0,17.57,7.82,17.57,17.556

-							C762.795,351.439,754.93,359.318,745.225,359.318z M780.336,569.971c-9.707,0-17.512-7.894-17.512-17.556

-							c0-9.735,7.805-17.556,17.512-17.556c9.705,0,17.555,7.814,17.555,17.556C797.891,562.077,790.041,569.971,780.336,569.971z

-							 M780.336,429.526c-9.707,0-17.512-7.879-17.512-17.541c0-9.735,7.805-17.556,17.512-17.556

-							c9.705,0,17.555,7.82,17.555,17.556C797.891,421.647,790.041,429.526,780.336,429.526z M815.447,499.748

-							c-9.707,0-17.518-7.879-17.518-17.556c0-9.735,7.811-17.562,17.518-17.562c9.705,0,17.555,7.821,17.555,17.562

-							C833.002,491.869,825.152,499.748,815.447,499.748z M815.447,359.318c-9.707,0-17.518-7.879-17.518-17.556

-							c0-9.735,7.811-17.556,17.518-17.556c9.705,0,17.555,7.82,17.555,17.556C833.002,351.439,825.152,359.318,815.447,359.318z

-							 M850.558,429.526c-9.706,0-17.521-7.879-17.521-17.541c0-9.735,7.814-17.556,17.521-17.556s17.562,7.82,17.562,17.556

-							C868.113,421.647,860.264,429.526,850.558,429.526z M885.669,359.318c-9.706,0-17.556-7.879-17.556-17.556

-							c0-9.735,7.85-17.556,17.556-17.556s17.541,7.82,17.541,17.556C903.21,351.439,895.375,359.318,885.669,359.318z"/>

-					</g>

-				</g>

-				<g id="Shape_101_2_">

-					<g>

-						<path d="M697.507,227.15c-0.096-106.755-12.133-141.453-14.778-147.828C658.545,11.063,594.662,8.856,589.37,8.787

-							c-1.097-0.027-2.193-0.027-3.263-0.027c-25.259,0-45.666,8.034-60.664,23.868c-26.336,27.803-25.486,69.945-25.295,75.086

-							v98.173l-21.062-2.262l-0.247-33.767c1.206-52.85-10.118-91.866-33.684-116.009c-22.188-22.716-48.202-24.485-55.646-24.485

-							c-0.754,0-1.396,0.027-1.858,0.041c-1.144-0.041-2.268-0.055-3.392-0.055c-27.235,0-49.773,9.13-66.979,27.104

-							c-36.426,38.043-35.042,102.697-34.835,108.62v48.161l-104.726,14.999l-0.165-0.014v625.646l453.164,136.669l0.658,0.206

-							l189.93-92.251V240.503l0.102-0.014L697.507,227.15z M282.428,240.86l-80.392-11.104l80.392-11.516V240.86z M344.038,82.16

-							c10.896-11.091,24.636-16.013,42.485-15.094l0.768,0.055l1.535-0.083c4.14,0,18.618,1.028,31.491,14.23

-							c16.104,16.506,24.109,46.584,23.149,87.055l-0.014,0.219l0.206,31.298l-38.757-4.181l-87.041,12.462v-44.254

-							C317.839,163.32,317.291,109.318,344.038,82.16z M317.839,245.727v-32.574l87.151-12.489l38.702,4.017l0.384,58.47

-							L317.839,245.727z M534.338,107.838c-0.014-0.315-1.221-31.751,16.054-50.053c8.705-9.171,20.646-13.627,36.535-13.627

-							c0.796,0,1.591,0.027,2.742,0.027c1.823,0.014,45.159,1.069,61.528,47.805l0.188,0.548

-							c0.123,0.302,11.652,32.135,11.892,130.911l-128.979-13.888l0.068-100.956L534.338,107.838z M631.25,288.98l-151.722-20.934

-							l-0.439-59.718l328.464,34.041L631.25,288.98z"/>

-					</g>

-				</g>

-				<g id="Shape_110_2_">

-					<g>

-						<path d="M575.712,422.511V159.448H422.236V422.51H159.174v153.479h263.062v263.079h153.476v-263.08h263.08V422.511H575.712z

-							 M498.975,7.371C227.754,7.371,7.097,228.028,7.097,499.248c0,271.221,220.657,491.878,491.875,491.878

-							c271.226,0,491.878-220.657,491.878-491.878C990.852,228.028,770.194,7.371,498.975,7.371z M498.975,938.018

-							c-241.938,0-438.75-196.819-438.75-438.77c0-241.927,196.808-438.752,438.75-438.752

-							c241.933,0,438.752,196.825,438.752,438.752C937.727,741.192,740.901,938.018,498.975,938.018z"/>

-					</g>

-				</g>

-				<g id="Shape_121_2_">

-					<g>

-						<path d="M821.111,934.699H177.838c-16.39,0-29.703,13.297-29.703,29.702c0,16.39,13.313,29.687,29.703,29.687h643.273

-							c16.401,0,29.703-13.297,29.703-29.687C850.814,947.996,837.518,934.699,821.111,934.699z M177.838,232.035h643.273

-							c16.401,0,29.703-13.298,29.703-29.688c0-16.39-13.302-29.687-29.703-29.687H699.994l28.389-40.229

-							c2.82,0.384,5.688,0.641,8.619,0.641c35.518,0,64.324-28.806,64.324-64.324c0-35.534-28.812-64.34-64.324-64.34

-							c-35.535,0-64.34,28.806-64.34,64.34c0,10.622,2.627,20.619,7.193,29.463l-52.555,74.449H177.838

-							c-16.39,0-29.703,13.297-29.703,29.687C148.135,218.737,161.448,232.035,177.838,232.035z M789.822,271.622

-							c-24.592,0-156.748,0-289.546,0c-0.545,0-1.062,0-1.586,0c-132.814,0-264.958,0-289.563,0

-							c-29.687,0-23.519,21.597-19.786,29.688c32.442,70.557,118.748,192.988,118.748,282.065

-							c0,89.061-86.305,211.492-118.748,282.049c-3.733,8.107-9.901,29.688,19.786,29.688c24.592,0,156.749,0,289.563,0

-							c0.523,0,1.041,0,1.586,0c132.798,0,264.938,0,289.546,0c29.688,0,23.52-21.58,19.787-29.688

-							c-32.443-70.557-118.748-192.986-118.748-282.049c0-89.077,86.305-211.509,118.748-282.065

-							C813.342,293.219,819.51,271.622,789.822,271.622z"/>

-					</g>

-				</g>

-				<g id="Shape_111_2_">

-					<g>

-						<path d="M712.756,918.966V681.912L440.343,403.979L167.916,681.912v237.039h213.345V722.109

-							c0-31.655,25.669-57.312,57.324-57.312c31.654,0,57.31,25.655,57.31,57.312v196.854L712.756,918.966L712.756,918.966z

-							 M314,835.333h-77.255v-27.805H314V835.333z M314,791.868h-77.255v-82.209H314V791.868z M438.585,580.077

-							c-17.897,0-32.396-14.513-32.396-32.396c0-17.896,14.493-32.404,32.396-32.404s32.396,14.513,32.396,32.404

-							C470.98,565.564,456.483,580.077,438.585,580.077z M563.155,709.659h77.255v82.209h-77.255V709.659z M563.155,807.528h77.255

-							v27.805h-77.255V807.528z M440.343,385.951l307.075,314.033l18.914-18.514l-228.657-233.84V238.806l-97.332-99.758

-							l-97.332,99.758v208.828L114.354,681.479l18.914,18.512L440.343,385.951z M123.812,959.482h633.063v-26.875H123.812V959.482z

-							 M871.377,338.651c-16.183-16.561-42.434-16.561-58.631,0v-16.503h-11.375v650.989H67.926v26.861h744.82V414.846

-							c16.197-16.546,42.448-16.546,58.646,0h-0.017c16.213,16.546,42.463,16.546,58.646,0v-76.208

-							C913.826,355.197,887.59,355.197,871.377,338.651z M440.343,121.078L584.191,268.18l18.896-18.508L446.038,89.046V-1.502

-							h-11.389v90.533L277.581,249.672l18.915,18.508L440.343,121.078z"/>

-					</g>

-				</g>

-				<g id="Shape_122_2_">

-					<g>

-						<path d="M67.386,225.596l403.275,331.261l460.918-331.261c28.812-23.666,57.608-43.219,0-43.219H67.386

-							C9.761,182.377,38.573,201.93,67.386,225.596z M470.661,643.277L9.761,268.798v489.714c0,28.795,29.174,57.608,52.221,57.608

-							h875.003c23.023,0,52.202-28.813,52.202-57.608V268.798L470.661,643.277z"/>

-					</g>

-				</g>

-				<g id="Shape_112_2_">

-					<g>

-						<path d="M256.099,378.068l0.094,0.094l237.603-237.603l-0.078-0.078c14.507-14.507,14.507-38.273,0-52.796

-							c-14.507-14.507-38.289-14.507-52.796,0L203.303,325.272c-14.521,14.507-14.521,38.289,0,52.795

-							C217.81,392.59,241.576,392.59,256.099,378.068z M836.928,430.896c-14.507-14.513-38.271-14.513-52.795,0l-0.146-0.15

-							l-238.9,239.321c-13.026,14.61-12.543,37.235,1.459,51.258c14.521,14.507,38.289,14.507,52.795,0L836.928,483.69

-							C851.436,469.184,851.436,445.417,836.928,430.896z M533.404,180.182l-238.112,237.08l66.428,66.434L18.511,826.916

-							c-14.507,14.507-14.507,38.289,0,52.796l26.405,26.405c14.507,14.508,38.273,14.508,52.796,0l343.21-343.229l65.612,65.612

-							l236.671-238.534L533.404,180.182z"/>

-					</g>

-				</g>

-				<g id="Shape_118_4_">

-					<g>

-						<path d="M783.93,839.049c-114.461,0-207.229,18.567-207.229,41.459c0,22.896,92.771,41.443,207.229,41.443

-							c114.444,0,207.231-18.551,207.231-41.443C991.161,857.616,898.374,839.049,783.93,839.049z"/>

-					</g>

-				</g>

-				<g id="Shape_114">

-					<g>

-						<path d="M234.065,514.635c0-60.592-49.24-109.671-109.944-109.671c-60.576,0-109.67,49.095-109.67,109.688

-							c0,60.672,49.095,109.928,109.67,109.928C184.826,624.578,234.065,575.322,234.065,514.635z M755.447,815.854

-							c-3.735-5.009-10.521-5.952-15.635-2.513L590.74,921.646c-4.831,3.857-5.926,10.781-2.479,15.635l20.337,28.227

-							c3.725,4.814,10.771,5.926,15.604,2.334l149.104-108.285c4.814-3.752,5.931-10.788,2.479-15.635L755.447,815.854z

-							 M481.069,592.633l59.062,104.275l31.108-23.234l-59.207-103.713L481.069,592.633z M433.214,431.371l-230-403.838

-							l-43.975,0.274L401.82,454.316L433.214,431.371z M908.416,628.572l-213.673-0.258c-17.021,0-31.963,7.311-44.957,16.729

-							l-165.255,116.16L370.835,648.908l158.234-115.886c24.604-20.61,27.921-57.274,7.311-81.884

-							c-20.724-24.324-57.242-27.519-81.862-7.053L207.239,620.295c-35.956,30.146-42.332,98.448-12.463,134.42l178.7,178.812

-							c0,0,48.692,63.484,128.896,5.684l227.779-160.713l178.265,0.273c41.479,0,75.083-33.479,75.083-75.104

-							C983.499,662.306,949.895,628.572,908.416,628.572z"/>

-					</g>

-				</g>

-				<g id="Shape_93">

-					<g>

-						<path d="M405.976,348.398h-2.713c-4.517,37.967-14.476,71.685-26.347,97.231h55.359

-							C422.191,418.766,411.214,389.533,405.976,348.398z M913.79,436.769h-6.649c-11.087,51.93-35.53,98.079-64.653,133.021H978.37

-							C953.593,533.028,926.648,493.038,913.79,436.769z M261.211,477.982h-6.665c-11.071,36.964-35.521,69.804-64.674,94.688

-							h135.904C300.998,546.516,274.055,518.021,261.211,477.982z M563.553,445.63h55.376c-10.1-26.864-21.078-56.097-26.312-97.231

-							H589.9C585.384,386.366,575.425,420.083,563.553,445.63z M740.154,477.982c-11.062,36.964-35.521,69.804-64.66,94.688h135.89

-							c-24.763-26.157-51.721-54.653-64.55-94.688H740.154L740.154,477.982z M89.927,436.769h-6.665

-							c-11.087,51.93-35.537,98.079-64.675,133.021h135.904C129.714,533.028,102.771,493.038,89.927,436.769z M959.96,816.63

-							l-0.096-145.108l29.405-31.853l-0.078-46.294H837.056l-0.126,15.479l-27.35,0.077v-15.556H678.914v41.166h-19.18v-31.773

-							h-55.453l-0.173,32.187h-13.189l-0.36-87.461h20.438l0.785-86.396h-41.104l-0.172,43.377h-2.854

-							c-25.249-55.797-51.68-117.163-65.442-200.516v-96.62c2.822-2.133,60.094-44.585,129.443-8.124c0,0,46.146,24.872,88.81,3.105

-							c0,0,45.307-21.768,67.92-12.17c0,0-33.215-29.529-90.707-3.387c0,0-28.59,14.694-65.161-27.993

-							c0,0-15.965-46.922-130.305-21.281v-21.391h-12.8V319.28c-12.646,70.994-34.896,134.853-61.82,185.19h-3.654v-43.377h-38.673

-							v86.396h17v87.461h-15.896v-32.187h-47.728l-0.33,21.521l-12.854-0.078l0.188-30.831H187.927l-0.031,16.043l-24.731-0.111

-							l0.188-15.932H9.743L9.68,639.669l30.487,31.854L39.289,816.63l-22.411,32.683l181.07,0.579l-16.545,32.517h216.512v-73.729

-							c0-56.062,45.872-101.92,101.92-101.92c56.065,0,101.92,45.855,101.92,101.92v73.729H827.3l-26.723-32.517l181.446-0.376

-							L959.96,816.63z"/>

-					</g>

-				</g>

-				<g id="Shape_46">

-					<g>

-						<path d="M499.475,6.066C226.821,6.066,5.793,227.095,5.793,499.748c0,272.654,221.028,493.683,493.682,493.683

-							c272.64,0,493.688-221.049,493.688-493.683C993.157,227.095,772.108,6.066,499.475,6.066z M552.809,340.471

-							c-43.812,0-79.348-35.535-79.348-79.348c0-43.832,35.536-79.347,79.348-79.367c43.812,0,79.354,35.535,79.354,79.367

-							S596.62,340.471,552.809,340.471z M728.297,512.283c-41.903,0-75.893-33.989-75.893-75.912

-							c0-41.924,33.983-75.913,75.913-75.913c41.923,0,75.892,34.01,75.892,75.913C804.209,478.294,770.24,512.283,728.297,512.283z

-							 M759.875,288.222c-32.441,0-58.757-26.314-58.757-58.757c0-32.462,26.312-58.758,58.757-58.777

-							c32.462,0,58.758,26.315,58.758,58.777C818.633,261.907,792.337,288.222,759.875,288.222z"/>

-					</g>

-				</g>

-				<g id="Shape_39">

-					<g>

-						<path d="M737.659,647.434c-95.929-96.052-72.961-253.299-238.128-262.708c-165.202,9.412-142.311,166.659-238.216,262.708

-							c-45.849,45.854-142.339,63.146-169.662,129.749c-33.486,81.729,21.563,155.638,63.04,187.503

-							c83.32,63.854,217.319,0.726,307.102-8.604c12.89-1.457,25.409-1.703,37.684-1.703c12.293,0,24.812,0.246,37.688,1.703

-							c89.782,9.324,223.781,72.452,307.155,8.604c41.423-31.865,96.484-105.773,63.021-187.503

-							C879.998,710.579,783.508,693.282,737.659,647.434z M916.031,239.942c-60.851-16.331-127.817,36.278-149.486,117.352

-							c-21.771,81.161,9.921,160.075,70.73,176.478c60.896,16.265,127.812-36.274,149.539-117.438

-							C1008.57,335.257,976.875,256.343,916.031,239.942z M161.664,533.771c60.862-16.243,92.505-95.314,70.783-176.394

-							c-21.738-81.161-88.642-133.612-149.521-117.439c-60.861,16.4-92.521,95.314-70.818,176.476

-							C33.829,497.491,100.784,550.03,161.664,533.771z M386.78,301.226c60.845-16.33,92.558-95.314,70.801-176.317

-							C435.859,43.747,368.922-8.774,308.06,7.557c-60.845,16.243-92.54,95.227-70.783,176.388

-							C258.998,264.947,325.918,317.486,386.78,301.226z M612.177,301.226c60.845,16.419,127.817-36.278,149.539-117.281

-							C783.473,102.784,751.742,23.8,690.88,7.557c-60.845-16.331-127.765,36.19-149.485,117.352

-							C519.637,205.911,551.367,284.895,612.177,301.226z"/>

-					</g>

-				</g>

-				<g id="Shape_44">

-					<g>

-						<path d="M990.266,292.161c-17.127-40.57-74.188-60.328-155.67-60.328c-26.521,0-55.731,2.232-86.937,6.484

-							c-11.056-10.418-22.771-20.151-35.021-29.199c-59.725-44.02-133.453-70.339-213.292-70.339

-							c-182.146,0-332.34,135.201-356.632,310.616c-2.12,15.028-3.57,30.244-3.792,45.784

-							C38.688,573.894-13.954,652.318,8.704,706.026c17.098,40.538,74.316,60.267,155.641,60.267

-							c43.958,0,95.437-6.096,151.138-17.5c78.441-16.029,165.683-42.844,255.332-80.646

-							c89.318-37.688,169.428-81.309,235.613-126.158C940.66,450.927,1016.617,354.732,990.266,292.161z M855.127,425.752

-							c-0.837,0.754-1.699,1.508-2.549,2.262c-0.135-0.674-0.29-1.34-0.43-2.013C564.775,663.979,193.526,705.547,193.526,705.547

-							l-1.118-2.656c-9.639,0.562-19.012,0.861-28.063,0.861c-72.954,0-96.256-17.701-98.066-22.018

-							c-5.97-14.126,19.074-56.812,79.866-110.773c8.521,42.203,24.37,81.721,46.229,117.172

-							c433.799-86.588,628.037-275.378,650.335-298.326c-10.709-33.727-26.232-65.312-45.833-93.919

-							c13.067-0.986,25.674-1.515,37.72-1.515c0,0,0,0,0.107,0c72.877,0,96.07,17.686,97.896,22.095

-							C934.596,321.218,929.289,359.374,855.127,425.752z M285.744,789.115c59.771,44.159,133.53,70.603,213.602,70.603

-							c182.083,0,332.355-135.294,356.648-310.802c-76.869,52.112-169.876,102.771-273.684,146.527

-							C478.179,739.37,376.879,770.502,285.744,789.115z"/>

-					</g>

-				</g>

-				<g id="Shape_51_2_">

-					<g>

-						<path d="M163.088,425.002V761.38h112.126V425.002H163.088z M349.968,425.002V761.38h112.134V425.002H349.968z

-							 M536.855,425.002V761.38H648.98V425.002H536.855z M723.727,425.002V761.38h112.127V425.002H723.727z M88.335,836.143h822.279

-							v-37.381H88.335V836.143z M13.582,873.508v37.38h971.794v-37.38H13.582z M947.995,350.242L536.855,88.609H499.47H462.1

-							L50.962,350.242v37.38h897.033V350.242z"/>

-					</g>

-				</g>

-				<g id="Shape_97_2_">

-					<g>

-						<path d="M982.645,782.662c-35.586-42.6-73.823-86.88-82.422-145.84c-8.604-58.979,16.275-106.413,38.229-157.382

-							l-12.622-86.656c-35.585-42.583-72.782-79.608-81.374-138.534c-8.593-58.978,15.229-113.685,37.18-164.671l-12.623-86.64

-							L786.49,14.978C745.43,46.722,696.075,68.691,641.111,76.7c-54.947,8.009-108.522,1.046-156.891-17.682l-91.692,13.377

-							c-40.953,31.727-95.458,54.45-150.385,62.459c-54.913,7.991-108.54,1.046-156.885-17.682l-82.575,12.04l12.622,86.64

-							c37.867,43.457,77.242,85.371,86.177,146.681c8.936,61.258-18.093,104.062-41.981,156.521l12.622,86.657

-							c37.866,43.371,76.195,78.134,85.13,139.393c8.918,61.24-17.047,111.354-40.936,163.812l12.639,86.64l86.623-12.639

-							c42.41-35.104,82.129-57.485,140.54-66.009c58.429-8.507,112.073,0.343,162.682,21.812l91.698-13.354

-							c42.377-35.036,86.194-58.085,144.604-66.592c58.407-8.522,102.859,1.572,153.541,23.135l86.617-12.622L982.645,782.662z

-							 M313.965,747.402l-63.145-433.18l433.167-63.128l63.145,433.188L313.965,747.402z"/>

-					</g>

-				</g>

-				<g id="Shape_53_2_">

-					<g>

-						<path d="M421.637,110.541C162.155,110.541,6.478,318.12,6.478,421.91c0,103.789,51.903,181.628,155.676,181.628

-							c103.79,0,155.693,25.935,155.693,103.789c0,103.79,77.838,181.628,181.627,181.628

-							c337.321,0,492.997-181.628,492.997-363.256C992.472,214.33,733.006,110.541,421.637,110.541z M175.13,499.748

-							c-35.812,0-64.863-29.034-64.863-64.862s29.051-64.862,64.863-64.862c35.828,0,64.862,29.034,64.862,64.862

-							S210.958,499.748,175.13,499.748z M356.758,344.071c-35.828,0-64.862-29.05-64.862-64.879

-							c0-35.828,29.034-64.862,64.862-64.862s64.879,29.034,64.879,64.862C421.637,315.021,392.586,344.071,356.758,344.071z

-							 M499.475,785.165c-42.981,0-77.838-34.851-77.838-77.838s34.854-77.854,77.838-77.854c42.988,0,77.845,34.867,77.845,77.854

-							S542.463,785.165,499.475,785.165z M564.354,344.071c-35.845,0-64.879-29.05-64.879-64.879

-							c0-35.828,29.034-64.862,64.879-64.862c35.802,0,64.852,29.034,64.852,64.862

-							C629.199,315.021,600.149,344.071,564.354,344.071z M771.917,447.845c-35.829,0-64.879-29.032-64.879-64.862

-							c0-35.828,29.05-64.862,64.879-64.862c35.828,0,64.879,29.034,64.879,64.862C836.796,418.812,807.745,447.845,771.917,447.845

-							z"/>

-					</g>

-				</g>

-				<g id="Shape_81_2_">

-					<g>

-						<path d="M499.475,197.479c0,0-120.918-120.918-483.637-120.918v725.473c366.501,0,483.637,120.896,483.637,120.896

-							s117.141-120.896,483.643-120.896V76.561C620.393,76.561,499.475,197.479,499.475,197.479z M439.024,761.643

-							c-54.323-28.685-148.593-64.25-302.292-77.223V197.479c153.695,12.854,247.965,48.401,302.292,77.206V761.643z

-							 M862.211,684.42c-153.745,13.007-248.015,48.538-302.286,77.224V274.686c54.271-28.805,148.541-64.353,302.286-77.206V684.42

-							z"/>

-					</g>

-				</g>

-				<g id="Shape_1_2_">

-					<g>

-						<path d="M350.242,117.661c16.812,0,30.574-13.033,31.803-29.534c0.6-1.85-23.154-82.915-30.185-82.915h-3.153

-							c-7.021,0-30.815,80.77-30.29,82.515C319.458,104.429,333.289,117.661,350.242,117.661z M737.678,632.005l-55.999-63.646

-							c-0.841-0.988-1.934-1.65-3.062-2.081c-0.831-0.295-1.729-0.494-2.618-0.494c-1.775,0-3.573,0.604-5.014,1.882l-64.658,56.85

-							l-4.229,3.709l-17.005,14.973v-98.229v-3.352c0-4.699,3.808-8.503,8.503-8.503c4.698,0,8.502,3.804,8.502,8.503v3.352v71.943

-							l63.267-55.61c2.938-2.584,6.702-4.005,10.625-4.005c0.895,0,1.766,0.084,2.604,0.242V477.85

-							c0-25.046-20.001-45.356-44.71-45.356H403.434c-8.04,0-15.276-5.58-17.205-13.074v-53.561l35.451,2.188

-							c6.527,30.931,33.975,54.138,66.834,54.138c32.854,0,60.297-23.207,66.834-54.117l47.999-2.964

-							c5.876,0,10.626-4.771,10.626-10.637c0-5.843-4.75-10.604-10.342-10.604c0,0,0,0-0.021,0l-48.017-2.954

-							c-1.546-8.051-4.478-15.597-8.598-22.365l32.854-34.306c1.944-1.786,2.854-4.445,2.491-7.293

-							c-0.284-2.354-1.419-4.709-3.163-6.59c-2.261-2.429-5.256-3.815-8.193-3.815c-2.139,0-4.12,0.756-5.37,1.934l-37.006,30.059

-							c-7.269-5.266-15.576-9.133-24.572-11.215l-4.32-69.808c0-5.844-4.771-10.625-10.636-10.625

-							c-5.854,0-10.605,4.771-10.605,10.342l-4.309,69.808c-9.406,2.018-18.098,5.949-25.613,11.394l-36.698-29.765

-							c-1.479-1.367-3.479-2.123-5.595-2.123c-2.953,0-5.946,1.387-8.208,3.826c-1.755,1.892-2.88,4.226-3.164,6.58

-							c-0.336,2.848,0.567,5.507,2.312,7.115l32.886,34.315c-4.149,6.811-7.125,14.431-8.681,22.534l-35.209,2.176V233.8

-							c0-13.41-6.896-25.182-17.341-32.024l7.767-40.559c0-0.873-0.084-1.734-0.188-2.564c5.748-0.294,10.312-4.436,10.312-9.533

-							v-11.992c0-5.297-4.908-9.606-10.961-9.606H323.79c-6.054,0-10.962,4.299-10.962,9.606v11.992

-							c0,5.108,4.572,9.239,10.311,9.533c-0.104,0.83-0.188,1.691-0.188,2.564l7.41,38.625

-							c-12.275,6.369-20.688,19.18-20.688,33.958v632.72c-10.09,0.945-17.973,9.42-17.973,19.738v22.428h-8.397

-							c-13.212,0-23.932,8.896-23.932,19.854v45.233c0,10.948,10.72,19.846,23.932,19.846h330.06

-							c13.223,0,23.938-8.896,23.938-19.846V928.54c0-10.963-10.71-19.854-23.938-19.854H605v-22.428

-							c0-10.962-8.87-19.842-19.844-19.842h-0.062V700.741l17.551,19.969l14.932,16.943c1.492,1.702,3.594,2.569,5.69,2.569

-							c1.786,0,3.573-0.614,5.003-1.897l50.365-44.271l58.372-51.331C740.158,639.973,740.452,635.159,737.678,632.005z

-							 M633.899,744.747c-2.927,2.554-6.679,3.962-10.558,3.995c5.145,2.553,10.899,4.021,17.025,4.021

-							c21.127,0,38.269-17.132,38.269-38.257l-0.01-9.123L633.899,744.747z"/>

-					</g>

-				</g>

-				<g id="Shape_98_2_">

-					<g>

-						<path d="M574.609,257.319c12.188-18.391,24.771-35.099,38.358-51.091c7.396-8.646,14.326-16.209,21.179-23.155

-							c8.356-8.496,15.903-15.442,21.284-19.624c1.521-1.199,3.114-2.632,4.447-4.081c6.769-7.279,10.295-16.775,9.912-26.703

-							c-0.367-9.929-4.598-19.124-11.878-25.888c-14.492-13.427-39.113-12.561-52.657,2.066

-							c-9.628,10.378-16.042,18.907-24.065,29.818c-6.696,9.278-13.243,19.057-20.013,29.951

-							c-12.261,19.808-23.536,40.764-33.5,62.286c-10.428,22.389-18.688,44.095-25.271,66.4

-							c-5.298,18.308-11.628,42.862-13.493,70.415c-0.566,8.229,5.047,15.759,13.076,17.542c1.217,0.266,2.433,0.399,3.682,0.399

-							c7.796,0,14.676-5.53,16.525-13.894c3.932-17.591,11.022-37.465,21.104-59.087

-							C552.021,294.085,562.565,275.444,574.609,257.319z M689.303,325.836l-6.479,2.016c-23.561,7.246-45.211,15.626-66.217,25.688

-							c-17.158,8.329-39.614,20.073-61.309,37.098c-6.348,4.981-8.13,14.026-4.182,21.04c2.915,5.197,8.429,8.435,14.376,8.435

-							c2.812,0,5.614-0.732,8.746-2.471c15.573-8.763,35.133-16.759,58.104-23.738c19.341-5.831,40.27-10.412,62.169-13.61

-							c20.846-3.065,41.663-4.831,63.688-5.397c10.523-0.267,21.021,0.15,31.351,0.616c6.58,0.317,19.524,2.716,27.271,4.148

-							c4.108,0.75,7.046,1.216,8.439,1.249c22.272,0,37.415-12.743,37.665-31.684c0.316-21.356-19.474-31.968-36.479-34.566

-							c-12.729-1.949-39.53-6.047-70.521-3.398C728.7,313.542,708.677,319.789,689.303,325.836z M858.985,562.585

-							c-10.628-9.412-19.273-15.625-30.368-23.388c-9.412-6.52-19.357-12.827-30.368-19.357

-							c-19.974-11.728-41.18-22.556-63.036-32.101c-22.639-9.912-44.511-17.708-66.967-23.822

-							c-27.836-7.379-49.042-10.944-71.647-11.96c-8.273,0-15.403,5.896-16.985,14.01c-1.816,9.361,4.312,18.479,14.486,20.479

-							c17.681,3.465,37.721,10.045,59.487,19.521c18.729,8.185,37.615,18.229,56.089,29.836

-							c18.624,11.646,35.649,23.738,52.074,36.998c8.846,7.146,16.575,13.859,23.688,20.523

-							c8.529,7.963,15.858,15.521,20.189,20.756c1.167,1.433,2.683,3.016,4.132,4.298c6.797,6.014,15.542,9.296,24.604,9.296

-							c10.688,0,20.854-4.598,27.896-12.594c6.58-7.446,9.862-17.025,9.246-26.953C870.88,578.229,866.432,569.132,858.985,562.585z

-							 M658.701,831.269c18.724-2.382,31.451-20.021,29.686-41.062c-0.017-16.092-2.349-27.887-4.896-38.281

-							c-1.2-4.695-2.021-9.361-2.832-13.993c-1.199-6.69-2.438-13.604-4.715-20.557c-7.246-21.938-16.075-44.012-26.236-65.65

-							c-10.445-22.271-21.773-42.546-34.667-61.98c-10.661-15.825-25.438-36.438-45.294-55.479

-							c-5.683-5.497-15.126-5.997-21.356-1.229c-3.515,2.665-5.764,6.547-6.347,10.895c-0.583,4.364,0.566,8.685,3.682,12.744

-							c10.911,14.312,21.562,32.566,31.651,54.256c8.562,18.562,16.025,38.632,22.139,59.654

-							c6.047,20.539,10.745,40.93,14.326,62.285c1.604,9.562,2.882,19.724,3.938,31.118c0.933,9.846,0.578,33.111,0.562,34.11

-							c-0.134,9.185,2.965,17.242,8.962,23.322c6.381,6.48,15.859,10.178,25.973,10.178

-							C655.069,831.604,656.886,831.502,658.701,831.269z M196.78,307.345c2.798,0,5.313-0.233,7.479-0.732

-							c9.545-2.199,23.105-4.082,27.869-4.365c10.212-0.6,20.69-0.35,31.201,0.767c20.557,2.116,41.846,7.812,61.503,16.476

-							c20.673,9.361,40.396,20.973,58.654,34.482c20.34,15.176,36.526,31.318,47.41,47.644c2.979,4.464,7.979,7.13,13.354,7.13

-							c2.398,0,4.73-0.517,6.896-1.55c3.858-1.854,6.773-5.063,8.212-9.102c1.433-4.042,1.197-8.375-0.649-12.243

-							c-12.993-27.237-31.201-47.544-47.354-63.952c-18.312-18.107-38.813-34.399-61.021-48.676

-							c-23.505-14.76-48.875-25.471-75.379-32.268c-13.577-3.498-27.47-4.348-41.33-5.563c-6.763-0.6-13.593,1.083-21.422,1.083

-							c-0.034,0-0.051,0-0.084,0c-7.629,0-24.721-1.999-34.149,1.249c-9.428,3.248-16.642,10.145-20.657,19.29

-							c-3.998,9.162-4.198,19.058-0.566,28.353C162.713,300.665,181.671,307.361,196.78,307.345z M436.278,518.273

-							c-0.483-9.278-8.13-15.358-18.357-15.358c-0.034,0-0.051,0-0.062,0c-25.604,0-50.823,6.13-77.132,16.975

-							c-24.688,10.245-48.061,24.394-67.602,42.602c-19.39,17.891-36.165,37.896-51.274,61.369

-							c-7.113,11.095-13.727,22.733-19.69,34.85c-5.53,11.527-10.911,23.122-15.858,38.812c-0.517,1.636-0.999,3.611-1.266,5.312

-							c-1.55,9.812,0.799,19.624,6.613,27.67c5.847,8.029,14.442,13.327,24.271,14.876c1.981,0.316,3.931,0.483,5.88,0.483

-							c18.357,0,33.8-13.183,36.682-31.336c1.217-7.479,4.115-18.439,7.713-29.284c3.582-10.628,7.613-20.74,12.027-30.138

-							c9.129-19.737,20.923-38.578,34.167-54.604c13.776-16.792,29.618-30.318,48.376-41.479

-							c19.096-11.312,40.58-19.227,61.354-23.225C430.681,534.133,436.761,526.953,436.278,518.273z M488.552,543.461

-							c-8.429-5.062-20.4-2.032-25.454,6.397c-14.188,23.688-22.788,46.594-29.335,65.896c-7.33,22.089-12.96,44.661-17.208,69.032

-							c-4.099,23.487-6.812,47.144-8.079,70.312c-0.684,12.85-0.896,24.621-0.694,36.065c0.277,11.411,0.6,23.222,2.665,38.215

-							c0.25,1.732,0.667,3.698,1.166,5.38c4.632,15.692,19.291,26.672,35.666,26.672c3.548,0,7.097-0.518,10.522-1.55

-							c19.657-5.812,30.938-26.555,25.154-46.228c-2.615-8.779-4.798-21.506-5.864-28.286c-1.532-9.712-2.781-20.174-3.715-31.104

-							c-1.749-21.09-2.231-41.979-1.466-63.812c0.75-21.756,3.032-42.995,6.729-63.056c4.314-23.173,10.045-43.326,17.441-60.732

-							C499.713,558.204,496.48,548.226,488.552,543.461z M673.644,874.131c-3.798,0-7.606,0.5-11.311,1.5

-							c-11.161,3.031-20.457,10.194-26.204,20.206s-7.246,21.673-4.215,32.8c5.064,18.791,22.206,31.938,41.68,31.938

-							c3.814,0,7.603-0.499,11.312-1.499c22.982-6.214,36.646-30.002,30.418-53.008

-							C710.242,887.258,693.101,874.131,673.644,874.131z M915.374,607.446c-23.389,4.598-38.681,27.354-34.1,50.741

-							c3.965,20.224,21.771,34.916,42.379,34.916c2.749,0,5.547-0.271,8.357-0.834c11.312-2.22,21.105-8.717,27.535-18.289

-							c6.437-9.579,8.746-21.106,6.52-32.418C961.602,618.624,939.296,602.782,915.374,607.446z M985.706,307.778

-							c-7.563-8.713-18.074-13.96-29.604-14.776c-24.006-1.865-44.489,16.525-46.155,40.063

-							c-0.806,11.511,2.914,22.655,10.479,31.368c7.579,8.729,18.091,13.977,29.604,14.775c1.028,0.084,2.05,0.101,3.081,0.101

-							c22.568,0,41.479-17.642,43.062-40.164C996.982,327.651,993.252,316.507,985.706,307.778z M722.636,105.028

-							c2.732,0,5.521-0.25,8.296-0.8c23.355-4.547,38.688-27.27,34.15-50.658c-4.448-22.955-27.054-38.797-50.642-34.183

-							c-11.328,2.183-21.123,8.662-27.604,18.241c-6.446,9.562-8.795,21.072-6.597,32.417

-							C684.172,90.319,702.013,105.028,722.636,105.028z M78.355,323.637c3.415,0,6.83-0.399,10.162-1.199

-							c23.172-5.581,37.464-28.969,31.901-52.141c-4.698-19.49-21.973-33.101-41.996-33.101c-3.398,0-6.813,0.417-10.145,1.216

-							c-11.228,2.699-20.723,9.596-26.737,19.457c-6.03,9.846-7.863,21.439-5.147,32.668

-							C41.074,310.027,58.349,323.637,78.355,323.637z M180.354,759.055c-6.68,0-13.093,1.521-19.124,4.498

-							c-10.345,5.103-18.091,13.959-21.789,24.871c-3.698,10.944-2.916,22.672,2.215,33c7.312,14.859,22.156,24.104,38.747,24.104

-							c6.681,0,13.11-1.521,19.107-4.498c10.361-5.08,18.107-13.942,21.806-24.871c3.715-10.928,2.916-22.655-2.182-33

-							C211.806,768.316,196.946,759.055,180.354,759.055z M434.762,894.454c-3.798,0-7.606,0.517-11.311,1.517

-							c-22.989,6.214-36.648,29.984-30.418,52.979c5.062,18.842,22.205,31.968,41.679,31.968c3.798,0,7.613-0.499,11.312-1.499

-							c11.128-3.016,20.438-10.211,26.187-20.207c5.747-9.994,7.247-21.639,4.231-32.815

-							C471.344,907.581,454.202,894.454,434.762,894.454z M163.08,513.493c0.833-1.283,4.364-5.271,8.163-8.979

-							c3.515-3.479,7.313-6.796,11.228-10.022c7.962-6.53,16.608-12.35,25.67-17.593c17.858-10.382,38.415-18.156,59.354-22.688

-							c21.256-4.398,43.095-6.229,64.901-6.229h2.729c25.305,0,47.812,3.447,66.234,10.229c7.546,2.799,16.541-1.049,20.39-8.195

-							c4.331-8.062,1.299-18.125-6.78-22.473c-26.67-14.312-53.474-19.956-76.262-23.638c-25.571-3.805-51.625-4.887-78.095-3.271

-							c-27.687,1.982-54.64,8.163-80.094,18.374c-13.043,5.231-25.671,11.528-37.515,18.708c-6.43,3.881-12.26,7.796-18.891,12.71

-							c-5.597,4.248-10.445,7.936-17.225,14.693l-1.816,1.812c-1.849,1.866-3.498,3.915-4.848,6.063

-							c-11.161,17.325-6.146,40.497,11.161,51.675c6.047,3.897,13.044,5.964,20.224,5.964

-							C144.406,530.635,156.167,524.254,163.08,513.493z M73.841,534.232c-17.542-14.849-46.077-12.493-60.903,4.979

-							c-15.425,18.174-13.21,45.479,4.964,60.953c7.813,6.597,17.741,10.244,27.953,10.244c12.727,0,24.738-5.547,32.951-15.259

-							C94.231,576.995,91.982,549.675,73.841,534.232z"/>

-					</g>

-				</g>

-				<g id="Shape_96_2_">

-					<g>

-						<path d="M908.312,213.563h-49.065c0-18.053-14.639-32.709-32.709-32.709h-32.71c-18.053,0-32.71,14.656-32.71,32.709H450.41

-							c-32.71,0-32.71-81.773-65.402-81.773H205.121c-32.71,0-32.71,81.773-65.419,81.773H90.638

-							c-45.142,0-81.758,36.616-81.758,81.774v490.595c0,45.159,36.616,81.774,81.758,81.774h817.674

-							c45.142,0,81.758-36.615,81.758-81.774V295.338C990.069,250.18,953.453,213.563,908.312,213.563z M335.943,344.402

-							c0,18.054-14.646,32.693-32.71,32.693h-98.112c-18.07,0-32.71-14.64-32.71-32.693v-16.354c0-18.053,14.64-32.71,32.71-32.71

-							h98.112c18.07,0,32.71,14.64,32.71,32.71V344.402z M663.023,785.95c-135.458,0-245.312-109.865-245.312-245.312

-							c0-135.459,109.854-245.307,245.312-245.307c135.438,0,245.289,109.848,245.306,245.307

-							C908.329,676.104,798.465,785.95,663.023,785.95z M663.023,360.758c-99.336,0-179.893,80.534-179.893,179.889

-							c0,99.339,80.557,179.89,179.893,179.89c99.335,0,179.886-80.555,179.886-179.89

-							C842.909,441.292,762.358,360.758,663.023,360.758z"/>

-					</g>

-				</g>

-				<g id="Shape_117_2_">

-					<g>

-						<path d="M499.504,304.683c-107.706,0-195.04,87.334-195.04,195.049c0,107.658,87.334,195.048,195.04,195.048

-							c107.714,0,195.049-87.386,195.049-195.048C694.553,392.017,607.218,304.683,499.504,304.683z M499.504,207.15

-							c26.941,0,48.768-21.809,48.768-48.75V60.868c0-26.991-21.82-48.767-48.768-48.767c-26.925,0-48.758,21.775-48.758,48.767

-							V158.4C450.746,185.342,472.579,207.15,499.504,207.15z M740.877,307.107c12.49,0,24.965-4.717,34.481-14.234l68.941-68.997

-							c19.058-19.001,19.058-49.862,0-68.964c-19.051-19.051-49.896-19.051-68.941,0l-68.946,68.964

-							c-19.052,19.035-19.052,49.896,0,68.997C715.929,302.391,728.42,307.107,740.877,307.107z M938.367,451.015h-97.532

-							c-26.925,0-48.767,21.858-48.767,48.771c0,26.938,21.842,48.749,48.767,48.749h97.532c26.924,0,48.766-21.812,48.766-48.749

-							C987.133,472.873,965.291,451.015,938.367,451.015z M775.259,706.722c-19.034-19.051-49.896-19.051-68.946,0

-							c-19.052,19.002-19.052,49.863,0,68.897l68.946,68.964c9.534,9.518,22.009,14.334,34.482,14.334

-							c12.473,0,24.941-4.816,34.479-14.334c19.035-19.001,19.035-49.862,0-68.964L775.259,706.722z M499.362,792.346

-							c-26.925,0-48.771,21.858-48.771,48.771v97.516c0,26.958,21.843,48.771,48.771,48.771c26.934,0,48.759-21.812,48.759-48.771

-							v-97.516C548.121,814.204,526.296,792.346,499.362,792.346z M223.508,706.539l-68.956,68.947

-							c-19.043,19.052-19.043,49.896,0,68.997c9.526,9.517,22,14.229,34.482,14.229c12.474,0,24.948-4.718,34.474-14.229

-							l68.955-68.997c19.044-19.002,19.044-49.862,0-68.947C273.412,687.488,242.551,687.488,223.508,706.539z M206.865,499.632

-							c0-26.958-21.834-48.767-48.758-48.767H60.583c-26.933,0-48.766,21.809-48.766,48.767c0,26.907,21.833,48.771,48.766,48.771

-							h97.524C185.031,548.396,206.865,526.539,206.865,499.632z M223.699,292.724c9.525,9.534,21.999,14.334,34.474,14.334

-							c12.474,0,24.956-4.8,34.481-14.334c19.043-19.002,19.043-49.846,0-68.897l-68.955-68.947

-							c-19.052-19.051-49.904-19.051-68.956,0c-19.043,18.985-19.043,49.847,0,68.947L223.699,292.724z"/>

-					</g>

-				</g>

-				<g id="Shape_118_2_">

-					<g>

-						<path d="M122.342,411.566l-63.774-36.168c-16.408-9.309-37.265-3.55-46.574,12.858c-9.309,16.423-3.55,37.28,12.874,46.589

-							l78.339,44.41v355.938c0,30.182,24.467,54.664,54.648,54.664c30.196,0,54.664-24.482,54.664-54.664v-144.17L315.95,863.24

-							c0,0.023,0,0.045,0.015,0.076c15.525,25.863,49.104,34.264,75.002,18.708c25.869-15.54,34.27-49.118,18.729-75.003

-							l-89.78-149.477h206.892v177.646c0,30.182,24.472,54.659,54.663,54.659c30.187,0,54.663-24.479,54.663-54.659V656.287

-							c7.938-2.818,13.666-10.346,13.666-19.242V493.562l0.274-0.29L458.26,411.567L122.342,411.566L122.342,411.566z

-							 M854.737,329.586v27.316h136.659v-27.316H854.737z M946.422,201.398l-118.529,68.04l13.605,23.69l118.529-68.025

-							L946.422,201.398z M846.754,107.642L778.9,226.247l23.722,13.574l67.854-118.605L846.754,107.642z M759.122,261.256

-							l-68.36-109.312L566.84,290.462l-67.369-15.54l17.749,71.011l-29.922,33.441l191.733,81.69L772.758,356.9h-68.312

-							L759.122,261.256z M629.273,315.92c-11.311,0-20.512-9.171-20.512-20.491c0-11.319,9.201-20.491,20.512-20.491

-							c11.314,0,20.506,9.172,20.506,20.491C649.779,306.733,640.608,315.92,629.273,315.92z"/>

-					</g>

-				</g>

-				<g id="Shape_95">

-					<g>

-						<polygon points="873.006,752.66 961.497,752.66 853.963,627.225 914.485,627.225 808.624,509.64 843.943,509.64 

-							773.369,415.568 702.828,509.64 738.163,509.64 632.334,627.225 692.824,627.225 585.322,752.66 673.797,752.66 

-							561.825,893.695 726.325,893.695 726.325,979.982 820.381,979.982 820.381,893.695 985.043,893.695 						"/>

-					</g>

-				</g>

-				<g id="Shape_95_copy">

-					<g>

-						<polygon points="548.556,594.094 700.688,594.094 515.826,378.479 619.87,378.479 437.886,176.311 498.617,176.311 

-							377.284,14.593 255.983,176.311 316.746,176.311 134.811,378.479 238.79,378.479 53.992,594.094 206.092,594.094 

-							13.606,836.566 296.401,836.566 296.401,984.904 458.104,984.904 458.104,836.566 741.171,836.566 						"/>

-					</g>

-				</g>

-				<g id="Shape_57">

-					<g>

-						<path d="M785.441,512.893c-106.83,0-194.191,87.363-194.191,194.182c0,106.83,87.361,194.188,194.191,194.188

-							c106.825,0,194.489-87.356,194.489-194.188C979.936,600.256,892.271,512.893,785.441,512.893z M785.441,832.154

-							c-69.504,0-125.086-55.564-125.086-125.086c0-69.504,55.582-125.069,125.086-125.069S910.83,637.564,910.83,707.068

-							C910.83,776.59,854.945,832.154,785.441,832.154z M487.812,229.889c33.896-18.909,46.146-61.763,27.211-95.679

-							c-13.021-23.338-37.268-36.257-62.229-35.971c-11.342,0.144-22.876,3.154-33.454,9.062

-							c-33.868,18.909-46.146,61.763-27.209,95.694C411.061,236.915,453.945,248.798,487.812,229.889z M530.284,612.012

-							L673.18,507.891c5.932-5.146,9.908-12.276,11.27-20.021c1.338-7.71,0.047-15.979-3.766-22.829L561.857,252.096

-							c-2.994-5.433-7.455-10.021-12.823-13.143c-5.368-3.106-11.613-4.764-17.826-4.684c-5.799,0.144-11.55,1.769-16.567,4.684

-							c-4.923,2.788-9.155,6.802-12.188,11.581l-82.248,132.573l-110.063,58.48c-4.231,1.96-8.156,4.668-11.263,8.141

-							c-3.107,3.479-5.385,7.773-6.882,12.188c-1.497,4.429-2.246,9.112-1.879,13.764c0.382,4.652,1.896,9.32,4.062,13.446

-							c2.183,4.126,5.13,7.694,8.762,10.625c3.632,2.931,8.013,5.001,12.505,6.261c4.493,1.258,9.144,1.863,13.764,1.242

-							c4.62-0.604,9.128-2.295,13.126-4.684l118.522-62.862c5.336-2.819,9.925-7.073,13.126-12.187l56.298-90.692l76.604,137.289

-							L469.92,572.932c-4.636,3.983-8.027,9.208-10.004,15.013c-1.976,5.777-2.484,12.139-1.259,18.129l42.853,209.813

-							c0.748,4.571,2.501,8.922,5.002,12.823c2.485,3.92,5.863,7.396,9.688,10.005c3.84,2.628,7.966,4.413,12.506,5.321

-							c4.557,0.908,9.224,0.955,13.764,0c4.541-0.94,9.021-2.66,12.824-5.321c3.808-2.645,6.914-6.063,9.383-10.005

-							c2.453-3.918,4.285-8.538,5.002-13.126c0.72-4.571,0.516-9.271-0.62-13.764L530.284,612.012z M213.189,512.893

-							c-106.813,0-194.176,87.363-194.176,194.182c0,106.83,87.362,194.188,194.176,194.188

-							c106.83,0,194.192-87.356,194.192-194.188C407.381,600.256,320.02,512.893,213.189,512.893z M213.189,832.154

-							c-69.504,0-125.07-55.564-125.07-125.086c0-69.504,55.565-125.069,125.07-125.069c69.521,0,125.086,55.565,125.086,125.069

-							C338.275,776.59,282.709,832.154,213.189,832.154z"/>

-					</g>

-				</g>

-				<g id="Shape_61">

-					<g>

-						<path d="M432,166.023c41.952,0,76.881-33.755,76.881-76.854c0-41.924-34.929-76.854-76.881-76.854

-							c-41.91,0-76.839,34.93-76.839,76.854C355.16,132.268,390.09,166.023,432,166.023z M660.295,522.398

-							c12.799-18.647,19.766-41.93,20.955-68.719c-3.498-31.44-15.137-66.39-25.613-98.998c-10.492-20.969-1.188,0,6.952,2.336

-							c34.972,11.639,54.771,0,65.243-26.788c-32.621-72.209-60.585-143.258-94.34-214.292

-							c-26.816,1.161-47.771,10.492-61.718,26.774l45.421,124.625c-26.816-61.718-61.746-104.817-119.966-103.67

-							c-20.955,0-43.085,10.478-65.229,32.622c-1.161,1.175-2.336,2.336-3.469,3.483c-18.661,53.577-37.28,108.314-55.913,161.891

-							L210.755,472.319l22.116,44.259l24.466-8.146L400.595,753l-39.616,206.139L432,977.757l15.15,3.511l24.466-101.348

-							l55.913,89.682l41.908-3.479l-86.197-153.74l17.457-86.184l68.74-82.674L733.65,987.073l29.105-24.452l25.627-22.13

-							L660.295,522.398z M432,641.189l-20.941,44.271L294.575,492.126L430.852,423.4c0-1.161,1.147-2.322,1.147-2.322

-							c8.156-12.813,16.311-24.466,23.305-36.104c25.613,31.446,43.085,64.054,52.401,95.5L432,641.189z"/>

-					</g>

-				</g>

-				<g id="Shape_59">

-					<g>

-						<path d="M872.604,826.424L499.475,91.199L126.36,826.424H13.581v81.874h971.788v-81.874H872.604z M341.096,826.424

-							L499.475,520.67l158.379,305.754H341.096L341.096,826.424z"/>

-					</g>

-				</g>

-				<g id="Shape_54">

-					<g>

-						<path d="M728.842,272.859L766.15,8.063C681.85,29.212,555.02,83.06,474.587,164.568

-							C330.19,310.885,247.79,522.525,303.222,634.338l-57.841,60.98l-28.898,30.363c-7.254,7.154-16.804,13.979-26.503,18.771

-							c-19.828,9.947-41.688,13.004-62.226,7.518c-10.343-2.627-20.373-7.562-30.072-14.045

-							c-9.286-5.859-20.521-16.07-24.801-22.422c-25.693-33.898-16.226-97.303,3.751-147.168l0.38-1.041

-							c2.825-7.104,0.396-15.516-6.279-19.762c-7.435-4.793-17.316-2.463-22.042,5.055c-17.101,27.495-28.932,56.212-36.053,88.73

-							c-6.659,31.84-6.031,70.104,12.987,104.188c11.055,19.04,21.679,29.384,35.575,41.479

-							c13.598,11.385,29.741,20.786,47.388,26.943c21.381,7.771,44.497,9.286,66.868,6.659c-2.577,22.72-1.057,46.05,6.56,67.729

-							c6.13,17.855,15.383,34.198,26.618,48.027c11.946,14.027,22.19,24.771,40.944,36.035

-							c33.624,19.282,71.438,19.91,102.854,13.138c32.061-7.233,60.408-19.218,87.572-36.496c6.41-4.136,9.22-12.431,6.229-19.798

-							c-3.271-8.263-12.606-12.239-20.753-8.924l-0.991,0.413c-49.238,20.19-111.827,29.812-145.271,3.784

-							c-6.262-4.346-16.324-15.779-22.19-25.132c-6.411-9.852-11.235-20.009-13.83-30.485c-5.453-20.783-2.379-42.938,7.418-62.949

-							c4.759-9.883,11.5-19.497,18.539-26.885l29.56-28.781l0.446-0.479l2.462-2.396l57.696-56.228

-							c110.35,56.15,319.229-27.276,463.729-173.645C901.09,438.463,968.09,318.342,990.151,235L728.842,272.859z M635.587,300.916

-							c-21.86,22.141-57.318,22.141-79.179,0.033c-21.859-22.125-21.859-58.095,0-80.236c21.854-22.124,57.352-22.124,79.179,0

-							C657.479,242.854,657.479,278.791,635.587,300.916z"/>

-					</g>

-				</g>

-				<g id="Shape_65">

-					<g>

-						<path d="M845.676,616.973c-20.965,0-41.036,4.854-58.784,13.146c-17.521,7.618-36.874,12.228-57.186,12.228

-							c-20.276,0-39.642-4.604-57.167-12.228c-17.749-8.29-37.803-13.146-58.784-13.146c-20.759,0-40.812,4.854-58.784,13.146

-							c-17.302,7.618-36.667,12.228-56.938,12.228c-20.294,0-39.9-4.604-57.188-12.228c-17.729-8.29-37.803-13.146-58.781-13.146

-							c-20.968,0-41.033,4.854-58.781,13.146c-17.525,7.618-36.891,12.228-57.168,12.228c-20.294,0-39.659-4.604-57.185-12.228

-							c-17.749-8.29-37.579-13.146-58.561-13.146s-41.036,4.854-58.784,13.146c-17.525,7.618-36.891,12.228-57.168,12.228v85.528

-							c20.277,0,39.643-4.627,57.168-12.229c17.748-8.288,37.802-13.143,58.784-13.143c20.981,0,40.812,4.854,58.561,13.143

-							c14.756,6.446,31.112,10.146,47.966,11.303l-71.012,70.788c-22.599-14.068-52.576-11.54-72.165,8.062L32.316,887.18

-							c-22.616,22.582-22.616,59.271,0,82.071c22.805,22.6,59.472,22.6,82.054,0l81.383-81.383

-							c18.471-18.454,21.687-46.109,10.146-68.021l97.997-97.756c6.69-2.062,13.14-3.68,19.365-6.446

-							c17.731-8.286,37.808-13.143,58.784-13.143c20.982,0,41.053,4.854,58.784,13.143c17.284,7.604,36.874,12.229,57.185,12.229

-							c20.277,0,39.646-4.627,56.944-12.229c17.989-8.286,38.025-13.143,58.784-13.143c20.979,0,41.035,4.854,58.784,13.143

-							c17.521,7.604,36.891,12.229,57.168,12.229c20.312,0,39.654-4.627,57.185-12.229c17.749-8.286,37.819-13.143,58.784-13.143

-							c20.979,0,40.829,4.854,58.784,13.143c17.302,7.604,36.891,12.229,57.185,12.229V642.34c-20.294,0-39.883-4.604-57.185-12.228

-							C886.487,621.822,866.657,616.973,845.676,616.973z M942.279,477.114c-12.899,0.465-393.775,0-393.775,0l116.657-116.536

-							l15.667,5.985c19.83,7.154,41.965-3.01,49.343-22.822c5.073-14.052,1.152-29.272-8.53-39.419l95.451-95.796

-							c21.896,11.558,49.565,8.548,68.003-9.889l81.399-81.383c22.822-22.822,22.822-59.489,0-82.071

-							c-22.604-22.839-59.489-22.839-82.07,0l-81.383,81.383c-19.606,19.59-22.152,49.566-7.86,71.924L693.968,289.824

-							l-201.032-74.47c-5.297-2.992-10.853-5.538-17.061-7.378c-43.805-13.14-90.154,11.764-103.294,55.568l-61.776,207.019

-							c-0.929,2.43-1.146,4.511-1.394,6.592H34.614v111.114c14.98,0,30.425-3.438,44.028-9.46

-							c22.375-10.353,47.262-15.891,71.7-15.891c24.439,0,49.102,5.521,70.995,15.668c14.533,6.449,29.513,9.683,44.733,9.683

-							c15.444,0,30.441-3.229,44.269-9.46c22.604-10.369,47.262-15.925,71.7-15.925c24.663,0,48.878,5.313,71.253,15.688

-							c14.052,6.443,29.513,9.683,44.716,9.683c15.221,0,30.218-3.231,44.271-9.459c22.354-10.371,47.272-15.908,71.459-15.908

-							c24.921,0,48.896,5.297,71.253,15.688c14.292,6.447,29.73,9.665,44.716,9.665c15.238,0,30.439-3.222,44.286-9.441

-							c22.354-10.371,47.262-15.926,71.684-15.926c4.162,0,20.981,1.29,37.578-9.786c29.514-12.898,40.571-20.294,66.403-36.082

-							C970.863,503.978,988.405,475.618,942.279,477.114z M506.54,477.149h-24.663l49.79-165.879l102.829,38.025L506.54,477.149z

-							 M505.852,106.54l-10.594,22.582c-6.932,14.068-21.224,23.751-37.579,23.751h-24.92

-							c14.312,20.294,37.819,33.434,64.321,33.434c43.354,0,78.632-35.033,78.632-78.391v-4.162h-66.18

-							C507.915,103.754,506.316,104.924,505.852,106.54z M457.662,133.043c8.53,0,16.132-5.073,19.589-12.452l10.388-22.581

-							c3.921-8.53,12.229-14.292,21.896-14.292h81.159c-10.611-41.74-48.654-72.405-93.611-72.405

-							c-53.246,0-96.362,43.116-96.362,96.604c0,8.53,0.935,17.061,3.233,25.127L457.662,133.043L457.662,133.043z"/>

-					</g>

-				</g>

-				<g id="Shape_115_2_">

-					<g>

-						<path d="M955.043,960.077C498.044,816.275,139.233,656.928,57.386,619.883c-8.459-3.412-18.289,0.482-21.482,8.692

-							c-3.442,8.458,0.218,17.618,8.459,20.812c20.345,9.146,40.457,18.062,59.898,26.521l-64.462,49.146

-							c-7.337,10.77-4.128,24.479,6.621,31.779c8.007,5.479,19.441,4.797,27.215-0.234l110.869-46.401

-							c271.261,114.071,477.234,180.62,767.346,272.049c5.938,0.919,11.438-3.194,12.354-9.378

-							C965.105,966.932,960.994,961.215,955.043,960.077z M255.134,660.479c8.256,0.473,16.232-1.366,23.087-4.812l169.988-76.801

-							c12.104-6.402,21.264-18.07,24.224-32.23l-0.218-85.509l117.958,105.62l-21.716,179.927c0,1.144-0.234,2.274-0.234,3.427

-							c-1.137,26.529,19.433,48.916,45.956,50.068c24.925,0.903,46.173-17.151,49.616-41.609l25.377-205.304

-							c0-0.903,0.218-1.823,0.218-2.741c0.452-14.404-5.265-27.434-14.855-36.578l-109.271-97.155l164.604-80.929l152.71,140.59

-							c6.854,6.636,16.248,10.765,26.296,10.765c20.578-0.25,37.045-16.936,36.812-37.278c0-10.967-5.027-20.797-12.567-27.667

-							L722.26,228.639c1.465,0.078,2.935,0.218,4.408,0.218c42.763,0,77.283-34.739,77.283-77.485

-							c0-42.762-34.521-77.517-77.283-77.517c-42.965,0-77.485,34.755-77.485,77.517c0,16.295,5.032,31.437,13.662,43.931

-							l-143.054-51.034L442.508,32.478c-5.951-8.24-15.106-13.724-25.829-15.095c-20.105-2.274-38.634,12.354-40.938,32.714

-							c-0.904,8.443,1.147,16.669,5.265,23.539l78.872,114.312c3.661,4.562,8.241,8.443,13.709,10.967l91.458,35.893L414.84,311.623

-							c-21.031,11.886-35.892,32.932-40.005,57.374l0.67,137.399l-138.879,62.64c-15.547,7.54-26.732,23.087-27.433,41.594

-							C208.057,637.158,228.636,659.342,255.134,660.479z"/>

-					</g>

-				</g>

-				<g id="Shape_75">

-					<g>

-						<path d="M888.713,892.24c-16.998-7.8-36.293-12.477-56.42-12.477c-20.018,0-39.295,4.654-56.326,12.477

-							c-16.871,7.642-35.475,12.123-54.973,12.123c-19.264,0-38.117-4.481-54.722-12.123c-17.099-7.8-36.394-12.477-56.53-12.477

-							c-19.907,0-39.232,4.654-56.295,12.477c-16.812,7.642-35.479,12.123-54.957,12.123c-19.514,0-38.104-4.481-54.753-12.123

-							c-17.092-7.8-36.402-12.477-56.451-12.477c-20.128,0-39.438,4.654-56.452,12.477c-16.7,7.642-35.396,12.123-54.895,12.123

-							c-19.373,0-38.085-4.481-54.816-12.123c-17.124-7.8-36.371-12.477-56.452-12.477c-20.018,0-39.296,4.654-56.389,12.477

-							c-16.747,7.642-35.302,12.123-54.8,12.123v83.168c19.499,0,38.054-4.529,54.8-12.124

-							c17.093-8.104,36.355-12.771,56.389-12.771c20.081,0,39.328,4.688,56.452,12.771c16.731,7.595,35.443,12.124,54.816,12.124

-							c19.515,0,38.195-4.529,54.895-12.124c16.999-8.104,36.324-12.771,56.452-12.771c20.033,0,39.359,4.688,56.451,12.771

-							c16.646,7.595,35.239,12.124,54.753,12.124c19.479,0,38.146-4.529,54.957-12.124c17.078-8.104,36.388-12.771,56.311-12.771

-							c20.127,0,39.422,4.688,56.521,12.771c16.604,7.595,35.458,12.124,54.753,12.124c19.479,0,38.064-4.529,54.957-12.124

-							c17.047-8.104,36.309-12.771,56.311-12.771c20.127,0,39.438,4.688,56.438,12.771c16.646,7.595,35.459,12.124,54.732,12.124

-							v-83.168C924.188,904.363,905.381,899.882,888.713,892.24z M634.367,158.983V640.22h302.951

-							C960.559,415.971,783.484,229.084,634.367,158.983z M873.287,685.479H734.988H199.156v123.678

-							c7.579,2.023,15.096,4.246,21.983,7.596c16.715,7.358,35.443,11.902,54.8,11.902c19.53,0,38.227-4.544,54.911-11.902

-							c16.999-8.035,36.312-12.754,56.438-12.754c20.062,0,39.354,4.702,56.451,12.754c16.684,7.358,35.271,11.902,54.769,11.902

-							c19.467,0,38.133-4.544,54.941-11.902c17.094-8.035,36.388-12.754,56.311-12.754c20.127,0,39.453,4.702,56.521,12.754

-							c16.604,7.358,35.476,11.902,54.753,11.902c3.758,0,7.312-0.934,10.834-1.354c0.426,0,0.426,0.424,0.859,0.424

-							c2.475,0,4.268-1.1,6.688-1.1c4.449-0.598,8.852-1.117,13.334-2.201c39.855-8.335,65.588-39.721,65.588-39.721l77.521-99.191

-							h-22.55v-0.025L873.287,685.479L873.287,685.479z M79.507,643.885c168.914,0,337.844,0,506.774,0

-							c2.013,0,3.664-1.667,3.664-3.646c0-208.511,0-417.002,0-625.495c0-1.604-0.865-2.61-1.982-3.13

-							c-1.242-0.88-2.861-1.006-4.166,0.473l-0.047,0.031c-0.017,0.016-0.032,0.016-0.048,0.031

-							c-168.931,208.507-337.844,417-506.774,625.509C75.01,640,76.079,643.885,79.507,643.885z"/>

-					</g>

-				</g>

-				<g id="Shape_94_2_">

-					<g>

-						<path d="M499.52,251.556c67.033-0.033,121.269-54.313,121.269-121.214c0-66.983-54.248-121.247-121.269-121.279

-							C432.561,9.095,378.41,63.359,378.41,130.342C378.405,197.242,432.561,251.522,499.52,251.556z M904.143,603.831

-							c-1.254-5.731-3.666-10.902-6.688-15.577l0.166-0.082l-0.414-0.363c-3.979-6.046-9.283-11.002-15.328-14.636l-93.43-88.854

-							l-94.521-175.824l-4.395-8.177l-0.197,0.148c-11.299-17.195-31.057-27.388-52.133-26.083H361.754

-							c-21.095-1.305-40.851,8.888-52.124,26.083l-0.198-0.148l-4.402,8.177l-94.536,175.824l-93.405,88.854

-							c-6.087,3.617-11.381,8.573-15.354,14.636l-0.396,0.363l0.148,0.082c-3.031,4.675-5.426,9.846-6.682,15.577

-							c-5.699,25.786,10.58,51.34,36.366,57.021c1,0.221,1.933,0.198,2.924,0.353c-5.979,11.646-9.68,24.608-9.68,38.588

-							c0,36.407,22.944,67.229,55.057,79.405l-0.149,0.312l141.778,61.354l-28.966,14.586c-2.998,1.205-5.806,2.771-8.572,4.354

-							l-0.355,0.188c-20.962,12.104-35.284,34.485-35.284,60.458c0,38.648,31.376,69.984,70.047,69.984

-							c8.581,0,16.749-1.768,24.364-4.625l0.1,0.247l2.062-0.854c0.495-0.248,1.021-0.463,1.544-0.711l153.434-66.395

-							l153.442,66.395c0.512,0.248,1.041,0.463,1.535,0.711l2.062,0.854l0.104-0.247c7.611,2.857,15.771,4.625,24.35,4.625

-							c38.67,0,70.039-31.336,70.039-69.984c0-25.973-14.289-48.354-35.268-60.458l-0.33-0.188

-							c-2.793-1.585-5.584-3.151-8.594-4.354l-28.977-14.586l141.765-61.354l-0.134-0.298

-							c32.111-12.174,55.039-43.014,55.039-79.388c0-14.011-3.698-26.979-9.68-38.621c1.021-0.148,1.934-0.132,2.924-0.33

-							C893.57,655.171,909.842,629.617,904.143,603.831z M251.484,625.934l-0.074,0.148c-11.621-6.591-24.827-10.638-39.033-11.134

-							l83.097-72.853l40.726-65.892L350.01,675.6L251.484,625.934z M747.547,626.082l-0.062-0.132l-84.74,42.684l14.223-169.432

-							l26.518,42.896l83.09,72.853C772.391,615.444,759.16,619.475,747.547,626.082z"/>

-					</g>

-				</g>

-				<g id="Shape_103_2_">

-					<g>

-						<path d="M67.104,58.769H40.908c-8.845,0-15.987,7.143-15.987,15.987v197.389c0,8.845,7.143,16.004,15.987,16.004h26.196

-							c8.828,0,16.004-7.159,16.004-16.004V74.756C83.108,65.912,75.932,58.769,67.104,58.769z M958.008,58.769h-26.18

-							c-8.844,0-16.004,7.159-16.004,15.987v197.389c0,8.845,7.16,16.004,16.004,16.004h26.18c8.846,0,16.021-7.159,16.021-16.004

-							V74.756C974.029,65.912,966.854,58.769,958.008,58.769z M868.133,20.528h-34.889c-11.812,0-21.361,9.552-21.361,21.344

-							v109.569h-78.084c-2.812-5.694-6.822-10.934-12.01-15.263c-19.93-16.61-49.512-13.966-66.141,5.946

-							c0,0-3.02,3.555-7.867,9.316h-81.906c-11.625-25.084-36.928-42.504-66.392-42.504c-29.498,0-54.807,17.42-66.408,42.504

-							h-88.479l-7.918-9.316c-16.594-19.912-46.208-22.557-66.156-5.946c-5.188,4.329-9.198,9.568-11.994,15.263h-71.496V41.872

-							c0-11.792-9.552-21.344-21.345-21.344h-34.905c-11.793,0-21.328,9.552-21.328,21.344v263.175

-							c0,11.775,9.535,21.327,21.328,21.327h34.905c11.793,0,21.345-9.552,21.345-21.327v-109.57h72.793

-							c1.364,2.409,2.914,4.734,4.751,6.924l134.08,160.479v156.621c0,4.348-19.593,408.172-19.593,408.172

-							c-1.903,26.415,18.06,49.343,44.438,51.18c26.398,1.785,49.275-18.01,51.111-44.475l16.291-314.473

-							c2.896,0.186,15.529,0.305,18.917-0.117l21.582,314.59c1.752,26.448,24.68,46.26,51.158,44.479

-							c26.312-1.854,46.324-24.78,44.438-51.185c0,0-26.717-404.633-26.717-408.172V354.962l94.438-113.107l33.069-39.454

-							c1.816-2.189,3.388-4.531,4.75-6.924h79.359v109.569c0,11.792,9.552,21.344,21.345,21.344h34.905

-							c11.791,0,21.356-9.568,21.356-21.344V41.872C889.494,30.08,879.926,20.528,868.133,20.528z M557.166,258.55

-							c-16.375,14.454-37.77,23.281-61.254,23.281c-21.984,0-42.1-7.665-57.968-20.451l-55.98-65.903h45.502

-							c6.232,34.098,36.021,59.99,72.001,59.99c35.95,0,65.771-25.893,71.985-59.99h39.168

-							C584.742,226.137,557.283,258.634,557.166,258.55z"/>

-					</g>

-				</g>

-				<g id="Shape_66_2_">

-					<g>

-						<path d="M954.828,536.588c-56.789-64.501-140.688-90.534-227.962-90.534c-98.066,0-200.427,32.868-273.302,80.896

-							c-74.257,48.827-112.235,132.598-183.81,183.979c-18.285,13.115-39.022,21.131-60.761,26.91

-							c-10.467,2.791-21.148,5.027-31.92,7.104V308.357l452.396-139.2l-452.39-139.2h-34.8v721.299

-							c-44.104,8.194-86.454,18.807-115.636,53.908c-65.252,78.528,17.427,144.621,98.245,156.216

-							c41.349,5.958,83.18,8.158,125.118,8.158c73.646,0,147.663-6.834,220.396-12.292c111.557-8.444,229.441-23.832,328.891-76.273

-							c75.916-40.06,159.955-92.604,188.977-175.181C1008.665,647.679,996.016,583.375,954.828,536.588z M63.985,866.229

-							c0-25.729,33.368-47.307,78.295-53.152v106.312C97.354,913.572,63.985,891.994,63.985,866.229z M177.08,920.676V811.82

-							c51.727,2.827,92.108,26.141,92.108,54.408C269.188,894.535,228.807,917.849,177.08,920.676z"/>

-					</g>

-				</g>

-				<g id="Shape_119_2_">

-					<g>

-						<path d="M212.583,472.83c72.156,18.039,172.655,54.117,252.531,154.615l11.169,12.896l3.435,3.438

-							c-18.9-59.271-42.096-112.534-69.587-160.634c-48.084-82.46-118.538-168.374-221.605-184.69

-							c-11.155,40.364-6.003,83.326,3.435,116.821C197.112,435.035,203.981,453.94,212.583,472.83z M522.666,640.348l11.184-12.896

-							c79.877-100.498,180.361-136.576,252.531-154.615c8.587-18.89,15.471-37.795,21.459-57.551

-							c9.453-33.495,15.471-76.457,2.604-116.821c-101.354,16.335-173.513,102.23-221.621,184.69

-							c-27.491,48.108-50.668,101.359-69.572,160.633L522.666,640.348z M549.291,645.484l-11.141,13.754l20.604,11.17

-							c115.971-69.573,237.062-62.719,299.779-48.965c13.736-11.156,26.626-24.043,39.513-37.781

-							c21.488-23.205,44.665-55.834,55.819-93.646c-109.085-27.477-211.286,12.902-284.312,58.417

-							C625.748,575.062,586.235,607.705,549.291,645.484z M140.427,621.443c62.704-13.756,183.825-20.608,299.779,48.965

-							l20.622-11.17l-11.155-13.754c-36.944-37.779-76.438-70.43-120.255-97.055c-73.022-45.516-175.238-85.895-284.323-58.417

-							c11.155,37.812,34.346,70.439,55.819,93.646C113.801,597.386,126.688,610.287,140.427,621.443z M982.227,731.396l-3.434-2.584

-							c-16.322-18.896-65.287-57.557-134.009-78.18c-68.728-20.604-158.05-24.057-260.271,38.662

-							c-19.756,11.169-36.93,24.062-57.551,40.378l-9.453,7.727L508.045,746l8.604,7.721

-							c50.691,36.936,103.081,62.725,156.331,77.312c91.062,23.205,208.729,20.621,314.386-94.481

-							C986.514,733.963,984.811,733.963,982.227,731.396z M471.998,729.691c-20.623-16.322-37.795-29.229-57.552-40.396

-							c-101.365-61.838-190.694-59.255-260.281-38.646c-69.572,20.622-115.103,59.27-133.993,78.176l-3.435,2.582l-5.152,5.138

-							c105.636,115.118,223.322,117.688,314.383,94.495c53.251-14.604,105.651-40.378,156.333-77.322l8.586-7.721l-9.438-8.586

-							L471.998,729.691z M577.634,465.124c0-36.944-2.562-73.022-8.587-109.951c-9.438-62.718-28.342-140.012-69.558-199.295

-							c-40.378,59.283-60.136,136.577-69.604,199.295c-6.003,36.929-8.586,73.007-8.586,109.951c0,7.72,72.171,45.53,72.171,159.768

-							h12.021C505.492,510.641,577.634,472.845,577.634,465.124z"/>

-					</g>

-				</g>

-				<g id="Shape_102_2_">

-					<g>

-						<path d="M787.021,203.933c45.07,0,81.694-36.608,81.694-81.618c0-45.126-36.624-81.733-81.694-81.733

-							c-45.062,0-81.688,36.607-81.688,81.733C705.338,167.341,741.962,203.933,787.021,203.933z M975.197,429.71l-230.12-211.492

-							c-7.673-7.491-16.621-13.49-26.498-17.849L539.318,136.5L457.883,18.457c-6.297-8.451-15.926-14.467-27.261-15.926

-							c-21.428-2.402-40.718,13.026-43.354,34.471c-0.979,9.131,1.21,17.781,5.783,25.057l83.146,120.23

-							c3.845,5.055,8.667,8.933,14.468,11.584l96.35,38.033l-158.522,80.971c-21.931,12.794-37.854,34.735-42.182,60.737

-							l0.979,144.817l-146.381,66.013c-16.655,7.756-28.455,24.354-29.167,43.86c-0.497,11.534,3.066,22.206,9.181,30.989

-							c-48.274-18.356-78.949-30.022-78.949-30.022c-14.799-5.688-26.383-17.732-31.454-33.018

-							c-9.032-26.847-38.199-41.298-65.062-32.299c-26.865,9.049-41.332,38.199-32.284,65.096

-							c14.931,44.437,48.655,79.52,92.306,96.118L791,985.868c43.833,16.771,92.271,12.993,132.644-10.24

-							c24.609-14.037,33.017-45.375,18.908-69.969c-14.086-24.646-45.405-33.044-69.979-18.941

-							c-13.605,7.822-30.128,9.064-45.062,3.248c-0.033,0-72.304-27.492-169.88-64.581c17.583-6.099,30.975-21.727,33.492-40.884

-							l26.729-216.646c0.249-0.979,0.249-1.956,0.249-2.917c0.714-15.146-5.284-29.117-15.655-38.812l-115.2-102.148l173.51-85.579

-							l161.181,148.485c7.241,6.994,16.893,11.271,27.729,11.271c21.659-0.216,39.011-17.782,38.795-39.513

-							C988.472,447.078,983.169,436.704,975.197,429.71z M613.528,581.825L590.64,771.971c0,0.961-0.229,2.144-0.229,3.298

-							c-0.437,9.86,2.121,19.097,6.646,27.079C489.553,761.483,365.494,714.3,274.082,679.534c3.663-0.911,7.176-2.144,10.44-3.745

-							l179.377-80.954c12.771-6.978,22.389-19.307,25.531-33.956l-0.479-90.169L613.528,581.825z"/>

-					</g>

-				</g>

-				<g id="Shape_72_2_">

-					<g>

-						<path d="M99.477,483.251c-21.05,0-38.322,17.271-38.322,38.322c0,21.062,17.272,38.073,38.322,38.073

-							c21.066,0,38.075-17.013,38.075-38.073C137.551,500.522,120.543,483.251,99.477,483.251z M630.69,164.219

-							c45.69,0,82.99-37.052,82.99-82.996c0-45.943-37.3-83.242-82.99-83.242c-45.933,0-83.242,37.315-83.242,83.242

-							C547.448,127.15,584.764,164.219,630.69,164.219z M987.798,904.58L852.771,745.188c0,0-42.139-246.194-42.139-246.711

-							c0-0.242-6.335-27.93-6.335-27.93c0.247,0.266-17.009-77.65-30.223-138.573c21.083,12.191,40.104,23.112,41.127,23.607

-							c1.006,2.293,71.58,136.544,71.58,136.544c5.328,9.898,14.203,17.256,24.854,20.555c10.926,3.305,22.354,2.312,32.253-3.052

-							c9.896-5.062,17.259-13.956,20.56-24.86c3.547-10.674,2.54-22.089-2.788-31.981l-77.42-147.449c0,0-3.068-5.328-7.11-9.387

-							c-5.592-5.575-17.767-12.438-17.767-12.438l-150.253-85.52c-19.038-9.65-40.104-12.95-61.172-8.38

-							c-8.631,1.781-16.766,5.081-25.888,10.162c-1.04,0.247-34.275,14.962-53.562,60.147l-77.145,155.317

-							c0,0-117.508,22.848-121.58,23.604c-1.009,0.248-2.025,0.513-2.786,1.023l-109.62-77.669

-							c-24.63-17.272-27.682-69.039-27.929-71.085c-3.052-35.534-23.359-69.022-55.842-92.135

-							c-29.43-20.803-64.964-29.694-97.447-24.366c-25.372,4.322-46.95,17.52-60.659,36.805

-							c-10.684,14.994-16.26,33.025-16.26,52.294c0,0.247,1.534,16.744,1.534,16.744c5.576,32.746,25.636,63.199,55.066,84.266

-							c29.694,21.066,64.965,29.942,97.463,24.366l7.605-1.518c0.775-0.512,49.491-15.49,73.345,0.759

-							c0,0.247,81.989,58.135,103.814,73.604c-2.293,3.553-6.352,11.416-6.088,19.532c0,2.541,0.248,5.081,0.759,7.622

-							c4.312,22.831,26.659,38.062,49.491,33.488l145.685-28.424c0,0,12.438-3.812,17.771-7.622

-							c6.847-4.816,11.928-14.962,11.928-14.962l38.321-77.156c0,0,26.379,124.617,26.891,126.894

-							c-3.036,3.059-119.536,126.663-119.536,126.663l-2.013,2.524c-11.433,10.409-17.784,24.102-17.784,38.586v261.938

-							c0,27.913,22.854,50.497,50.777,50.497c27.666,0,50.514-22.584,50.514-50.497c0,0,0-215.229,0-218.775

-							c10.646-11.168,100.004-105.332,123.842-130.209c2.54,14.715,25.642,147.443,25.642,147.443

-							c2.023,11.685,7.604,22.354,15.979,30.969c0,0.243,160.415,189.599,160.415,189.599c8.876,10.162,21.066,16.497,34.517,17.768

-							c13.463,1.022,26.396-3.3,36.784-11.928c11.685-9.896,17.782-24.35,17.782-38.586

-							C999.725,925.63,995.914,914.214,987.798,904.58z M187.306,333.525c-8.892,12.422-22.601,20.556-39.592,23.591

-							c-23.854,4.058-50.514-2.788-72.85-19.037c-22.584-15.986-37.827-38.817-41.886-62.688l-1.006-11.91

-							c0-12.439,3.3-23.624,10.146-33.258c22.089-30.965,72.586-32.994,112.689-4.57

-							C194.663,254.077,209.378,302.545,187.306,333.525z"/>

-					</g>

-				</g>

-				<g id="Shape_62_2_">

-					<g>

-						<path d="M930.303,749.494c-18.771-8.887-40.047-14.092-62.305-14.092c-22.307,0-43.584,5.221-62.389,14.092

-							c-18.379,8.146-38.9,13.142-60.422,13.142c-21.512,0-42.1-4.985-60.43-13.142c-19.1-8.887-40.391-14.092-62.387-14.092

-							c-22.229,0-43.535,5.221-62.404,14.092c-18.297,8.146-39.109,13.142-60.402,13.142c-21.537,0-42.027-4.985-60.604-13.142

-							c-18.854-8.887-40.081-14.092-62.126-14.092c-22.258,0-43.55,5.221-62.403,14.092c-18.33,8.146-39.164,13.142-60.685,13.142

-							c-21.21,0-42.012-4.985-60.342-13.142c-18.854-8.887-40.146-14.092-62.387-14.092c-22.078,0-43.288,5.221-62.158,14.092

-							c-18.625,8.146-39.147,13.142-60.652,13.142v91.688c21.538,0,42.028-4.861,60.652-13.355

-							c18.87-8.592,40.081-13.828,62.158-13.828c22.242,0,43.534,5.204,62.387,13.828c18.33,8.494,39.148,13.355,60.342,13.355

-							c21.538,0,42.355-4.861,60.685-13.355c18.854-8.592,40.162-13.828,62.403-13.828c22.045,0,43.272,5.204,62.126,13.828

-							c18.575,8.494,39.065,13.355,60.604,13.355c21.293,0,42.105-4.861,60.402-13.355c18.869-8.592,40.184-13.828,62.404-13.828

-							c22.012,0,43.303,5.204,62.387,13.828c18.33,8.494,38.918,13.355,60.43,13.355c21.521,0,42.043-4.861,60.422-13.355

-							c18.805-8.592,40.082-13.828,62.389-13.828c22.258,0,43.533,5.204,62.305,13.828c18.412,8.494,38.918,13.355,60.439,13.355

-							v-91.688C969.221,762.636,948.715,757.646,930.303,749.494z M731.504,476.525c0,65.251,47.658,118.424,116.938,118.424

-							c64.497,0,116.866-53.173,116.866-118.424c0-65.307-52.354-118.229-116.865-118.229

-							C783.795,358.297,731.504,411.225,731.504,476.525z M193.439,670.609c18.297,8.38,39.131,13.354,60.358,13.354

-							c21.505,0,42.339-4.975,60.653-13.354c18.854-8.646,40.146-14.107,62.403-14.107c22.062,0,43.271,5.467,62.142,14.107

-							c18.543,8.38,39.05,13.354,60.571,13.354c21.292,0,42.104-4.975,60.422-13.354c18.871-8.646,40.18-14.107,62.42-14.107

-							c21.979,0,43.271,5.467,62.389,14.107c18.312,8.38,38.885,13.354,60.422,13.354c15.646,0,30.771-2.684,44.979-7.185

-							L595.225,321.016l226.771-41.849c33.271-6.432,57.439-32.862,57.439-66.74c0-37.331-30.062-67.248-66.758-67.248

-							c-2.646,0-5.104,0-7.604,0.229L454.79,209.889c-24.582,5.695-57.15,42.094-38.607,86.789c1.03,2.472,1.97,4.746,2.994,7.201

-							l91.42,166.9L167.679,661.51C176.746,663.703,185.289,666.896,193.439,670.609z"/>

-					</g>

-				</g>

-				<g id="Shape_104_2_">

-					<g>

-						<path d="M341.78,867.945c7.268,38.908,17.563,76.15,30.974,111.188c40.469,10.685,82.926,16.421,126.737,16.421

-							c57.521,0,112.717-9.901,164.087-27.938c-72.299-16.354-125.641-36.612-173.549-54.867

-							C440.699,893.965,396.631,877.219,341.78,867.945z M163.639,864.38c51.695,47.634,113.505,84.354,181.875,106.649

-							c-11.896-33.99-21.026-69.683-27.665-106.546C275.43,859.358,226.116,858.604,163.639,864.38z M314.013,841.446

-							c-3.462-22.951-5.999-46.297-7.729-69.917C180.487,746.83,80.798,701.339,24.748,642.872

-							C47.751,719.285,88.717,787.83,142.692,843.81C212.267,836.287,267.305,836.338,314.013,841.446z M265.316,627.634

-							c11.381,5.937,24.477,11.159,39.338,14.775C316.464,368.811,418.279,92.127,500.862,3.99

-							c-0.463-0.018-0.908-0.052-1.371-0.052c-148.215,0-281.175,65.135-372.037,168.252

-							C81.243,300.951,123.066,553.501,265.316,627.634z M304.843,747.927c-1.354-27.305-1.629-54.867-0.96-82.53

-							c-18.718-4.047-35.069-10.423-49.022-17.688C117.805,576.298,67.6,361.149,92.813,216.276

-							C36.695,296.632,3.665,394.316,3.665,499.748c0,29.585,2.742,58.482,7.713,86.646

-							C48.505,658.916,158.462,717.914,304.843,747.927z M875.334,176.63C791.207,78.86,669.681,14.292,532.881,5.189

-							c-79.892,56.136-192.677,352.531-204.83,641.299C434.837,657.904,614.848,583.223,875.334,176.63z M456.057,790.059

-							c-44.062-2.531-86.303-7.354-126.172-14.188c1.783,23.26,4.395,46.177,7.902,68.683

-							c61.346,9.376,108.945,27.493,160.265,47.033c54.216,20.654,115.479,43.914,203.545,60.852

-							c125.475-56.104,223.312-162.804,267.616-294.187C854.662,769.593,630.463,800.154,456.057,790.059z M890.4,195.005

-							C628.183,602.077,441.213,679.861,327.331,668.994c-0.651,28.021-0.343,55.913,1.097,83.438

-							c40.709,7.308,83.903,12.444,128.938,15.032c187.262,10.816,433.07-25.419,526.217-160.812

-							c7.576-34.438,11.707-70.179,11.707-106.906C995.283,384.82,956.031,279.114,890.4,195.005z"/>

-					</g>

-				</g>

-				<g>

-					<path fill="#231F20" d="M730.357,111.158c0-54.18,38.338-98.086,85.604-98.086c47.33,0,85.688,43.906,85.688,98.086

-						c0,54.248-57.328,141.225-85.688,140.821C788.021,251.498,730.357,165.406,730.357,111.158z"/>

-					<path fill="none" stroke="#231F20" stroke-linecap="square" d="M815.967,259.104

-						c-34.244,105.201,15.764,172.054,15.764,172.054s28.497,123.7-21.446,180.556"/>

-					<path fill="#231F20" d="M219.732,966.231c11.641,26.303,59.109,23.016,67.936,0V640.534v-7.113h14.396l0.069,7.113V966.23

-						c8.758,23.017,56.295,26.304,67.877,0V404.166c26.913,59.867,40.817,124.044,63.146,185.349

-						c1.229,1.78,2.539,3.429,3.837,4.791l-0.896,0.827c0,0,56.787,49.312,68.708,45.953c20.487-0.609,31.434-8.562,35.817-12.802

-						c8.089,2.332,15.135,0.479,18.362-9.318v127.812v34.174v170.617c0,18.834,15.351,34.116,34.238,34.116

-						c18.977,0,34.322-15.282,34.322-34.116V780.952h8.562v170.617c0,18.834,15.331,34.116,34.24,34.116

-						c18.896,0,34.242-15.282,34.242-34.116V780.952v-34.174V606.843l77.126,46.104l0.748-1.171c2.48,0.758,5.078,1.171,7.813,1.171

-						c14.17,0,25.683-11.444,25.683-25.624c0-11.699-7.872-21.579-18.696-24.591l-84.107-62.804l-22.396-6.436H576.715

-						l-17.729,6.298c-28.359,15.616-44.398,20.062-51.503,32.473l-20.556-12.403c-11.646-44.104-58.765-195.483-64.861-206.917

-						c-10.411-19.454-28.64-43.907-54.121-44.31c-12.871-0.147-32.051-0.286-46.297-0.354l-0.069-4.172h-68.625l-0.079,4.241

-						c-10.883,0.069-22.396,0.138-31.026,0.286c-25.476,0.403-43.69,24.856-54.11,44.31c-6.917,12.939-66.44,205.417-67.464,218.223

-						c-0.688,31.37,36.576,46.849,56.374,18.354c22.327-61.308,36.231-125.479,63.085-185.352L219.732,966.231L219.732,966.231z

-						 M296.169,141.633c-40.413,0-73.013,32.462-73.013,72.748c0,39.931,32.6,72.325,73.013,72.325

-						c40.758,0,72.61-32.394,72.61-72.325C368.779,174.095,336.927,141.633,296.169,141.633z M630.895,380.678

-						c-36.015,0-65.062,29.107-65.062,65.279c0,35.818,29.048,64.925,65.062,64.925c36.312,0,64.674-29.104,64.674-64.925

-						C695.562,409.785,667.205,380.678,630.895,380.678z"/>

-				</g>

-				<path fill="#231F20" d="M856.168,447.81c-15.576,121.438-130.451,293.075-275.441,293.075h-43.47v-87.934

-					C522.785,521.12,754.66,403.898,841.683,403.898C856.168,418.508,861.76,404.271,856.168,447.81z M899.637,389.179

-					c0-205.114-188.46-380.967-391.392-380.967l-7.235,0.069l-7.231-0.069C290.832,8.212,102.4,184.065,102.4,389.179

-					c0,86.829,211.935,587.766,398.615,600.538C687.688,976.944,899.637,476.007,899.637,389.179z M145.878,447.81

-					c-5.62-43.534,0-29.302,14.444-43.907c87.05,0,318.924,117.222,304.458,249.053v87.934H421.28

-					C276.329,740.885,161.427,569.243,145.878,447.81z"/>

-			</g>

-			<g id="weather">

-				<g>

-					<path d="M739.76,595.529c10.271,0,19.916,2.457,28.938,7.385c4.521,2.873,8.812,6.37,12.922,10.465

-						c11.506,11.492,17.252,25.649,17.252,42.484c0,16.419-5.746,30.576-17.252,42.471c-11.896,11.09-25.844,16.628-41.859,16.628

-						c-16.42,0-30.562-5.538-42.459-16.628c-11.908-11.895-17.858-26.052-17.858-42.471c0-16.835,5.951-30.992,17.858-42.484

-						c5.33-4.914,10.868-8.812,16.614-11.688C721.689,597.57,730.334,595.529,739.76,595.529z"/>

-					<path d="M695.429,744.511c2.059-2.47,4.537-4.104,7.397-4.927c3.289-2.055,6.979-3.068,11.089-3.068s8.19,1.018,12.312,3.068

-						c1.625,1.65,3.483,3.302,5.524,4.927c4.94,4.927,7.385,11.089,7.385,18.478c0,6.968-2.44,13.13-7.385,18.473

-						c-5.33,4.512-11.284,6.773-17.836,6.773c-7.384,0-13.546-2.266-18.486-6.773c-5.33-5.343-7.995-11.505-7.995-18.473

-						C687.434,755.6,690.099,749.438,695.429,744.511z"/>

-					<path d="M590.181,750.049c0,10.674-3.719,19.903-11.103,27.703c-7.8,6.981-16.822,10.479-27.066,10.479

-						c-10.686,0-19.916-3.497-27.716-10.479c-7.8-7.8-11.7-17.029-11.7-27.703c0-11.076,3.9-20.307,11.7-27.703

-						c3.276-3.271,6.994-5.746,11.089-7.384c4.901-2.873,10.465-4.312,16.627-4.312c6.557,0,12.714,1.638,18.46,4.938

-						c2.86,2.041,5.746,4.303,8.606,6.76C586.462,729.742,590.181,738.973,590.181,750.049z"/>

-					<path d="M637.565,829.467c3.288,2.055,6.366,4.511,9.229,7.384c8.229,7.804,12.324,17.853,12.324,30.188

-						c0,11.466-4.097,21.541-12.324,30.16c-8.203,7.787-18.058,11.695-29.55,11.695s-21.541-3.908-30.16-11.695

-						c-8.203-8.619-12.298-18.694-12.298-30.16c0-12.338,4.095-22.387,12.298-30.188c3.692-3.688,7.801-6.354,12.324-8.008

-						c5.33-2.856,11.271-4.304,17.836-4.304C624.631,824.539,631.417,826.178,637.565,829.467z"/>

-					<path d="M556.926,948.664c4.914,4.939,7.384,11.09,7.384,18.474c0,6.972-2.47,13.13-7.384,18.478

-						c-5.33,4.51-11.297,6.771-17.857,6.771c-7.389,0-13.54-2.263-18.471-6.771c-5.33-5.348-8.002-11.506-8.002-18.478

-						c0-7.384,2.672-13.529,8.002-18.474c2.062-2.457,4.523-4.107,7.395-4.927c3.302-2.041,6.979-3.067,11.076-3.067

-						c4.117,0,8.216,1.026,12.319,3.067C553.026,945.389,554.872,947.039,556.926,948.664z"/>

-					<path d="M461.505,836.24c2.873,2.062,5.746,4.312,8.619,6.771c7.384,7.384,11.083,16.614,11.083,27.703

-						c0,10.688-3.699,19.916-11.083,27.703c-7.793,6.968-16.841,10.479-27.099,10.479c-10.66,0-19.894-3.514-27.69-10.479

-						c-7.812-7.787-11.713-17.017-11.713-27.703c0-11.089,3.896-20.317,11.713-27.703c3.283-3.272,6.981-5.746,11.063-7.384

-						c4.934-2.887,10.479-4.314,16.627-4.314C449.604,831.312,455.753,832.963,461.505,836.24z"/>

-					<path d="M197.174,553.188c4.842,0,9.692,1.226,14.534,3.644c1.931,1.938,4.115,3.888,6.539,5.812

-						c5.811,5.824,8.716,13.095,8.716,21.806c0,8.239-2.905,15.508-8.716,21.812c-6.305,5.33-13.325,7.995-21.073,7.995

-						c-8.729,0-15.997-2.665-21.808-7.995c-6.292-6.306-9.445-13.569-9.445-21.812c0-8.711,3.153-15.979,9.445-21.806

-						c2.424-2.896,5.33-4.849,8.73-5.812C187.964,554.41,192.338,553.188,197.174,553.188z"/>

-					<path d="M452.978,555.373c13.562,13.572,20.349,30.303,20.349,50.154c0,19.369-6.786,36.088-20.348,50.141

-						c-14.048,13.078-30.521,19.617-49.404,19.617c-19.385,0-36.107-6.539-50.161-19.617

-						c-14.053-14.053-21.062-30.771-21.062-50.141c0-19.854,7.011-36.582,21.062-50.154c6.306-5.812,12.845-10.414,19.631-13.807

-						c9.21-4.836,19.37-7.271,30.53-7.271c12.097,0,23.498,2.912,34.147,8.725C443.064,546.416,448.141,550.523,452.978,555.373z"/>

-					<path d="M379.579,734.878c1.937,1.938,4.127,3.888,6.539,5.824c5.814,5.812,8.723,13.078,8.723,21.801

-						c0,8.229-2.905,15.496-8.723,21.788c-6.292,5.344-13.312,7.995-21.073,7.995c-8.704,0-15.971-2.651-21.795-7.995

-						c-6.305-6.292-9.458-13.559-9.458-21.788c0-8.723,3.152-15.989,9.458-21.801c2.411-2.925,5.33-4.862,8.717-5.824

-						c3.88-2.418,8.229-3.64,13.078-3.64C369.887,731.238,374.729,732.46,379.579,734.878z"/>

-					<path d="M192.078,690.547c7.755,0,15.022,1.951,21.808,5.812c3.387,2.431,6.786,5.097,10.173,7.994

-						c8.723,8.724,13.078,19.614,13.078,32.709c0,12.606-4.355,23.505-13.078,32.707c-9.197,8.229-19.864,12.352-31.98,12.352

-						c-12.59,0-23.497-4.121-32.695-12.352c-9.204-9.202-13.806-20.101-13.806-32.707c0-13.095,4.602-23.985,13.806-32.709

-						c3.874-3.873,8.236-6.784,13.085-8.713C178.285,692.238,184.812,690.547,192.078,690.547z"/>

-				</g>

-				<path d="M165.539,210.012c9.678,0,19.006,0.845,27.989,2.6c0-2.444,0-4.849,0-7.267c0-54.952,21.255-101.934,63.759-140.999

-					c42.848-39.04,94.328-58.565,154.46-58.565s111.443,19.526,153.94,58.565c5.877,5.174,11.411,10.712,16.589,16.601

-					c8.632,9.659,16.064,19.864,22.278,30.576c4.498,7.254,8.479,14.859,11.938,22.802c3.458,7.969,6.228,16.419,8.294,25.389

-					c17.265-5.863,35.751-8.788,55.459-8.788c46.645,0,86.555,15.184,119.729,45.591c31.101,28.691,47.688,62.557,49.769,101.622

-					c0,2.392,0,4.992,0,7.761c0,2.405,0,4.836,0,7.254c-0.364,3.107-0.702,6.383-1.04,9.841c11.414-4.823,23.842-7.241,37.311-7.241

-					c24.882,0,46.15,8.099,63.769,24.349c5.876,5.187,10.713,10.881,14.521,17.095c7.931,12.103,11.908,25.766,11.908,40.95

-					c0,22.824-8.813,42.325-26.43,58.591c-3.106,2.756-21.774,5.174-55.991,7.254c-255.352-14.456-510.715-14.456-766.082,0

-					c-30.063-6.214-51.663-15.379-64.786-27.495c-28.34-25.909-42.51-57.175-42.51-93.809c0-36.621,14.17-67.886,42.51-93.809

-					C91.243,222.973,125.459,210.012,165.539,210.012z"/>

-			</g>

-		</g>

-		<g id="Layer_2" display="inline">

-			<g>

-				<path d="M526.923,683.594c-4.379,1.785-8.624,4.058-12.604,6.96c0,0-24.979,18.234-24.998,18.248

-					c-37.046,23.867-85.829-16.771-115.271-41.513c-51.757-43.492-86.174-93.638-112.446-155.558

-					c-13.26-31.261-7.401-68.262,19.107-87.61l25.035-18.276c7.236-5.279,12.873-11.946,16.938-19.341

-					c0.312-0.548,0.604-1.116,0.896-1.679c0.354-0.701,0.729-1.393,1.058-2.108c16.877-35.828,2.646-99.832-38.491-158.604

-					c-49.215-70.314-118.652-107.01-157.018-83.714c-4.233,1.762-8.339,3.979-12.194,6.794L81.74,172.881

-					c-6.987,5.101-13.5,11.177-19.323,17.55c-11.683,12.782-20.792,27.815-27.031,43.952c-11.192,28.961-12.741,60.659-8.94,91.228

-					c6.333,50.953,26.219,99.717,48.612,145.512c53.494,109.391,117.015,209.58,201.69,297.451

-					c43.627,45.272,102.77,110.104,151.493,149.942c18.749,15.332,38.436,29.521,59.303,41.844

-					c38.99,23.019,83.437,38.169,129.062,31.276c12.522-1.893,26.509-4.637,38.241-9.591c1.695-0.671,3.363-1.429,5.009-2.267

-					c1.396-0.686,2.339-1.19,2.813-1.46c0.089-0.053,0.178-0.1,0.264-0.146c0.083-0.048,0.125-0.072,0.119-0.078

-					c1.662-0.979,3.297-2.039,4.888-3.198l35.193-25.688c12.354-9.021,20.157-21.997,23.076-35.958

-					c8.803-37.051-6.507-93.32-43.008-145.479C634.305,697.918,565.441,661.226,526.923,683.594z M238.01,377.108

-					c-1.679-0.741-3.393-1.498-5.139-2.269c-1.691-0.889-3.414-1.794-5.165-2.715c-0.875-0.459-1.759-0.924-2.65-1.392

-					c-0.859-0.525-1.723-1.053-2.596-1.585c-1.743-1.068-3.51-2.152-5.304-3.25c-6.94-4.741-14.147-9.959-20.899-16.186

-					c-6.906-6.05-13.442-12.951-19.745-20.232c-3.03-3.746-6.23-7.406-9.038-11.398l-4.337-5.902l-4.084-6.098

-					c-5.31-8.222-10.146-16.75-14.317-25.44c-4.099-8.722-7.556-17.575-10.249-26.347c-5.474-17.523-7.401-34.853-6.112-49.481

-					c0.717-7.309,2.287-13.912,4.417-19.479c2.137-5.574,4.841-10.07,7.429-13.479c2.691-3.333,5.135-5.67,6.914-7.115

-					c1.811-1.408,2.776-2.16,2.776-2.16s-0.585,1.211-1.683,3.482c-0.591,1.017-1.059,2.516-1.669,4.061

-					c-0.316,0.765-0.563,1.648-0.791,2.589c-0.252,0.884-0.52,1.823-0.803,2.815c-0.373,2.08-0.86,4.172-1.065,6.542

-					c-0.174,1.13-0.19,2.374-0.242,3.616c-0.093,1.236-0.139,2.479-0.001,3.642c0.041,0.574,0.081,1.158,0.122,1.752l0.052,1.061

-					l0.007,1.231c0.004,0.827,0.008,1.666,0.014,2.516l0.003,0.641c-0.12,0.462,0.161-0.54,0.137-0.412l0.01,0.067l0.02,0.134

-					l0.04,0.268l0.161,1.077c0.212,1.405,0.43,2.847,0.652,4.323c0.28,1.458,0.568,2.953,0.86,4.478

-					c0.834,3.079,1.454,6.159,2.492,9.393c0.407,1.588,1.046,3.219,1.587,4.867c0.516,1.643,1.016,3.288,1.706,4.977

-					c1.242,3.336,2.693,6.754,4.037,10.214c1.575,3.427,3.186,6.929,4.822,10.489c3.502,7.027,7.179,14.252,11.412,21.37

-					c2.094,3.583,4.147,7.198,6.486,10.704l3.25,5.099l1.562,2.455l0.775,1.232l1.049,1.505c2.504,3.574,5.01,7.147,7.504,10.706

-					c2.299,3.562,5.138,6.625,7.447,10.115c2.464,3.341,5.095,6.507,7.598,9.719c2.557,3.136,5.003,6.402,7.685,9.253

-					c1.264,1.515,2.475,3.114,3.764,4.558c1.307,1.433,2.603,2.851,3.884,4.255c2.485,2.958,5.093,5.539,7.609,8.251

-					c2.589,2.429,4.979,5.335,7.562,7.476c1.272,1.135,2.47,2.399,3.699,3.581c1.261,1.083,2.499,2.146,3.711,3.188

-					c4.859,4.387,9.637,7.867,14.18,11.073c2.246,1.411,4.487,2.868,6.611,4.083c2.211,1.15,4.243,2.206,6.077,3.161

-					c1.931,0.849,3.656,1.609,5.156,2.27c1.643,0.727,3.276,0.939,4.479,1.321c1.232,0.298,2.197,0.635,2.843,0.833

-					c0.646,0.204,0.979,0.31,0.979,0.31s-1.199,0.243-3.448,0.696c-1.132,0.178-2.496,0.619-4.157,0.726

-					c-1.66,0.115-3.567,0.248-5.704,0.397c-2.137,0.017-4.506-0.185-7.084-0.282c-2.567-0.232-5.314-0.778-8.264-1.199

-					c-2.882-0.76-6.001-1.403-9.18-2.439C244.718,379.678,241.327,378.699,238.01,377.108z M686.726,923.926

-					c0.681,0.063,1.024,0.1,1.024,0.1s-1.121,0.485-3.225,1.404c-1.068,0.41-2.312,1.129-3.91,1.584

-					c-1.602,0.461-3.438,0.994-5.491,1.588c-2.087,0.469-4.445,0.771-6.987,1.218c-2.559,0.312-5.355,0.355-8.33,0.563

-					c-2.978-0.136-6.163-0.105-9.485-0.452c-3.312-0.455-6.834-0.696-10.411-1.557c-1.798-0.369-3.633-0.749-5.503-1.135

-					c-1.84-0.517-3.713-1.038-5.619-1.568c-0.954-0.267-1.915-0.535-2.883-0.805c-0.949-0.33-1.906-0.666-2.872-1.002

-					c-1.928-0.68-3.887-1.365-5.869-2.064c-7.781-3.172-15.926-6.76-23.837-11.427c-8.022-4.46-15.864-9.832-23.562-15.626

-					c-3.749-3.021-7.646-5.93-11.23-9.24l-5.483-4.854l-5.272-5.104c-6.92-6.923-13.444-14.24-19.35-21.858

-					c-5.844-7.663-11.083-15.595-15.562-23.603c-9.035-15.979-14.565-32.517-16.38-47.088c-0.835-7.296-0.688-14.083,0.222-19.975

-					c0.916-5.896,2.611-10.86,4.423-14.74c1.934-3.823,3.827-6.623,5.267-8.408c1.475-1.759,2.26-2.697,2.26-2.697

-					s-0.319,1.311-0.913,3.76c-0.363,1.116-0.505,2.685-0.777,4.321c-0.146,0.813-0.202,1.729-0.228,2.697

-					c-0.062,0.916-0.125,1.89-0.194,2.919c0.072,2.115,0.039,4.263,0.336,6.621c0.069,1.141,0.313,2.361,0.527,3.585

-					c0.169,1.229,0.386,2.453,0.763,3.561c0.161,0.558,0.325,1.115,0.489,1.688l0.271,1.025l0.27,1.202

-					c0.177,0.811,0.354,1.626,0.541,2.456l0.139,0.624c-0.02,0.478,0.044-0.555,0.047-0.427l0.022,0.062l0.05,0.125l0.095,0.256

-					l0.384,1.019c0.503,1.329,1.021,2.692,1.549,4.088c0.58,1.368,1.175,2.771,1.78,4.198c1.462,2.833,2.718,5.714,4.409,8.658

-					c0.732,1.468,1.701,2.928,2.575,4.426c0.853,1.496,1.688,3,2.717,4.504c1.914,3.002,4.052,6.038,6.095,9.14

-					c2.263,3.02,4.569,6.103,6.92,9.238c4.899,6.134,10.017,12.421,15.65,18.489c2.8,3.062,5.569,6.166,8.594,9.102l4.248,4.302

-					l2.045,2.07l1.019,1.04l1.341,1.252c3.202,2.969,6.404,5.936,9.593,8.891c2.994,3,6.416,5.396,9.404,8.32

-					c3.112,2.746,6.352,5.288,9.474,7.902c3.16,2.527,6.238,5.205,9.46,7.428c1.556,1.219,3.074,2.522,4.643,3.666

-					c1.578,1.124,3.141,2.239,4.688,3.344c3.054,2.367,6.146,4.346,9.175,6.469c3.045,1.828,5.99,4.165,8.968,5.716

-					c1.479,0.844,2.919,1.826,4.368,2.724c1.461,0.794,2.896,1.572,4.301,2.337c5.672,3.268,11.073,5.663,16.188,7.844

-					c2.492,0.905,4.989,1.856,7.323,2.6c2.403,0.661,4.612,1.267,6.604,1.812c2.065,0.426,3.912,0.806,5.521,1.136

-					c1.756,0.361,3.398,0.228,4.656,0.347C685.039,923.742,686.055,923.87,686.726,923.926z"/>

-				<path d="M544.217,491.371c0-32.957-26.712-59.672-59.645-59.672c-32.955,0-59.672,26.716-59.672,59.672

-					s26.717,59.67,59.672,59.67C517.505,551.041,544.217,524.327,544.217,491.371z"/>

-				<path d="M487.68,4.391c-1.01-0.103-2.036-0.157-3.07-0.157c-16.479,0-29.836,13.358-29.836,29.836s13.355,29.836,29.836,29.836

-					h0.001v0.036c114.771,0,222.691,42.166,303.88,123.382c81.195,81.228,125.915,189.218,125.915,304.081

-					c0,62.366-13.036,122.485-38.746,178.691l54.264,24.822c28.354-61.979,44.154-130.897,44.154-203.517

-					C974.075,221.969,756.537,6.016,487.68,4.391z"/>

-				<path d="M467.543,194.92c-22.248,0-43.945,2.361-64.854,6.846l0.034,0.173c-12.823,3.341-22.306,14.968-22.306,28.84

-					c0,16.478,13.359,29.836,29.836,29.836c2.771,0,5.443-0.406,7.989-1.114c16.123-3.244,32.688-4.909,49.298-4.909

-					c136.761,0,248.021,111.326,248.021,248.165c0,41.945-10.641,83.375-30.771,119.812l0.019,0.009

-					c-2.443,4.329-3.854,9.312-3.854,14.638c0,16.479,13.357,29.836,29.836,29.836c11.413,0,21.322-6.413,26.34-15.825

-					c24.28-44.024,38.104-94.634,38.104-148.47C775.238,332.741,637.438,194.92,467.543,194.92z"/>

-			</g>

-		</g>

-		<path display="inline" d="M456.415,678.788c0,0,2.938-387.358,292.077-511.137L591.166,49.354h404.861v404.662l-96.785-121.05

-			C899.242,332.966,704.182,224.591,456.415,678.788z M6.637,948.5V139.176h449.778v172.287H178.913v464.762h644.838V633.894

-			h172.276V948.5H6.637z"/>

-	</g>

-	<g id="Layer_2_1_">

-		<path display="inline" d="M767.914,560.297c49.297,0,89.299,39.841,89.299,89.139c0,49.299-40.002,88.994-89.299,88.994

-			c-49.459,0-89.318-39.695-89.318-88.994C678.596,600.138,718.455,560.297,767.914,560.297z M234.379,560.297

-			c49.172,0,89.299,39.841,89.299,89.139c0,49.299-40.127,88.994-89.299,88.994c-49.459,0-89.442-39.695-89.442-88.994

-			C144.937,600.138,184.92,560.297,234.379,560.297z M636.926,387.02c-19.687-16.017-55.11-47.467-104.569-66.857

-			c-50.5-19.849-182.261-16.789-188.522-16.789c-1.812,0-17.712-1.678-22.576,12.508c-5.205,14.814-20.315,63.968-25.035,79.231

-			c-3.518,11.145,0.144,23.509,16.167,23.509h151.592H638.92C648.232,418.471,671.274,415.105,636.926,387.02z M231.185,314.366

-			c-12.831,5.339-37.399,21.822-47.162,29.611c-8.399,6.865-79.842,74.646-32.662,74.646h56.01

-			c24.119,0,30.526-10.382,36.018-23.509c4.899-12.051,27.35-69.765,30.688-79.231C280.788,297.568,257.745,303.221,231.185,314.366

-			z M978.42,615.392c-3.213,5.798-20.764,19.851-29.02,26.704c-9.295,7.34-21.967,22.611-28.086,29.61

-			c-3.805,4.45-23.49,7.034-31.745,7.034c14.501-75.267-35.712-154.945-121.979-154.945c-101.664,0-135.527,90.986-127.9,152.057

-			c0.756,4.396-1.221,9.906-10.229,9.906h-63.816H407.486c-35.856,0-40.289-38.925-56.619-82.121

-			c-11.611-30.849-50.231-79.842-116.918-79.842c-41.832,0-82.749,19.238-105.199,55.418

-			c-20.297,32.984-21.212,76.021-22.594,91.596c-6.245-0.628-42.586-8.396-57.983-17.405c-11.45-6.712-19.866-17.267-23.976-25.196

-			c-9.637-18.467-15.416-51.9-17.103-79.357c0-26.271,20.62-27.798,27.17-46.576c6.425-18.772-7.932-61.055,2.746-92.045

-			c10.085-29.458,25.053-38.917,30.239-43.808c24.712-23.662,63.026-51.899,102.723-70.824c13.729-6.568-8.686-7.035-15.434-14.509

-			c-4.253-4.576-6.245-11.754-4.702-14.348c1.059-1.831,2.89-1.525,28.534-1.525c7.322,0,11.001,0,27.314-0.924

-			c4.576-0.144,11.145-2.593,16.349-3.203c26.094-3.509,70.061-3.509,114.942-3.509c122.876,0,186.692,16.483,222.871,28.696

-			c12.67,4.28,9.297,5.958,26.256,16.035c9.764,5.949,45.799,30.221,56.926,38.314c48.096,34.645,81.224,61.519,81.224,61.519

-			c5.958,6.104,87.469,17.553,179.514,50.52c13.585,4.89,39.696,19.085,52.043,38.934c4.146,6.561,16.654,21.374,25.809,34.043

-			c9.009,12.67,13.729,25.492,14.519,30.681C997.801,569.755,987.268,599.061,978.42,615.392z"/>

-	</g>

-	<g id="Layer_3">

-		<polygon display="inline" points="123.801,4.172 123.801,992.159 879.045,498.166 		"/>

-	</g>

-	<g id="wrench">

-		<path display="inline" d="M982.192,178.811L826.938,334.066H664.679V169.273L818.003,16.01

-			c-22.576-6.822-46.118-11.59-70.867-11.59c-136.543,0-247.25,110.768-247.25,247.25c0,38.088,9.296,73.703,24.749,105.998

-			L29.531,852.65c-14.85,14.971-24.146,35.494-24.146,58.432c0,45.395,36.822,82.338,82.457,82.338

-			c22.817,0,43.462-9.176,58.19-24.146L641.258,474.23c32.113,15.332,67.85,24.688,105.878,24.688

-			c136.543,0,247.25-110.768,247.25-247.25C994.386,226.135,989.436,201.99,982.192,178.811z"/>

-	</g>

-	<path d="M801.92,543.083C899.197,596.99,975.73,692.571,994.9,806.324c0,102.729-83.347,186.076-186.075,186.076h-85.77

-		c37.009-32.315,64.146-75.05,76.925-124.052h8.845c34.283,0,62.023-27.741,62.023-62.024

-		c-15.989-61.781-58.238-113.631-113.024-147.006c-28.894-50.094-67.84-95.279-115.146-131.804

-		c7.117-12.205,13.387-24.955,18.747-38.069c49.487-16.385,85.376-62.417,85.376-117.295V248.1

-		c0-54.937-35.889-100.972-85.406-117.295c-20.229-49.184-53.362-91.251-94.311-123.99C585.014,2.666,603.548,0,622.75,0

-		c137.013,0,248.1,111.087,248.1,248.1v124.05C870.85,438.596,844.381,498.562,801.92,543.083z M560.725,992.4H188.575

-		C85.786,992.4,2.5,909.055,2.5,806.324l0,0C21.671,692.571,98.203,596.99,195.541,543.083

-		c-42.521-44.521-68.99-104.487-68.99-170.933V248.1C126.55,111.087,237.638,0,374.65,0c137.012,0,248.1,111.087,248.1,248.1v124.05

-		c0,66.446-26.47,126.413-68.931,170.933c97.277,53.907,173.81,149.488,192.98,263.241l0,0

-		C746.801,909.055,663.454,992.4,560.725,992.4z M498.7,372.15V248.1c0-68.476-55.575-124.049-124.05-124.049

-		c-68.477,0-124.05,55.573-124.05,124.049v124.05c0,68.476,55.574,124.049,124.05,124.049

-		C443.125,496.199,498.7,440.626,498.7,372.15z M622.75,806.324C595.068,699.477,490.099,620.25,374.65,620.25l0,0l0,0

-		c-115.509,0-220.419,79.227-248.101,186.074l0,0c0,34.284,27.802,62.024,62.025,62.024h372.148

-		C595.009,868.35,622.75,840.608,622.75,806.324L622.75,806.324z"/>

-	<path d="M647.504,998.062H274.168c-103.117,0-186.668-83.611-186.668-186.668l0,0c19.232-114.115,96.008-210.003,193.656-264.082

-		c-42.656-44.662-69.21-104.818-69.21-171.478V251.391C211.945,113.941,323.387,2.5,460.836,2.5s248.891,111.441,248.891,248.891

-		v124.445c0,66.658-26.555,126.814-69.149,171.477c97.588,54.08,174.362,149.968,193.596,264.082l0,0

-		C834.172,914.451,750.561,998.062,647.504,998.062z M585.281,375.836V251.391c0-68.693-55.752-124.445-124.445-124.445

-		c-68.694,0-124.445,55.752-124.445,124.445v124.445c0,68.693,55.751,124.445,124.445,124.445

-		C529.529,500.281,585.281,444.529,585.281,375.836z M709.727,811.395c-27.77-107.188-133.073-186.668-248.891-186.668l0,0l0,0

-		c-115.877,0-221.121,79.48-248.891,186.668l0,0c0,34.394,27.891,62.224,62.223,62.224h373.336

-		C681.896,873.617,709.727,845.787,709.727,811.395L709.727,811.395z"/>

-	<path d="M145.955,419.761L21.881,295.688C9.765,283.6,3.707,267.698,3.707,251.825c0-15.902,6.058-31.775,18.174-43.861

-		L145.955,83.892c17.751-17.66,44.407-23.021,67.61-13.48c23.143,9.572,38.289,32.291,38.289,57.342v62.098h62.036v124.072h-62.036

-		v61.977c0,25.051-15.146,47.77-38.289,57.342C190.362,442.753,163.706,437.481,145.955,419.761z M854.045,580.214l124.073,124.074

-		c12.116,12.055,18.175,27.928,18.175,43.861c0,15.872-6.059,31.743-18.175,43.86L854.045,916.085

-		c-17.751,17.689-44.468,22.961-67.61,13.449c-23.202-9.572-38.288-32.291-38.288-57.312v-62.034H686.11V686.112h62.036v-62.037

-		c0-25.08,15.086-47.799,38.288-57.371C809.577,557.192,836.294,562.524,854.045,580.214z M437.963,686.112H500v124.073h-62.037

-		V686.112z M375.927,189.851h62.036v124.072h-62.036V189.851z M313.89,562.04H65.743c-34.229,0-62.036,27.807-62.036,62.035v248.146

-		c0,34.353,27.807,62.037,62.036,62.037H313.89c34.229,0,62.037-27.686,62.037-62.037V624.075

-		C375.927,589.847,348.119,562.04,313.89,562.04z M251.854,810.188H127.78V686.112h124.073L251.854,810.188L251.854,810.188z

-		 M500,189.851h62.036v124.072H500V189.851z M934.256,65.776H686.109c-34.289,0-62.036,27.777-62.036,62.037V375.96

-		c0,34.26,27.747,62.037,62.036,62.037h248.146c34.29,0,62.037-27.777,62.037-62.037V127.813

-		C996.293,93.554,968.546,65.776,934.256,65.776z M872.22,313.923H748.146V189.851H872.22V313.923z M562.036,686.112h62.037v124.073

-		h-62.037V686.112z"/>

-	<path d="M996,499c0,20.92-1.696,41.534-4.238,61.817c-0.636,4.904-1.453,9.868-2.24,14.773

-		c-2.692,16.953-6.114,33.784-10.442,50.192c-0.818,2.907-1.454,5.874-2.211,8.75c-11.808,41.02-28.64,80.044-49.951,116.038

-		c-42.625,72.323-102.99,132.658-175.313,175.344c-35.995,21.313-74.986,38.084-116.037,49.921c-2.906,0.757-5.813,1.394-8.749,2.21

-		c-16.439,4.329-33.149,7.75-50.163,10.445c-4.903,0.757-9.869,1.634-14.805,2.21C541.534,993.304,520.948,995,500,995l0,0l0,0

-		c-20.949,0-41.535-1.696-61.818-4.238c-5.024-0.636-9.868-1.453-14.834-2.24c-17.014-2.692-33.784-6.114-50.224-10.442

-		c-2.815-0.819-5.843-1.454-8.688-2.211c-41.11-11.808-80.042-28.638-116.067-49.951C176.075,883.292,115.71,822.928,72.964,750.605

-		c-21.282-35.997-38.054-74.987-49.83-116.039c-0.787-2.875-1.453-5.813-2.24-8.749c-4.359-16.439-7.75-33.149-10.384-50.163

-		c-0.757-4.903-1.635-9.838-2.331-14.805C5.695,540.534,4,519.92,4,499l0,0l0,0c0-20.919,1.695-41.535,4.238-61.817

-		c0.605-5.025,1.453-9.868,2.301-14.834c2.634-17.014,6.055-33.785,10.444-50.224c0.757-2.816,1.423-5.843,2.24-8.689

-		c11.777-40.99,28.579-80.014,49.861-116.04c42.686-72.292,103.111-132.687,175.404-175.372

-		c35.935-21.222,74.958-38.024,115.978-49.8c2.876-0.817,5.843-1.482,8.688-2.241c16.407-4.389,33.239-7.75,50.192-10.443

-		c4.965-0.726,9.81-1.636,14.864-2.33C458.465,4.696,479.051,3,500,3l0,0l0,0c20.948,0,41.534,1.696,61.818,4.209

-		c4.903,0.634,9.869,1.482,14.772,2.33c16.953,2.633,33.784,6.054,50.192,10.443c2.907,0.759,5.874,1.424,8.75,2.241

-		C676.554,34,715.578,50.802,751.572,72.024c72.322,42.745,132.658,103.171,175.344,175.403

-		c21.312,36.025,38.084,74.956,49.921,116.067c0.756,2.847,1.394,5.813,2.21,8.689c4.329,16.439,7.75,33.209,10.445,50.224

-		c0.757,4.965,1.634,9.777,2.209,14.803C994.304,457.465,996,478.081,996,499L996,499L996,499z M211.888,386.291l-92.183-92.243

-		C86.586,355.354,66,424.407,66,499c0,74.594,20.586,143.678,53.705,204.952l92.183-92.154C198.174,576.742,190,538.93,190,499

-		C190,459.099,198.174,421.317,211.888,386.291z M500,933c74.594,0,143.678-20.525,204.951-53.645l-92.152-92.213

-		C577.742,800.765,539.931,809,500,809c-39.87,0-77.682-8.235-112.738-21.948l-92.273,92.243C356.353,912.475,425.406,933,500,933z

-		 M500,65c-74.594,0-143.647,20.586-204.951,53.705l92.273,92.183C422.318,197.173,460.13,189,500,189

-		c39.931,0,77.742,8.173,112.738,21.888l92.151-92.183C643.678,85.586,574.594,65,500,65z M738.828,435.578L738.828,435.578

-		C716.092,349.874,649.188,283,563.453,260.172l0,0l0,0c-8.234-2.148-16.469-3.966-25.066-5.329

-		C525.854,252.604,513.198,251,500,251c-13.199,0-25.854,1.604-38.447,3.844c-8.477,1.362-16.802,3.181-24.976,5.329l0,0l0,0

-		C350.873,283,283.999,349.934,261.173,435.578l0,0l0,0c-2.149,8.173-3.966,16.5-5.328,25.006C253.604,473.177,252,485.831,252,499

-		c0,13.17,1.604,25.823,3.845,38.387c1.302,8.6,3.179,16.771,5.328,25.066l0,0l0,0c22.735,85.673,89.761,152.548,175.404,175.313

-		l0,0l0,0c8.174,2.148,16.499,3.937,24.976,5.326C474.146,745.396,486.801,747,500,747c13.198,0,25.854-1.604,38.387-3.844

-		c8.599-1.303,16.771-3.182,25.066-5.328l0,0l0,0c85.673-22.769,152.548-89.643,175.312-175.375l0,0l0,0

-		c2.149-8.234,3.938-16.468,5.328-25.037C746.396,524.823,748,512.17,748,499c0-13.169-1.604-25.823-3.845-38.416

-		C742.763,452.077,740.977,443.75,738.828,435.578L738.828,435.578z M880.355,294.048l-92.213,92.274

-		C801.766,421.317,810,459.099,810,499c0,39.93-8.234,77.742-21.948,112.738l92.243,92.15C913.475,642.678,934,573.594,934,499

-		C934,424.407,913.475,355.354,880.355,294.048z"/>

-	<path d="M962.252,997.5H35c0-119.822,140.166-219.904,331.177-252.59v-49.025c-78.83-45.965-132.465-130.401-132.465-228.244

-		v-6.698c-38.444-13.796-66.247-49.543-66.247-92.687c0-43.115,27.803-78.891,66.217-92.627v-6.699

-		C233.712,122.609,352.291,4,498.611,4c146.319,0,264.93,118.609,264.93,264.93v6.699c38.414,13.736,66.217,49.512,66.217,92.627

-		c0,43.144-27.803,78.891-66.217,92.687v6.698c0,97.843-53.635,182.279-132.465,228.152v49.027

-		C822.178,777.596,962.252,877.678,962.252,997.5z"/>

-	<g id="plus">

-		<polygon display="inline" points="998.5,374.438 624.062,374.438 624.062,0 374.438,0 374.438,374.438 0,374.438 0,624.062 

-			374.438,624.062 374.438,998.5 624.062,998.5 624.062,624.062 998.5,624.062 		"/>

-	</g>

-	<g id="play">

-		<polygon display="inline" points="123,0 871.875,499.25 123,998.5 		"/>

-	</g>

-	<path d="M375.312,871.562L3.5,995.5l123.938-371.812L747.125,4L995,251.875L375.312,871.562z M127.438,871.562l185.906-61.97

-		L189.406,685.656L127.438,871.562z M251.375,623.688l123.938,123.938l371.812-371.812L623.188,251.875L251.375,623.688z"/>

-	<g display="inline">

-		<path d="M1000.392,889.434c0,58.879-47.754,106.633-106.635,106.633H110.96c-58.88,0-106.635-47.754-106.635-106.633V106.635

-			C4.325,47.756,52.08,0,110.96,0h782.797c58.881,0,106.635,47.756,106.635,106.635V889.434z M907.011,96.803

-			c0-1.9-1.52-3.42-3.404-3.42H101.096c-1.869,0-3.389,1.52-3.389,3.42v802.479c0,1.855,1.52,3.404,3.389,3.404h802.511

-			c1.885,0,3.404-1.549,3.404-3.404V96.803z"/>

-	</g>

-	<polygon display="inline" points="197.159,726.305 121.166,672.016 308.84,409.272 429.077,529.512 557.354,305.056 

-		683.657,462.909 804.335,269.763 883.551,319.22 692.958,624.107 570.243,470.69 449.535,682.016 320.756,553.252 	"/>

-</g>

-<g id="Layer_2_2_" display="none">

-	<path display="inline" d="M966.363,880.234c-57.816-163.145-213.17-280.393-396.236-280.393v140.314

-		c0,25.883-14.287,49.488-37.055,61.711s-50.491,10.965-71.94-3.416L40.483,517.969c-19.546-13.104-31.29-34.914-31.29-58.31

-		c0-23.501,11.744-45.338,31.23-58.384l420.62-280.498c21.538-14.29,49.203-15.696,71.969-3.43

-		c22.828,12.148,37.115,35.978,37.115,61.845v140.182c232.314,0,420.68,188.411,420.68,420.783

-		C990.807,789.225,981.85,836.377,966.363,880.234z"/>

-</g>

-<g id="Layer_3_1_" display="none">

-	<g id="check_x5F_alt" display="inline">

-		<path d="M498.227,3C224.77,3,3,224.741,3,498.227s221.741,495.225,495.227,495.225c273.456,0,495.225-221.739,495.225-495.225

-			S771.713,3,498.227,3z M421.498,726.737l-227.861-227.89l87.52-87.535l140.311,140.353l297.652-297.65l87.535,87.535

-			L421.498,726.737z"/>

-	</g>

-	<g id="paperclip" display="inline">

-		<path d="M495,515.923c-2.939,0-5.701-1.147-7.777-3.228c-2.078-2.077-3.223-4.836-3.223-7.776c0.002-2.938,1.145-5.7,3.223-7.776

-			l11.136-10.895c2.993-2.994,8.278-3.006,11.297,0.016c3.115,3.121,3.115,8.195,0,11.312l-10.021,9.775

-			c-1.93,1.931-5.102,1.935-7.051-0.018c-1.949-1.953-1.949-5.123,0-7.072l3.879-3.879l2.828,2.828l-3.879,3.879

-			c-0.256,0.258-0.293,0.555-0.293,0.707c0,0.154,0.037,0.451,0.293,0.709c0.512,0.51,0.902,0.51,1.414,0l10.016-9.777

-			c1.543-1.541,1.543-4.078-0.016-5.639c-1.512-1.512-4.145-1.512-5.656,0l-11.135,10.896c-1.306,1.308-2.035,3.064-2.035,4.933

-			c0,1.871,0.729,3.629,2.051,4.949c2.645,2.647,7.254,2.647,9.898,0l5-5l2.826,2.827l-5,5

-			C500.699,514.773,497.938,515.923,495,515.923z"/>

-	</g>

-</g>

-<g id="Layer_4">

-	<g id="paperclip_1_">

-		<path d="M407.745,991.438c-90.488,0-175.534-35.33-239.442-99.374c-63.984-63.953-99.238-148.892-99.238-239.427

-			c0.06-90.473,35.254-175.505,99.238-239.413L511.162,77.776C603.305-14.411,766.031-14.772,859,78.272

-			c95.915,96.081,95.915,252.312,0,348.286L550.445,727.535c-59.413,59.444-157.07,59.563-217.086-0.54

-			c-60.016-60.136-60.016-157.733,0-217.733l119.426-119.444l87.076,87.075L420.435,596.321c-7.895,7.937-9.021,17.078-9.021,21.77

-			c0,4.748,1.127,13.89,9.021,21.828c15.755,15.695,27.767,15.695,43.538,0l308.373-301.021

-			c47.506-47.445,47.506-125.562-0.482-173.626c-46.543-46.545-127.605-46.545-174.151,0L254.883,500.751

-			c-40.217,40.277-62.661,94.339-62.661,151.887c0,57.61,22.444,111.729,63.141,152.382c81.438,81.514,223.358,81.514,304.764,0

-			l153.947-153.947l87.016,87.047L647.143,892.064C583.221,956.051,498.204,991.438,407.745,991.438z"/>

-	</g>

-</g>

-</svg>

diff --git a/assets/icons/pencil.svg b/assets/icons/pencil.svg
deleted file mode 100755
index 8f6987c..0000000
--- a/assets/icons/pencil.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M12 27.872l-11.872 3.968 3.936-11.904 19.84-19.84 7.936 7.936-19.84 19.84zM4.064 27.872l5.952-1.984-3.968-3.968-1.984 5.952zM8.032 19.936l3.968 3.968 11.904-11.904-3.968-3.968-11.904 11.904z" fill="#000000" />
-</svg>
diff --git a/assets/icons/picture.svg b/assets/icons/picture.svg
deleted file mode 100755
index 46bdb19..0000000
--- a/assets/icons/picture.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
-<g>
-</g>
-	<path d="M11.424 10.24q0 1.44-0.992 2.432t-2.432 1.024-2.432-1.024-0.992-2.432 0.992-2.4 2.432-1.024 2.432 1.024 0.992 2.4zM29.728 17.12v8h-25.152v-3.424l5.696-5.728 2.88 2.848 9.12-9.12zM31.424 4.544h-28.576q-0.224 0-0.384 0.16t-0.192 0.416v21.696q0 0.256 0.192 0.416t0.384 0.16h28.576q0.224 0 0.416-0.16t0.16-0.416v-21.696q0-0.224-0.16-0.416t-0.416-0.16zM34.272 5.12v21.696q0 1.184-0.832 2.016t-2.016 0.864h-28.576q-1.152 0-2.016-0.864t-0.832-2.016v-21.696q0-1.184 0.832-2.016t2.016-0.864h28.576q1.184 0 2.016 0.864t0.832 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/play.svg b/assets/icons/play.svg
deleted file mode 100755
index 51f08af..0000000
--- a/assets/icons/play.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M24.714 16.554l-23.714 13.179q-0.411 0.232-0.705 0.054t-0.295-0.643v-26.286q0-0.464 0.295-0.643t0.705 0.054l23.714 13.179q0.411 0.232 0.411 0.554t-0.411 0.554z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus-circled.svg b/assets/icons/plus-circled.svg
deleted file mode 100755
index 61dae0b..0000000
--- a/assets/icons/plus-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM7.008 18.528h6.432v6.432h5.12v-6.432h6.432v-5.12h-6.432v-6.432h-5.12v6.432h-6.432v5.12z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus-circled2.svg b/assets/icons/plus-circled2.svg
deleted file mode 100644
index 7fdf0a6..0000000
--- a/assets/icons/plus-circled2.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">

-<path d="M0,16c0-4.4,1.6-8.2,4.7-11.3S11.6-0.1,16,0s8.2,1.6,11.3,4.7C30.5,7.7,32,11.5,32,16c0,4.5-1.6,8.2-4.7,11.3

-	S20.5,31.9,16,32s-8.2-1.5-11.3-4.7S0.1,20.4,0,16z M3.5,16c0,3.5,1.2,6.4,3.7,8.8c2.5,2.4,5.4,3.7,8.8,3.7c3.4,0,6.4-1.2,8.8-3.7

-	s3.7-5.4,3.7-8.8s-1.2-6.4-3.7-8.8S19.4,3.4,16,3.5c-3.4,0-6.4,1.2-8.8,3.7S3.5,12.5,3.5,16z M7,18.5h6.4V25h5.1v-6.4H25v-5.1h-6.4

-	V7h-5.1v6.4H7C7,13.4,7,18.5,7,18.5z"/>

-</svg>

diff --git a/assets/icons/plus-squared-alt.svg b/assets/icons/plus-squared-alt.svg
deleted file mode 100755
index f72a23e..0000000
--- a/assets/icons/plus-squared-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M20.576 14.24v1.152q0 0.256-0.16 0.416t-0.416 0.16h-6.272v6.272q0 0.256-0.16 0.416t-0.416 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-6.272h-6.272q-0.256 0-0.416-0.16t-0.16-0.416v-1.152q0-0.224 0.16-0.384t0.416-0.16h6.272v-6.304q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416v6.304h6.272q0.256 0 0.416 0.16t0.16 0.416zM22.848 22.24v-14.848q0-1.184-0.832-2.016t-2.016-0.832h-14.848q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.048t2.016 0.832h14.848q1.184 0 2.016-0.832t0.832-2.048zM25.152 7.392v14.848q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h14.848q2.112 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus-squared.svg b/assets/icons/plus-squared.svg
deleted file mode 100755
index bd092ad..0000000
--- a/assets/icons/plus-squared.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M22.848 17.12v-2.304q0-0.448-0.32-0.8t-0.8-0.32h-5.728v-5.728q0-0.48-0.352-0.8t-0.8-0.352h-2.272q-0.48 0-0.8 0.352t-0.352 0.8v5.728h-5.696q-0.48 0-0.832 0.32t-0.32 0.8v2.304q0 0.448 0.32 0.8t0.832 0.32h5.696v5.728q0 0.448 0.352 0.8t0.8 0.352h2.272q0.48 0 0.8-0.352t0.352-0.8v-5.728h5.728q0.448 0 0.8-0.32t0.32-0.8zM27.424 7.392v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus.svg b/assets/icons/plus.svg
deleted file mode 100755
index 43a8e78..0000000
--- a/assets/icons/plus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 20.48v-9.024h11.488v-11.488h9.024v11.488h11.488v9.024h-11.488v11.488h-9.024v-11.488h-11.488z" fill="#000000" />
-</svg>
diff --git a/assets/icons/popin.svg b/assets/icons/popin.svg
deleted file mode 100755
index 246497c..0000000
--- a/assets/icons/popin.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M15 16.926l7.784 0.046-2.525-2.525 5.017-5.017-2.666-2.665-5.016 5.017-2.59-2.591-0.004 7.735zM25.926 16.944l-1.92-1.947 0.035 9.007-16.015 0.009 0.016-15.974 8.958-0.039-2-2h-7c-1.104 0-2 0.896-2 2v16c0 1.104 0.896 2 2 2h16c1.104 0 2-0.896 2-2l-0.074-7.056z" fill="#000000" />
-</svg>
diff --git a/assets/icons/popout.svg b/assets/icons/popout.svg
deleted file mode 100755
index 3999c64..0000000
--- a/assets/icons/popout.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M15.694 13.541l2.666 2.665 5.016-5.017 2.59 2.59 0.004-7.734-7.785-0.046 2.526 2.525-5.017 5.017zM25.926 16.945l-1.92-1.947 0.035 9.007-16.015 0.009 0.016-15.973 8.958-0.040-2-2h-7c-1.104 0-2 0.896-2 2v16c0 1.104 0.896 2 2 2h16c1.104 0 2-0.896 2-2l-0.074-7.056z" fill="#000000" />
-</svg>
diff --git a/assets/icons/profile.svg b/assets/icons/profile.svg
deleted file mode 100755
index 76f9e4c..0000000
--- a/assets/icons/profile.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M30.784 31.904h-29.664c0-3.84 4.48-7.040 10.592-8.096v-1.568c-2.528-1.472-4.224-4.192-4.224-7.296v-0.224c-1.248-0.448-2.112-1.6-2.112-2.976s0.864-2.528 2.112-2.944v-0.224c0-4.672 3.776-8.48 8.48-8.48s8.48 3.808 8.48 8.48v0.224c1.216 0.416 2.112 1.568 2.112 2.944s-0.896 2.528-2.112 2.976v0.224c0 3.104-1.728 5.824-4.256 7.296v1.568c6.112 1.056 10.592 4.256 10.592 8.096z" fill="#000000" />
-</svg>
diff --git a/assets/icons/replicate.svg b/assets/icons/replicate.svg
deleted file mode 100755
index f5c001a..0000000
--- a/assets/icons/replicate.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M12 21.952h2.016v4h-2.016v-4zM16 21.952h2.016v4h-2.016v-4zM20 21.952h2.016v4h-2.016v-4zM26.016 18.976h-2.016v9.984h2.016l5.984-4.992-5.984-4.992zM32 2.976h-9.984v9.984h9.984v-9.984zM28.992 9.952h-4v-4h4v4zM0 28.96h10.016v-9.984h-10.016v9.984zM3.008 21.952h4v4h-4v-4zM18.016 5.952h1.984v4h-1.984v-4zM14.016 5.952h1.984v4h-1.984v-4zM10.016 5.952h1.984v4h-1.984v-4zM8 12.96v-9.984h-2.016l-5.984 4.992 5.984 4.992h2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/reply-all.svg b/assets/icons/reply-all.svg
deleted file mode 100755
index bf277d2..0000000
--- a/assets/icons/reply-all.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="32" viewBox="0 0 50 32">
-<g>
-</g>
-	<path d="M16.032-0.032v5.824l-10.208 10.208 10.208 10.176v5.792l-16.032-15.968zM27.712-0.032v10.208q3.52 0.48 6.528 1.44t5.088 2.176 3.776 2.624 2.752 2.912 1.824 2.88 1.12 2.688 0.576 2.208 0.224 1.504v0.544q-0.192-0.352-0.608-0.928t-2.144-2.048-4-2.432q-2.272-1.024-6.304-1.664-2.464-0.384-5.152-0.384-1.76 0-3.68 0.16v10.112l-16.032-15.968z" fill="#000000" />
-</svg>
diff --git a/assets/icons/reply.svg b/assets/icons/reply.svg
deleted file mode 100755
index c48a5f6..0000000
--- a/assets/icons/reply.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="38" height="32" viewBox="0 0 38 32">
-<g>
-</g>
-	<path d="M16.032-0.032v10.208q3.52 0.48 6.528 1.44t5.088 2.176 3.776 2.624 2.752 2.912 1.824 2.88 1.12 2.688 0.576 2.208 0.192 1.504l0.032 0.544q-0.192-0.352-0.608-0.928t-2.144-2.048-4-2.432-6.272-1.664q-2.464-0.384-5.184-0.384-1.76 0-3.68 0.16v10.112l-16.032-15.968z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-full-reverse.svg b/assets/icons/resize-full-reverse.svg
deleted file mode 100755
index c7562a4..0000000
--- a/assets/icons/resize-full-reverse.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M17.9 32l4.7-4.7-6.4-6.5 4.6-4.6 6.5 6.4 4.7-4.7v14.1h-14.1zM11.2 15.8l-6.5-6.5-4.7 4.8v-14.1h14.1l-4.7 4.7 6.4 6.5-4.6 4.6z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-full.svg b/assets/icons/resize-full.svg
deleted file mode 100755
index 443bc0f..0000000
--- a/assets/icons/resize-full.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 31.968v-14.112l4.736 4.736 6.464-6.432 4.608 4.608-6.432 6.464 4.736 4.736h-14.112zM16.192 11.168l6.432-6.464-4.736-4.736h14.112v14.112l-4.736-4.736-6.464 6.432z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-small-reverse.svg b/assets/icons/resize-small-reverse.svg
deleted file mode 100755
index a60122d..0000000
--- a/assets/icons/resize-small-reverse.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M27.3 32l-6.4-6.4-4.7 4.7v-14.1h14.1l-4.7 4.7 6.4 6.5-4.7 4.6zM1.7 15.8l4.7-4.7-6.4-6.4 4.7-4.7 6.5 6.4 4.7-4.7v14.1c-0.1 0-14.2 0-14.2 0z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-small.svg b/assets/icons/resize-small.svg
deleted file mode 100755
index 4a4a5aa..0000000
--- a/assets/icons/resize-small.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 27.328l6.432-6.464-4.736-4.672h14.112v14.112l-4.672-4.736-6.432 6.432zM16.192 15.808v-14.112l4.672 4.736 6.464-6.432 4.672 4.672-6.432 6.464 4.736 4.672h-14.112z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-1.svg b/assets/icons/right-1.svg
deleted file mode 100755
index a708b50..0000000
--- a/assets/icons/right-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M14.848 1.664l14.304 14.272-14.304 14.336-5.024-5.12 5.6-5.632h-14.848v-7.168h14.848l-5.6-5.632z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-circled.svg b/assets/icons/right-circled.svg
deleted file mode 100755
index 9a9d85f..0000000
--- a/assets/icons/right-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M20.576 16q0 0.256-0.16 0.416l-5.728 5.696q-0.16 0.16-0.416 0.16-0.224 0-0.384-0.16t-0.16-0.384v-3.456h-6.304q-0.224 0-0.384-0.16t-0.192-0.384v-3.456q0-0.224 0.192-0.384t0.384-0.16h6.304v-3.456q0-0.224 0.16-0.384t0.384-0.16 0.448 0.16l5.696 5.696q0.16 0.16 0.16 0.416zM23.424 16q0-2.656-1.312-4.864t-3.52-3.552-4.864-1.312-4.896 1.312-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864zM27.424 16q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-dir.svg b/assets/icons/right-dir.svg
deleted file mode 100755
index c9aafd2..0000000
--- a/assets/icons/right-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11" height="32" viewBox="0 0 11 32">
-<g>
-</g>
-	<path d="M10.272 15.968q0 0.448-0.32 0.8l-8 8q-0.352 0.352-0.8 0.352t-0.8-0.352-0.352-0.8v-16q0-0.48 0.352-0.8t0.8-0.352 0.8 0.352l8 8q0.32 0.32 0.32 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-open.svg b/assets/icons/right-open.svg
deleted file mode 100755
index f547f22..0000000
--- a/assets/icons/right-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="32" viewBox="0 0 21 32">
-<g>
-</g>
-	<path d="M0 27.232l11.264-11.264-11.264-11.264 4.736-4.736 11.264 11.232 4.736 4.768-16 16z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right.svg b/assets/icons/right.svg
deleted file mode 100755
index bc2f94b..0000000
--- a/assets/icons/right.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M30.848 15.904q0 0.256-0.16 0.448l-6.88 6.304q-0.288 0.256-0.608 0.128-0.352-0.16-0.352-0.544v-4h-22.272q-0.256 0-0.416-0.16t-0.16-0.384v-3.456q0-0.224 0.16-0.384t0.416-0.16h22.272v-4q0-0.384 0.352-0.544t0.608 0.096l6.88 6.272q0.16 0.16 0.16 0.384z" fill="#000000" />
-</svg>
diff --git a/assets/icons/save.svg b/assets/icons/save.svg
deleted file mode 100755
index 47e33f0..0000000
--- a/assets/icons/save.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M6.848 27.392h13.728v-6.848h-13.728v6.848zM22.848 27.392h2.304v-16q0-0.256-0.192-0.672t-0.352-0.64l-5.024-4.992q-0.16-0.192-0.608-0.384t-0.704-0.16v7.424q0 0.704-0.48 1.216t-1.216 0.512h-10.304q-0.704 0-1.184-0.512t-0.512-1.216v-7.424h-2.304v22.848h2.304v-7.424q0-0.704 0.512-1.216t1.184-0.512h14.88q0.704 0 1.216 0.512t0.48 1.216v7.424zM16 10.816v-5.696q0-0.256-0.16-0.416t-0.416-0.16h-3.424q-0.224 0-0.416 0.16t-0.16 0.416v5.696q0 0.256 0.16 0.416t0.416 0.16h3.424q0.224 0 0.416-0.16t0.16-0.416zM27.424 11.392v16.576q0 0.704-0.48 1.216t-1.216 0.512h-24q-0.736 0-1.216-0.512t-0.512-1.216v-24q0-0.704 0.512-1.216t1.216-0.512h16.544q0.736 0 1.6 0.384t1.344 0.832l4.992 5.024q0.512 0.48 0.864 1.344t0.352 1.568z" fill="#000000" />
-</svg>
diff --git a/assets/icons/search.svg b/assets/icons/search.svg
deleted file mode 100755
index 78712d9..0000000
--- a/assets/icons/search.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M30.976 26.752l-6.976-6.976c1.216-1.984 1.952-4.288 1.952-6.752 0-7.136-5.792-12.928-12.928-12.928s-12.928 5.792-12.928 12.928c0 7.136 5.792 12.928 12.928 12.928 2.496 0 4.768-0.736 6.752-1.952l6.976 6.976c1.184 1.184 3.072 1.184 4.224 0 1.184-1.152 1.184-3.040 0-4.224zM13.024 21.952c-4.96 0-8.96-4-8.96-8.928 0-4.96 4-8.96 8.96-8.96 4.928 0 8.928 4 8.928 8.96 0 4.928-4 8.928-8.928 8.928z" fill="#000000" />
-</svg>
diff --git a/assets/icons/select-all.svg b/assets/icons/select-all.svg
deleted file mode 100644
index 5877dcb..0000000
--- a/assets/icons/select-all.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">

-<path d="M18,32h-4v-3h4V32z M8,3h3V0H8V3z M11,32v-3H8v3H11z M14,0v3h4V0H14z M27,3h2v2h3V0h-5V3z M3,18v-4H0v4H3z M0,11h3V8H0V11z

-	 M3,24v-3H0v3H3z M24,29h-3v3h3V29z M5,29H3v-2H0v5h5V29z M29,27v2h-2v3h5v-5H29z M29,8v3h3V8H29z M3,5V3h2V0H0v5H3z M21,0v3h3V0H21

-	z M29,14v4h3v-4H29z M32,21h-3v3h3V21z M9.2,22.9c1.8,1.8,4.1,2.8,6.8,2.8c2.7,0,4.9-0.9,6.8-2.8c1.8-1.8,2.8-4.1,2.8-6.8

-	c0-2.7-0.9-4.9-2.8-6.8c-2-1.9-4.2-2.8-6.8-2.8c-2.6,0-4.9,0.9-6.8,2.8s-2.8,4.1-2.8,6.8C6.4,18.7,7.4,21,9.2,22.9z M11.9,15.2

-	l2,2.1l6.2-6.3l2,2l-6.2,6.2l-2,2l-4-4L11.9,15.2z"/>

-</svg>

diff --git a/assets/icons/sidenav-filter-function.svg b/assets/icons/sidenav-filter-function.svg
deleted file mode 100644
index 418481d..0000000
--- a/assets/icons/sidenav-filter-function.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<path d="M15.774,12.714h-4.571v1.524h3.048v1.523h-3.048v3.048H8.156V11.19h7.619V12.714z M24.917,12.714h-4.571v1.524h3.048v1.523

-	h-3.048v3.048h-3.048V11.19h7.619V12.714z M24.904,27H7.095C3.183,27,0,23.816,0,19.904v-8.809C0,7.183,3.183,4,7.095,4h17.809

-	C28.816,4,32,7.183,32,11.095v8.809C32,23.816,28.816,27,24.904,27z M7.095,6C4.286,6,2,8.286,2,11.095v8.809

-	C2,22.714,4.286,25,7.095,25h17.809C27.714,25,30,22.714,30,19.904v-8.809C30,8.286,27.714,6,24.904,6H7.095z"/>

-</svg>

diff --git a/assets/icons/sidenav-info.svg b/assets/icons/sidenav-info.svg
deleted file mode 100644
index 034e9c6..0000000
--- a/assets/icons/sidenav-info.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<g id="New_Symbol">

-	<g>

-		<path d="M24.904,5H7.095C3.183,5,0,8.183,0,12.095v8.809C0,24.816,3.183,28,7.095,28h17.809C28.816,28,32,24.816,32,20.904v-8.809

-			C32,8.183,28.816,5,24.904,5z M30,20.904C30,23.714,27.714,26,24.904,26H7.095C4.286,26,2,23.714,2,20.904v-8.809

-			C2,9.286,4.286,7,7.095,7h17.809C27.714,7,30,9.286,30,12.095V20.904z"/>

-		<polygon points="19,18 19,14 15,14 12,14 12,18 15,18 15,21 12,21 12,24 15,24 19,24 20,24 20,21 19,21 		"/>

-		<rect x="16" y="9" width="3" height="3"/>

-	</g>

-</g>

-</svg>

diff --git a/assets/icons/sidenav-list-function.svg b/assets/icons/sidenav-list-function.svg
deleted file mode 100644
index 2d5f6af..0000000
--- a/assets/icons/sidenav-list-function.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<g id="New_Symbol">

-	<path d="M13.203,17.285h3.048v1.524h-6.095V11.19h3.047V17.285z M25.394,12.714h-4.571v1.524h3.048v1.523h-3.048v3.048h-3.048

-		V11.19h7.619V12.714z M24.904,27H7.095C3.183,27,0,23.816,0,19.904v-8.809C0,7.183,3.183,4,7.095,4h17.809

-		C28.816,4,32,7.183,32,11.095v8.809C32,23.816,28.816,27,24.904,27z M7.095,6C4.286,6,2,8.286,2,11.095v8.809

-		C2,22.714,4.286,25,7.095,25h17.809C27.714,25,30,22.714,30,19.904v-8.809C30,8.286,27.714,6,24.904,6H7.095z"/>

-</g>

-</svg>

diff --git a/assets/icons/sidenav-map-reduce.svg b/assets/icons/sidenav-map-reduce.svg
deleted file mode 100644
index 0a6b6f6..0000000
--- a/assets/icons/sidenav-map-reduce.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<g id="New_Symbol">

-	<path d="M17.775,12.19v7.619h-3.048v-6.095h-1.524v6.095h-3.048v-6.095H8.631v6.095H5.584V12.19H17.775z M25.394,16.762h1.523

-		v3.048H23.87v-3.048h-1.524v3.048h-3.048V12.19h7.619v3.048h-1.523V16.762z M22.346,15.238h1.463v-1.524h-1.463V15.238z M24.904,28

-		H7.095C3.183,28,0,24.816,0,20.904v-8.809C0,8.183,3.183,5,7.095,5h17.809C28.816,5,32,8.183,32,12.095v8.809

-		C32,24.816,28.816,28,24.904,28z M7.095,7C4.286,7,2,9.286,2,12.095v8.809C2,23.714,4.286,26,7.095,26h17.809

-		C27.714,26,30,23.714,30,20.904v-8.809C30,9.286,27.714,7,24.904,7H7.095z"/>

-</g>

-</svg>

diff --git a/assets/icons/sidenav-search.svg b/assets/icons/sidenav-search.svg
deleted file mode 100644
index 3598fb8..0000000
--- a/assets/icons/sidenav-search.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<g id="New_Symbol">

-	<path d="M24.904,28H7.095C3.183,28,0,24.816,0,20.904v-8.809C0,8.183,3.183,5,7.095,5h17.809C28.816,5,32,8.183,32,12.095v8.809

-		C32,24.816,28.816,28,24.904,28z M7.095,7C4.286,7,2,9.286,2,12.095v8.809C2,23.714,4.286,26,7.095,26h17.809

-		C27.714,26,30,23.714,30,20.904v-8.809C30,9.286,27.714,7,24.904,7H7.095z M22.428,20.333c0.223,0.223,0.334,0.492,0.334,0.81

-		s-0.111,0.587-0.334,0.81s-0.492,0.334-0.809,0.334c-0.318,0-0.588-0.111-0.811-0.334l-2.643-2.666

-		c-0.824,0.492-1.682,0.737-2.571,0.737c-1.35,0-2.508-0.479-3.477-1.439c-0.968-0.961-1.452-2.124-1.452-3.489

-		c0-1.349,0.48-2.503,1.44-3.464c0.96-0.96,2.123-1.44,3.488-1.44c1.366,0,2.528,0.48,3.489,1.44

-		c0.959,0.961,1.439,2.115,1.439,3.464c0,0.857-0.254,1.714-0.762,2.571L22.428,20.333z M13.178,17.5c0.675,0.666,1.48,1,2.417,1

-		c0.936,0,1.739-0.334,2.405-1c0.666-0.667,1-1.468,1-2.405c0-0.937-0.334-1.738-1-2.405c-0.666-0.667-1.469-1-2.405-1

-		c-0.937,0-1.742,0.333-2.417,1c-0.675,0.667-1.012,1.468-1.012,2.405C12.167,16.032,12.503,16.833,13.178,17.5z"/>

-</g>

-</svg>

diff --git a/assets/icons/sidenav-show-function.svg b/assets/icons/sidenav-show-function.svg
deleted file mode 100644
index ced3451..0000000
--- a/assets/icons/sidenav-show-function.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<g id="New_Symbol">

-	<path d="M15.774,13.714h-4.571v1.524h4.571v4.571H8.156v-1.523h4.571v-1.524H8.156V12.19h7.619V13.714z M24.917,13.714h-4.571

-		v1.524h3.048v1.523h-3.048v3.048h-3.048V12.19h7.619V13.714z M24.904,28H7.095C3.183,28,0,24.816,0,20.904v-8.809

-		C0,8.183,3.183,5,7.095,5h17.809C28.816,5,32,8.183,32,12.095v8.809C32,24.816,28.816,28,24.904,28z M7.095,7

-		C4.286,7,2,9.286,2,12.095v8.809C2,23.714,4.286,26,7.095,26h17.809C27.714,26,30,23.714,30,20.904v-8.809

-		C30,9.286,27.714,7,24.904,7H7.095z"/>

-</g>

-</svg>

diff --git a/assets/icons/sidenav-update-function.svg b/assets/icons/sidenav-update-function.svg
deleted file mode 100644
index 749fa07..0000000
--- a/assets/icons/sidenav-update-function.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>

-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">

-<g id="New_Symbol">

-	<path d="M15.203,19.81H7.584V12.19h3.047v6.096h1.524V12.19h3.048V19.81z M24.346,13.714h-4.571v1.524h3.048v1.523h-3.048v3.048

-		h-3.047V12.19h7.619V13.714z M24.904,28H7.095C3.183,28,0,24.816,0,20.904v-8.809C0,8.183,3.183,5,7.095,5h17.809

-		C28.816,5,32,8.183,32,12.095v8.809C32,24.816,28.816,28,24.904,28z M7.095,7C4.286,7,2,9.286,2,12.095v8.809

-		C2,23.714,4.286,26,7.095,26h17.809C27.714,26,30,23.714,30,20.904v-8.809C30,9.286,27.714,7,24.904,7H7.095z"/>

-</g>

-</svg>

diff --git a/assets/icons/sitemap.svg b/assets/icons/sitemap.svg
deleted file mode 100755
index 4aebd4c..0000000
--- a/assets/icons/sitemap.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 22.24v5.728q0 0.704-0.512 1.216t-1.216 0.512h-5.696q-0.704 0-1.216-0.512t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.48h1.696v-3.424h-9.12v3.424h1.696q0.736 0 1.216 0.48t0.512 1.216v5.728q0 0.704-0.512 1.216t-1.216 0.512h-5.696q-0.736 0-1.216-0.512t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.48h1.696v-3.424h-9.12v3.424h1.696q0.704 0 1.216 0.48t0.512 1.216v5.728q0 0.704-0.512 1.216t-1.216 0.512h-5.696q-0.736 0-1.216-0.512t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.48h1.696v-3.424q0-0.928 0.672-1.632t1.632-0.672h9.12v-3.424h-1.696q-0.736 0-1.216-0.48t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.512h5.696q0.736 0 1.216 0.512t0.512 1.216v5.728q0 0.704-0.512 1.216t-1.216 0.48h-1.696v3.424h9.12q0.928 0 1.632 0.672t0.672 1.632v3.424h1.696q0.736 0 1.216 0.48t0.512 1.216z" fill="#000000" />
-</svg>
diff --git a/assets/icons/stats.svg b/assets/icons/stats.svg
deleted file mode 100755
index 71dcdc3..0000000
--- a/assets/icons/stats.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M14.304 3.392h-0.064c-7.84 0.032-14.144 6.4-14.144 14.24s6.368 14.24 14.208 14.24c7.872 0 14.24-6.4 14.24-14.24-3.616 0-14.24 0-14.24 0s0-10.464 0-14.24zM31.936 15.392c0-8.448-6.88-15.328-15.328-15.328-0.064 0-0.032 15.36-0.032 15.36l15.36-0.032z" fill="#000000" />
-</svg>
diff --git a/assets/icons/support.svg b/assets/icons/support.svg
deleted file mode 100755
index 8d8d643..0000000
--- a/assets/icons/support.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M31.872 15.936c0 0.672-0.064 1.312-0.128 1.984-0.032 0.16-0.064 0.32-0.064 0.48-0.096 0.544-0.192 1.056-0.352 1.6-0.032 0.096-0.032 0.192-0.064 0.288-0.384 1.312-0.928 2.56-1.6 3.712-1.376 2.304-3.296 4.224-5.6 5.6-1.152 0.672-2.4 1.216-3.712 1.6-0.096 0.032-0.192 0.032-0.288 0.064-0.512 0.128-1.056 0.256-1.6 0.32-0.16 0.032-0.32 0.064-0.48 0.096-0.64 0.064-1.312 0.128-1.984 0.128v0 0c-0.672 0-1.312-0.064-1.984-0.128-0.16-0.032-0.288-0.064-0.448-0.064-0.544-0.096-1.088-0.224-1.632-0.352-0.064-0.032-0.16-0.032-0.256-0.064-1.312-0.384-2.56-0.928-3.712-1.6-2.336-1.376-4.256-3.296-5.632-5.6-0.672-1.152-1.216-2.4-1.6-3.712 0-0.096-0.032-0.192-0.064-0.288-0.128-0.544-0.256-1.056-0.32-1.6-0.032-0.16-0.064-0.32-0.064-0.48-0.096-0.672-0.16-1.312-0.16-1.984v0 0c0-0.672 0.064-1.344 0.128-1.984 0.032-0.16 0.064-0.32 0.096-0.48 0.064-0.544 0.192-1.056 0.32-1.6 0.032-0.096 0.032-0.192 0.064-0.288 0.384-1.312 0.928-2.56 1.6-3.712 1.376-2.304 3.296-4.224 5.632-5.6 1.12-0.672 2.4-1.216 3.712-1.6 0.064-0.032 0.16-0.032 0.256-0.064 0.544-0.128 1.056-0.256 1.6-0.32 0.16-0.032 0.32-0.064 0.48-0.096 0.672-0.064 1.312-0.128 1.984-0.128v0 0c0.672 0 1.344 0.064 1.984 0.128 0.16 0.032 0.32 0.064 0.48 0.064 0.544 0.096 1.056 0.224 1.6 0.352 0.096 0.032 0.192 0.032 0.288 0.064 1.312 0.384 2.56 0.928 3.712 1.6 2.304 1.376 4.224 3.296 5.6 5.6 0.672 1.152 1.216 2.4 1.6 3.712 0.032 0.096 0.032 0.192 0.064 0.288 0.128 0.512 0.256 1.056 0.32 1.6 0.032 0.16 0.064 0.32 0.096 0.48 0.064 0.64 0.128 1.312 0.128 1.984v0 0zM6.784 12.32l-2.944-2.944c-1.056 1.952-1.728 4.16-1.728 6.56s0.672 4.608 1.728 6.56l2.944-2.944c-0.448-1.12-0.704-2.336-0.704-3.616 0-1.28 0.256-2.496 0.704-3.616zM16 29.824c2.4 0 4.608-0.64 6.56-1.728l-2.944-2.944c-1.12 0.448-2.336 0.704-3.616 0.704-1.28 0-2.496-0.256-3.616-0.704l-2.944 2.944c1.952 1.088 4.16 1.728 6.56 1.728zM16 2.048c-2.4 0-4.608 0.672-6.56 1.728l2.944 2.944c1.12-0.448 2.336-0.704 3.616-0.704s2.496 0.256 3.616 0.704l2.944-2.944c-1.952-1.056-4.16-1.728-6.56-1.728zM23.648 13.92v0c-0.736-2.752-2.88-4.896-5.632-5.632v0 0c-0.256-0.064-0.512-0.128-0.8-0.16-0.384-0.064-0.8-0.128-1.216-0.128-0.416 0-0.832 0.064-1.216 0.128-0.288 0.032-0.544 0.096-0.8 0.16v0 0c-2.752 0.736-4.896 2.88-5.632 5.632v0 0c-0.064 0.256-0.128 0.512-0.16 0.8-0.064 0.384-0.128 0.8-0.128 1.216 0 0.416 0.064 0.832 0.128 1.216 0.032 0.288 0.096 0.544 0.16 0.8v0 0c0.736 2.752 2.88 4.896 5.632 5.632v0 0c0.256 0.064 0.512 0.128 0.8 0.16 0.384 0.064 0.8 0.128 1.216 0.128 0.416 0 0.832-0.064 1.216-0.128 0.288-0.032 0.544-0.096 0.832-0.16v0 0c2.72-0.736 4.864-2.88 5.6-5.632v0 0c0.064-0.256 0.128-0.512 0.16-0.8 0.064-0.384 0.128-0.8 0.128-1.216 0-0.416-0.064-0.832-0.128-1.216-0.032-0.288-0.096-0.544-0.16-0.8v0zM28.16 9.376l-2.944 2.944c0.448 1.12 0.704 2.336 0.704 3.616s-0.256 2.496-0.704 3.616l2.944 2.944c1.088-1.952 1.728-4.16 1.728-6.56 0-2.4-0.64-4.608-1.728-6.56z" fill="#000000" />
-</svg>
diff --git a/assets/icons/swap-arrows.svg b/assets/icons/swap-arrows.svg
deleted file mode 100644
index 48c1eae..0000000
--- a/assets/icons/swap-arrows.svg
+++ /dev/null
@@ -1,1318 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 width="1000px" height="1000px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">

-<g id="Layer_1_3_" display="none">

-	<g id="Layer_1_2_" display="inline">

-		

-			<g id="Layer_1_1_" inkscape:version="0.48.2 r9819" sodipodi:docname="clock_scaled.svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd">

-			

-				<sodipodi:namedview  inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1916" inkscape:window-height="1036" inkscape:guide-bbox="true" inkscape:current-layer="Layer_1" inkscape:window-x="4" inkscape:window-maximized="0" inkscape:window-y="22" inkscape:zoom="0.5" pagecolor="#ffffff" showguides="true" inkscape:cx="500" inkscape:cy="451.84046" bordercolor="#666666" objecttolerance="10" gridtolerance="10" guidetolerance="10" showgrid="false" id="namedview3067" borderopacity="1">

-				</sodipodi:namedview>

-			<g id="g3061" transform="matrix(38.592158,0,0,38.593647,-11301.328,-14803.751)">

-				<path id="path3063" inkscape:connector-curvature="0" d="M305.796,383.58c-7.155,0-12.956,5.8-12.956,12.956

-					s5.801,12.955,12.956,12.955c7.155,0,12.956-5.799,12.956-12.955S312.951,383.58,305.796,383.58z M305.796,406.252

-					c-5.358,0-9.717-4.359-9.717-9.716c0-5.358,4.359-9.716,9.717-9.716c5.357,0,9.716,4.358,9.716,9.716

-					C315.513,401.893,311.153,406.252,305.796,406.252z"/>

-				<path id="path3065" inkscape:connector-curvature="0" d="M312.081,399.439l-5.125-3.461v-5.959c0-0.142-0.057-0.28-0.158-0.382

-					c-0.101-0.1-0.239-0.158-0.382-0.158H305c-0.143,0-0.281,0.059-0.382,0.158c-0.1,0.102-0.157,0.241-0.157,0.382v7.037

-					c0,0.142,0.057,0.28,0.157,0.382c0.042,0.041,0.089,0.074,0.14,0.1l5.971,4c0.09,0.06,0.194,0.092,0.3,0.092

-					c0.038,0,0.076-0.006,0.115-0.014c0.143-0.031,0.266-0.117,0.344-0.242l0.751-1.2

-					C312.391,399.928,312.322,399.602,312.081,399.439L312.081,399.439z"/>

-			</g>

-			<g id="Fork__x2F__Knife_copy_3">

-				<g>

-					<path d="M381.613,42.025h-1.729c0.042,0.626,0.064,1.254,0.064,1.882l-0.231,283.326c0,19.722-11.172,34.556-30.2,34.556

-						c-19.022,0-36.591-15.975-36.591-35.697L312.19,42.025h-68.208l-0.736,284.067c0,19.722-17.563,35.697-36.592,35.697

-						c-19.036,0-30.2-14.834-30.2-34.556l-0.231-283.326c0-0.628,0.022-1.255,0.064-1.882h-1.606

-						c-25.212,0-45.643,24.349-45.643,54.387l-21.3,278.192c0,79.535,41.597,146.895,110.692,169.892l-41.688,320.803

-						c-7.602,66.491,37.309,128.188,101.417,128.188c64.104,0,109.024-61.695,101.417-128.188l-42.148-324.34

-						c66.515-25.826,111.129-90.562,111.129-166.355L427.256,96.412C427.256,66.374,406.825,42.025,381.613,42.025z

-						 M890.619,865.298l-43.362-333.729c14.694-43.554,11.042-104.943,11.042-162.453l-0.555-200.922

-						c0-104.363,6.568-163.113-87.494-163.113c-68.325,0-117.392,260.768-117.392,391.159c0,89.035,1.854,169.086,71.265,189.463

-						L687.785,865.3c-7.604,66.491,37.312,128.188,101.432,128.188C853.318,993.484,898.236,931.789,890.619,865.298z"/>

-				</g>

-			</g>

-			<g id="Coffee_Cup_copy_5">

-				<g>

-					<path d="M868.535,346.061c-7.253,0-14.354,2.084-21.24,5.894c0.833-14.979,1.448-30.36,1.852-46.135

-						c0.365-2.916,0.557-5.852,0.557-8.803c0-1.946-0.088-3.884-0.248-5.814c0.158-9.517,0.248-19.161,0.248-28.97h-8.771

-						c-39.521-77.244-208.016-135.284-409.9-135.284c-201.875,0-370.373,58.041-409.893,135.284h-8.77

-						c0,9.818,0.087,19.477,0.245,29.006c-0.158,1.918-0.245,3.844-0.245,5.778c0,6.584,0.282,12.913,0.834,18.998

-						C26.93,749.146,208.745,872.088,431.028,872.088c148.137,0,278.296-54.593,352.718-219.193

-						c21.369,3.397,51.458-4.771,84.796-4.771c64.82,0,117.391-67.619,117.391-151.014

-						C985.926,413.679,933.355,346.061,868.535,346.061z M426.754,389.691c-180.338,0-326.557-39.579-326.557-88.406

-						c0-48.827,146.219-88.406,326.557-88.406c180.354,0,326.557,39.579,326.557,88.406

-						C753.311,350.112,607.107,389.691,426.754,389.691z M864.684,559.48c-33.391,0-40.459,0-40.459,0s9.201-137.914,42.578-137.914

-						s60.433,33.763,60.433,75.396S898.045,559.48,864.684,559.48z"/>

-				</g>

-			</g>

-			<g id="Shape_116_1_">

-				<g>

-					<path d="M499.475,168.775c-133.939,0-428.312,29.208-428.312,243.366h856.63C927.79,197.983,633.404,168.775,499.475,168.775z

-						 M499.475,830.721c133.945,0,428.315,0,428.315-155.758H71.159C71.159,830.721,365.544,830.721,499.475,830.721z

-						 M927.79,519.221h-29.207c-25.72,0-59.904,21.068-92.987,41.476c-38.479,23.72-74.848,46.137-111.436,46.137

-						c-31.129,0-67.313-16.604-109.218-35.827c-52.896-24.262-112.877-51.779-173.075-51.779H71.159

-						c-32.246,0-58.4,26.152-58.4,58.398s26.154,58.416,58.4,58.416H927.79c32.246,0,58.399-26.17,58.399-58.416

-						S960.036,519.221,927.79,519.221z M32.231,490.012c0,0,194.686,0,379.636,0c44.261,0,87.604,13.146,127.604,29.208

-						c7.896,3.162,15.627,6.449,23.238,9.771c0.155,0.062,0.264,0.125,0.419,0.202c28.216,12.319,54.322,25.108,77.359,34.463

-						c0.419,0.187,0.853,0.341,1.271,0.512c4.79,1.923,9.487,3.736,14.016,5.317c0.188,0.073,0.355,0.124,0.562,0.195

-						c4.17,1.442,8.186,2.688,12.092,3.783c0.62,0.17,1.287,0.372,1.906,0.543c3.861,1.038,7.582,1.829,11.162,2.438

-						c0.729,0.124,1.427,0.217,2.141,0.326c3.658,0.49,7.193,0.852,10.525,0.852c3.287,0,6.666-0.354,10.093-0.883

-						c0.667-0.094,1.333-0.188,2.016-0.312c3.333-0.604,6.719-1.408,10.154-2.418c0.604-0.187,1.194-0.389,1.782-0.59

-						c3.411-1.054,6.822-2.279,10.311-3.688c0.248-0.108,0.518-0.188,0.765-0.301c3.752-1.52,7.528-3.271,11.349-5.109

-						c0.604-0.295,1.178-0.574,1.768-0.869c23.504-11.627,48.523-28.494,73.577-43.146c28.267-16.557,56.539-30.292,82.615-30.292

-						c58.398,0,68.135,0,68.135,0c10.744,0,19.477-8.712,19.477-19.472c0-10.743-8.729-19.456-19.477-19.456H32.231

-						c-10.743,0-19.472,8.713-19.472,19.456C12.759,481.3,21.488,490.012,32.231,490.012z"/>

-				</g>

-			</g>

-			<g id="Shape_91">

-				<g>

-					<path d="M215.181,491.383c86.132-179.95,201.292-274.255,274.375-319.438l-60.383-83.668c0,0-202.715,71.487-333.961,345.689

-						C-36.015,708.152,35.455,910.885,35.455,910.885l103.032-5.465C127.834,820.155,129.049,671.333,215.181,491.383z

-						 M512.146,203.229c-68.189,42.077-180.192,132.183-262.697,304.55c-82.506,172.386-82.438,316.124-72.425,395.593

-						l809.335-42.875L512.146,203.229z M423.031,717.244c-18.132,37.861-63.506,53.854-101.366,35.744

-						c-37.86-18.132-53.858-63.506-35.743-101.366c18.114-37.86,63.506-53.858,101.366-35.744

-						C425.148,634.011,441.146,679.384,423.031,717.244z M576.521,748.581c-9.062,18.931-31.725,26.946-50.666,17.872

-						c-18.947-9.062-26.936-31.753-17.872-50.666c9.058-18.913,31.729-26.946,50.684-17.872

-						C577.597,706.973,585.578,729.668,576.521,748.581z M598.21,527.266c-13.586,28.393-47.611,40.411-76.016,26.812

-						c-28.422-13.604-40.396-47.646-26.812-76.021c13.586-28.387,47.601-40.405,76.021-26.808

-						C599.824,464.853,611.796,498.879,598.21,527.266z M712.902,771.729c-28.422-13.604-40.396-47.63-26.812-76.017

-						s47.6-40.411,76.021-26.808c28.422,13.603,40.395,47.646,26.809,76.016C775.332,773.307,741.307,785.331,712.902,771.729z"/>

-				</g>

-			</g>

-			<g id="Shape_85">

-				<g>

-					<path d="M555.163,569.594c144.896-35.427,254.812-201.206,254.812-362.249h-0.025v-62.184c1.183-8.377,1.684-13.05,1.684-13.05

-						h-1.684V-1.298H187.322v208.643c0,161.518,110.663,327.983,256.389,362.614c3.452,0.896,6.95,1.708,10.494,2.438v339.7

-						c-150.878,6.167-266.851,43.172-266.851,87.901h622.621c0-44.729-116.037-81.734-266.836-87.901v-339.68

-						C547.205,571.586,551.214,570.646,555.163,569.594z M765.467,43.177l0.026,88.936H231.797V43.177H765.467z"/>

-				</g>

-			</g>

-			<g id="Shape_84">

-				<g>

-					<path d="M750.273,452.651c-21.689,1.42-173.646,23.873-131.484-15.462c69.436-64.796,221.329,19.553,298.779-82.884

-						C1007.337,235.581,810.14,5.855,680.426,6.1c-98.146,13.982-146.002,96.058-157.572,186.024

-						c-17.318,134.706,1.496,183.551-35.818,47.151C442.489,76.604,376.075-46.562,208.994,73.827

-						C142.717,121.573,36.983,226.269,58.017,315.351c33.52,141.91,193.259,92.913,291.224,123.089

-						c121.457,37.396-112.069,13.646-155.037,23.477C109.258,481.332,25.55,531.002,43.256,634.188

-						c10.502,61.361,142.72,222.967,200.647,239.951c109.428,32.133,177.552-76.794,199.532-167.899

-						c28.162-116.71,48.402-145.375,36.665-1.083c-6.817,83.922-43.335,278.396,40.129,290.245

-						c61.941,0.382-16.348-302.021,4.854-374.22c24.194-82.438,41.732,90.775,55.653,120.927

-						c40.328,87.321,113.271,161.368,211.958,110.711C989.172,751.934,1040.582,433.785,750.273,452.651z"/>

-				</g>

-			</g>

-			<g id="Shape_113">

-				<g>

-					<path d="M390.73,808.576h36.259v-507.67H390.73V808.576z M535.766,808.576h36.273v-507.67h-36.273V808.576z M680.816,808.576

-						h36.271v-507.67h-36.271V808.576z M789.607,44.87c-24.037,0-46.262,7.803-64.275,20.965

-						c-26.699-34.77-68.693-57.224-115.938-57.224c-41.146,0-78.299,17.001-104.89,44.375c-12.708-5.249-26.669-8.116-41.257-8.116

-						c-22.517,0-43.451,6.831-60.844,18.567c-19.229-11.768-41.89-18.567-66.078-18.567c-70.104,0-126.906,56.801-126.906,126.921

-						c0,34.488,13.773,65.827,36.149,88.704v40.411H209.34h-36.259c0,0-72.533,0-72.533,72.518c0,72.533,0,326.361,0,326.361

-						s0,72.533,72.533,72.533c25.173,0,50.344,0,72.486,0v145.051c0,40.082,32.545,72.518,72.518,72.518h471.411

-						c40.129,0,72.533-32.436,72.533-72.518V663.525V234.829c22.312-19.947,36.369-48.904,36.369-81.167

-						C898.4,93.539,849.621,44.87,789.607,44.87z M245.569,663.525v36.259h-72.314l-0.172-1.552V373.706l1.52-0.282h34.739h36.228

-						L245.569,663.525L245.569,663.525z M789.498,409.698v217.631v217.506c0,40.082-32.404,72.533-72.518,72.533H390.62

-						c-39.988,0-72.533-32.451-72.533-72.533v-72.518c0.028,0,0.047,0,0.047,0V300.906h-0.047v-3.51

-						c5.954,0.894,12.05,1.316,18.239,1.316c37.121,0,70.512-15.983,93.729-41.398c10.498,3.321,21.607,5.14,33.188,5.14

-						c14.021,0,27.453-2.664,39.768-7.521c26.645,28.299,64.448,45.974,106.38,45.974c47.869,0,90.364-23.05,117.034-58.682

-						c17.785,12.708,39.564,20.183,63.068,20.229L789.498,409.698L789.498,409.698z"/>

-				</g>

-			</g>

-			<g id="Shape_83">

-				<g>

-					<path d="M499.475,474.65c110.623,0,200.312-27.154,200.312-71.583c0-69.062-89.699-125.049-200.322-125.049

-						c-110.595,0-200.295,55.992-200.295,125.049C299.166,447.496,388.866,474.65,499.475,474.65z M859.41,484.516

-						c0-38.002,46.492-37.02,35.742-76.509c-9.164-33.679-99.725-37.777-173.701-51.585c10.469,17.373,16.306,36.402,16.306,56.511

-						c0,58.479-89.138,96.271-227.112,96.271c-3.812,0-7.438-0.146-11.184-0.21c-3.733,0.064-7.354,0.21-11.156,0.21

-						c-137.974,0-227.14-37.791-227.14-96.271c0-20.124,5.866-39.138,16.32-56.511c-73.968,13.809-164.538,17.906-173.702,51.585

-						c-10.735,39.489,35.756,38.493,35.756,76.509c0,27.154-134.128,49.094-134.128,107.788

-						c0,96.271,371.104,129.181,494.05,129.181c122.943,0,494.078-32.908,494.078-129.181

-						C993.539,533.604,859.41,511.67,859.41,484.516z"/>

-				</g>

-			</g>

-			<g id="Shape_33">

-				<g>

-					<path d="M990.29,596.405V6.813L324.652,72.887v614.982C191.951,627.508,36.456,708.39,10.644,828.287

-						c-8.379,39.018,9.007,81.205,25.14,100.561c90.846,108.438,288.869,57.854,379.93-58.69

-						c40.396-51.712,37.012-96.895,37.012-207.709c0-130.248,0-319.392,0-465.021l409.501-33.27c0,200.781,0,457.678,0,457.678

-						c-132.719-60.36-288.215,20.521-314.029,140.419c-8.387,39.021,9.021,81.204,25.14,100.562

-						c90.854,108.438,288.896,57.867,379.931-58.695C993.657,752.402,990.29,707.226,990.29,596.405z"/>

-				</g>

-			</g>

-			<g id="Shape_86">

-				<g>

-					<path d="M91.753-1.502v1001.5h814.443V-1.502H91.753z M237.116,929.453h-74.833v-74.817h74.833V929.453z M237.116,817.229

-						h-74.833v-74.812h74.833V817.229z M237.116,705.002h-74.833v-74.814h74.833V705.002z M237.116,592.777h-74.833V517.96h74.833

-						V592.777z M237.116,480.552h-74.833v-74.833h74.833V480.552z M237.116,368.311h-74.833v-74.817h74.833V368.311z

-						 M237.116,256.086h-74.833v-74.817h74.833V256.086z M237.116,143.86h-74.833V69.044h74.833V143.86z M709.234,929.453H288.714

-						V517.96h420.521L709.234,929.453L709.234,929.453z M709.234,480.552H288.714V69.044h420.521L709.234,480.552L709.234,480.552z

-						 M835.666,929.453H760.85v-74.817h74.816V929.453L835.666,929.453z M835.666,817.229H760.85v-74.812h74.816V817.229

-						L835.666,817.229z M835.666,705.002H760.85v-74.814h74.816V705.002L835.666,705.002z M835.666,592.777H760.85V517.96h74.816

-						V592.777L835.666,592.777z M835.666,480.552H760.85v-74.833h74.816V480.552L835.666,480.552z M835.666,368.311H760.85v-74.817

-						h74.816V368.311L835.666,368.311z M835.666,256.086H760.85v-74.817h74.816V256.086L835.666,256.086z M835.666,143.86H760.85

-						V69.044h74.816V143.86L835.666,143.86z"/>

-				</g>

-			</g>

-			<g id="Shape_106">

-				<g>

-					<path d="M540.389,207.571c-45.938,0-83.215,37.308-83.215,83.232c0,45.908,37.273,83.216,83.215,83.216

-						c45.942,0,83.232-37.308,83.232-83.216C623.621,244.879,586.331,207.571,540.389,207.571z M540.439,915.974V527.209

-						L986.381,57.916L12.678,57.354L450.1,527.226h7.104v388.747c-141.174,5.779-249.681,40.401-249.681,82.27H790.12

-						C790.12,956.375,681.529,921.753,540.439,915.974z M499.138,467.993L141.495,124.339h714.572L512.446,466.923L499.138,467.993z

-						"/>

-				</g>

-			</g>

-			<g id="Shape_105">

-				<g>

-					<path d="M465.875,4.779C182.97,22.61-29.022,287.27,8.874,566.536c34.72,255.992,267.902,443.421,524.738,427.192

-						C791.934,977.453,993.128,755.486,995.46,499.26C992.912,215.2,750.186-13.168,465.875,4.779z M243.329,620.659

-						c-7.758-1.837-15.499-3.656-23.257-5.492c-39.848-9.396-56.77,51.856-16.889,61.269c7.989,1.892,15.979,3.771,23.952,5.657

-						c-1.489,4.698-3.027,9.379-4.632,14.044c-8.783-3.474-17.566-6.941-26.35-10.438c-16.111-6.401-34.853,6.848-39.07,22.197

-						c-4.962,18.062,6.104,32.687,22.198,39.088c6.567,2.597,13.15,5.188,19.717,7.808c-1.985,4.317-4.102,8.585-6.203,12.869

-						c-6.914-3.806-13.828-7.626-20.743-11.414c-7.725-4.251-15.201-4.896-21.917-3.357c-24.001-33.028-43.52-69.341-57.448-107.812

-						c-47.325-130.646-25.837-276.173,50.897-390.82c2.067-3.077,4.218-6.054,6.352-9.048c6.468,1.24,13.597,0.446,20.941-3.59

-						c7.642-4.218,15.301-8.419,22.959-12.638c2.118,4.317,4.251,8.618,6.27,12.985c-6.931,2.746-13.862,5.491-20.792,8.254

-						c-16.095,6.352-27.177,21.008-22.198,39.07c4.218,15.334,22.959,28.566,39.07,22.182c9.164-3.622,18.311-7.245,27.475-10.867

-						c1.621,4.714,3.242,9.445,4.764,14.226c-8.75,2.051-17.467,4.118-26.218,6.17c-39.864,9.412-22.943,70.697,16.889,61.285

-						c8.403-1.985,16.79-3.97,25.208-5.938c0.91,4.466,1.771,8.966,2.581,13.448c-5.955,0.761-11.91,1.505-17.881,2.266

-						c-17.187,2.184-31.776,12.819-31.776,31.776c0,15.664,14.54,33.959,31.776,31.759c8.568-1.071,17.153-2.167,25.721-3.237

-						c0.348,4.812,0.811,9.645,1.026,14.475h-26.764c-40.973,0-40.973,63.552,0,63.552h26.483

-						c-0.281,4.813-0.811,9.596-1.208,14.424c-9.958-1.271-19.932-2.525-29.89-3.787c-17.203-2.185-31.775,16.1-31.775,31.774

-						c0,18.957,14.623,29.593,31.775,31.76c7.196,0.909,14.358,1.837,21.537,2.729C245.082,611.743,244.255,616.209,243.329,620.659

-						z M722.115,869.836c-105.616,63.204-234.456,77.529-352.857,41.568c-32.504-9.875-63.387-23.919-92.201-41.369

-						c18.973-10.951,26.632-41.389,1.803-55.05c-9.975-5.479-19.965-10.973-29.939-16.458c3.259-6.688,6.468-13.399,9.527-20.187

-						c10.239,4.059,20.479,8.089,30.718,12.157c16.111,6.401,34.869-6.848,39.07-22.182c4.962-18.079-6.104-32.702-22.198-39.09

-						c-8.139-3.229-16.276-6.438-24.415-9.657c2.613-7.595,5.111-15.201,7.46-22.876c9.396,2.216,18.791,4.433,28.187,6.646

-						c39.854,9.412,56.771-51.854,16.895-61.269c-9.729-2.283-19.47-4.604-29.212-6.883c1.39-6.637,2.68-13.281,3.87-19.969

-						c10.967,1.395,21.934,2.778,32.885,4.169c17.235,2.169,31.771-16.107,31.771-31.771c0-18.956-14.591-29.594-31.771-31.775

-						c-8.188-1.021-16.376-2.062-24.581-3.094c0.629-7.443,1.142-14.903,1.521-22.38h28.604c40.989,0,40.989-63.535,0-63.535h-28.16

-						c-0.033-0.744-0.017-1.488-0.05-2.25c-0.312-6.765-0.761-13.497-1.273-20.213c9.825-1.24,19.651-2.481,29.479-3.723

-						c17.187-2.188,31.771-12.808,31.771-31.775c0-15.681-14.539-33.942-31.771-31.775c-12.423,1.588-24.861,3.159-37.301,4.73

-						c-1.18-6.731-2.438-13.431-3.821-20.081c9.347-2.216,18.709-4.416,28.038-6.616c39.881-9.429,22.959-70.697-16.891-61.285

-						c-8.97,2.117-17.945,4.251-26.934,6.368c-2.398-7.741-4.929-15.416-7.592-23.025c7.758-3.076,15.532-6.153,23.29-9.213

-						c16.095-6.386,27.16-21.024,22.198-39.087c-4.223-15.334-22.959-28.584-39.07-22.198c-10.024,3.97-20.031,7.939-30.056,11.909

-						c-3.126-6.799-6.368-13.53-9.71-20.197c8.718-4.797,17.435-9.594,26.136-14.391c24.134-13.266,17.533-42.329-0.281-54.007

-						c104.789-62.374,235.3-79.263,354.977-42.889c33.691,10.223,65.318,24.646,94.48,42.527

-						c-18.162,11.463-25.105,40.973-0.761,54.371c8.701,4.797,17.418,9.594,26.119,14.391c-3.325,6.667-6.567,13.396-9.693,20.181

-						c-10.008-3.953-20.031-7.923-30.039-11.893c-16.128-6.402-34.869,6.864-39.087,22.198c-4.963,18.062,6.104,32.701,22.186,39.07

-						c7.771,3.06,15.551,6.153,23.309,9.229c-2.663,7.609-5.178,15.268-7.576,23.009c-8.979-2.117-17.964-4.251-26.929-6.352

-						c-39.864-9.412-56.786,51.84-16.895,61.269c9.329,2.2,18.691,4.417,28.021,6.617c-1.373,6.649-2.646,13.332-3.807,20.064

-						c-12.438-1.572-24.882-3.144-37.304-4.715c-17.23-2.167-31.792,16.095-31.792,31.776c0,18.973,14.605,29.592,31.792,31.771

-						c9.812,1.24,19.638,2.481,29.479,3.728c-0.517,6.716-0.979,13.442-1.274,20.213c-0.03,0.745-0.03,1.483-0.062,2.25h-28.142

-						c-41.006,0-41.006,63.534,0,63.534h28.583c0.397,7.461,0.896,14.938,1.521,22.358c-8.188,1.042-16.396,2.085-24.58,3.11

-						c-17.188,2.167-31.775,12.814-31.775,31.771c0,15.665,14.561,33.942,31.775,31.775c10.967-1.389,21.934-2.778,32.884-4.168

-						c1.19,6.683,2.48,13.332,3.871,19.948c-9.729,2.3-19.47,4.599-29.195,6.896c-39.881,9.396-22.976,70.687,16.894,61.271

-						c9.38-2.22,18.791-4.438,28.17-6.649c2.35,7.658,4.848,15.284,7.461,22.859c-8.144,3.226-16.276,6.448-24.438,9.677

-						c-16.074,6.368-27.145,21.008-22.182,39.087c4.218,15.334,22.959,28.584,39.087,22.183

-						c10.239-4.053,20.479-8.104,30.717-12.152c3.062,6.777,6.271,13.497,9.528,20.164c-9.978,5.508-19.967,11-29.925,16.475

-						C695.964,828.565,703.391,858.736,722.115,869.836z M827.417,756.264c-6.914,3.811-13.846,7.626-20.76,11.414

-						c-2.104-4.284-4.201-8.552-6.203-12.869c6.584-2.608,13.146-5.211,19.718-7.808c16.111-6.385,27.177-21.023,22.198-39.087

-						c-4.201-15.352-22.942-28.6-39.07-22.198c-8.783,3.49-17.562,6.964-26.334,10.438c-1.621-4.665-3.143-9.352-4.646-14.044

-						c7.984-1.892,15.963-3.771,23.946-5.657c39.864-9.396,22.942-70.664-16.889-61.271c-7.741,1.836-15.479,3.654-23.257,5.491

-						c-0.927-4.45-1.737-8.916-2.58-13.382c7.179-0.91,14.357-1.82,21.536-2.713c17.17-2.188,31.772-12.819,31.772-31.776

-						c0-15.681-14.559-33.959-31.772-31.771c-9.978,1.257-19.935,2.515-29.892,3.771c-0.385-4.812-0.931-9.594-1.209-14.405h26.479

-						c40.989,0,40.989-63.554,0-63.554H743.7c0.229-4.812,0.689-9.644,1.042-14.474c8.562,1.075,17.137,2.167,25.722,3.242

-						c17.236,2.194,31.776-16.101,31.776-31.765c0-18.957-14.606-29.593-31.776-31.771c-5.971-0.744-11.926-1.505-17.881-2.266

-						c0.794-4.483,1.654-8.966,2.581-13.465c8.402,1.985,16.806,3.97,25.208,5.955c39.849,9.412,56.753-51.857,16.889-61.269

-						c-8.729-2.068-17.479-4.136-26.218-6.188c1.506-4.781,3.127-9.512,4.747-14.226c9.164,3.622,18.328,7.262,27.492,10.884

-						c16.128,6.385,34.869-6.864,39.064-22.198c4.979-18.062-6.087-32.719-22.192-39.07c-6.937-2.746-13.861-5.509-20.812-8.254

-						c2.034-4.351,4.151-8.668,6.271-12.985c7.656,4.218,15.334,8.437,22.976,12.638c6.933,3.821,13.729,4.797,19.916,3.838

-						c52.271,72.881,82.541,161.812,83.385,253.812c-0.811,91.897-30.089,180.525-82.651,253.604

-						C842.535,751.368,835.075,752.029,827.417,756.264z"/>

-				</g>

-			</g>

-			<g id="Shape_89">

-				<g>

-					<path d="M710.807,331.839c-46.459-12.13-86.855-26.955-121.222-41.932c4.8,36.162,8.813,77.943,10.191,121.919

-						c33.134,2.71,67.706-13.462,67.706-13.462s-27.41,54.271-67.561,65.616c-1.09,46.41-5.812,88.401-14.144,125.729

-						c17.653-6.208,37.222-8.329,58.438-2.786c91.146,23.854,89.754,153.25,89.754,153.25s-48.05-64.465-108.771-80.271

-						c-19.812-5.164-40.917-5.136-60.438-2.808c-17.34,41.613-40.896,74.823-70.562,99.021

-						c23.271,25.938,53.026,45.598,91.354,55.637C852.865,881.537,990.778,353.02,990.778,353.02S874.143,374.482,710.807,331.839z

-						 M766.777,515.118c-54.668-14.25-50.7-104.08-50.7-104.08s28.56,39.918,64.979,49.442c36.45,9.521,80.854-11.326,80.854-11.326

-						S821.475,529.398,766.777,515.118z M543.791,176.393c0,0-92.404,74.354-256.345,114.483

-						c-163.987,40.13-280.272,16.93-280.272,16.93s129.914,530.53,398.238,464.792C673.752,706.908,543.791,176.393,543.791,176.393

-						z M155.518,491.237c0,0-2.65-89.875,52.244-103.292c54.879-13.432,94.085,67.448,94.085,67.448s-44.052-21.519-80.653-12.563

-						C184.607,451.789,155.518,491.237,155.518,491.237z M385.983,693.34c-91.481,22.381-151.875-92.087-151.875-92.087

-						s72.96,33.876,133.942,18.929c60.967-14.961,110.021-78.639,110.021-78.639S477.464,670.928,385.983,693.34z M418.087,397.999

-						c-36.768,8.087-66.782,46.899-66.782,46.899s-0.545-89.906,54.622-102.083c55.167-12.16,92.496,69.583,92.496,69.583

-						S454.87,389.868,418.087,397.999z"/>

-				</g>

-			</g>

-			<g id="Shape_120">

-				<g>

-					<path d="M812.992,241.865c-76.589,0-138.329-14.593-177.104,4.792c0,0-95.729,19.14-114.884,19.14

-						c-19.14,0-100.508-4.792-148.373-14.362c-47.863-9.57-263.27-19.141-359,23.932v52.657c0,0,19.154,14.362,23.932,19.141

-						c4.792,4.792,33.517,57.435,43.086,90.951c9.57,33.503,38.295,119.662,224.962,100.508c0,0,18.762-2.212,44.094-12.983

-						c-10.086,22.481-17.188,48.232-14.951,70.885c2.003,20.191,11.154,36.265,26.464,46.471c3.438,2.292,7.18,4.687,11.151,7.145

-						c-28.188,28.314-43.93,50.475-75.598,52.903c-41.76,3.235-53.063-22.483-46.646-40.677c6.01-17.021,36.995-2.234,40.148,5.896

-						c-1.326-7.77-8.73-42.667-36.318-45.51c-31.053-3.208-38.187,31.854-38.187,48.979s4.075,90.188,129.341,90.188

-						c83.39,0,129.389-35.084,150.829-58.539c3.355,0.46,6.545,0.729,9.47,0.729c3.208,0,6.24-0.271,8.988-0.826

-						c2.06-0.413,5.354-1.469,9.579-3.077c20.312,23.312,67.021,61.717,154.289,61.717c125.252,0,130.127-73.065,130.127-90.188

-						c0-17.123-7.178-52.188-38.217-48.979c-27.567,2.844-35.027,37.713-36.346,45.51c3.143-8.136,34.031-22.897,40.014-5.896

-						c6.444,18.188-5.062,43.912-46.816,40.677c-37.356-2.87-52.873-33.158-92.521-68.641

-						c19.869-17.592,34.096-36.749,34.096-55.205c0-16.688-7.438-34.566-17.481-51.701c24.354,6.919,87.404,21.376,147.501,6.354

-						c76.589-19.153,90.952-28.729,124.454-110.097c33.503-81.367,38.295-71.797,43.071-76.589

-						c4.794-4.778,19.15-4.778,19.15-47.865v-23.933C985.311,275.368,889.581,241.865,812.992,241.865z M602.479,611.091

-						c-46.147-21.688-91.174,10.58-91.174,10.58s-55.932-40.678-107.33,0c-0.683,0.541-1.334,1.079-2.004,1.618

-						c-6.8-3.981-13.367-8.062-19.505-12.15c-3.574-2.383-8.46-6.89-9.598-18.396c-2.992-30.279,22.254-76.75,36.454-90.95

-						c25.524-25.53,50.024-69.402,51.059-71.256l0.866-1.543l0.569-1.692c0.771-2.328,2.024-6.562,3.668-12.114

-						c1.188-4.021,2.344-7.859,3.467-11.55c6.713-14.134,8.78-23.204,9.642-30.157c3.775-11.157,7.034-19.93,9.834-26.82

-						c5.69-3.554,14.562-6.617,23.062-6.028c5.845,9.472,10.411,21.106,8.993,29.599c-4.209,25.313,14.146,54.322,36.732,86.863

-						c4.55,6.565,10.809,15.559,11.858,18.071c2.409,7.242,8.104,14.863,19.722,30.038c15.526,20.291,41.521,54.254,41.521,73.989

-						C630.317,582.206,624.613,593.302,602.479,611.091z M323.014,509.062c-47.865,9.564-201.042,38.295-229.754-119.667

-						c0,0-28.724-81.367,23.933-105.3c52.643-23.932,191.459-14.362,220.184-9.57c28.71,4.779,100.508,19.141,95.729,100.508

-						c-0.594,9.989-1.979,19.397-4.033,28.241c-0.104,0.352-0.208,0.692-0.312,1.052c-1.137,3.844-2.058,6.998-2.748,9.188

-						c-4.413,7.7-24.433,41.854-43.771,61.196c-3.58,3.581-7.604,8.454-11.758,14.292

-						C355.064,499.325,338.536,505.957,323.014,509.062z M910.48,384.647C881.754,542.605,728.59,513.894,680.725,504.309

-						c-26.891-5.376-56.806-21.323-78.707-48.698c-2.854-5.178-7.145-11.429-13.341-20.351c-0.227-0.326-0.467-0.672-0.707-1.018

-						c-9.505-17.839-15.878-39.104-17.337-63.943c-4.792-81.381,67.005-95.729,95.729-100.521

-						c28.724-4.792,167.521-14.362,220.185,9.57C939.191,303.28,910.48,384.647,910.48,384.647z"/>

-				</g>

-			</g>

-			<g id="Shape_117">

-				<g>

-					<path d="M784.293,331.32c-36.211,0-74.01,10.757-110.783,35.085c0-7.497,6.074-8.938,7.354-14.994

-						c19.146-42.747,33.018-55.026,37.48-89.78C739.395,101.432,615.869,18.585,494.18,18.585

-						c-111.544,0-221.581,69.607-217.443,213.058c1.439,51.999,34.292,89.632,37.468,127.266

-						c-35.234-19.048-69.607-27.438-101.746-27.438c-117.766,0-206.355,112.205-205.082,222.011

-						C8.817,690.711,119.003,773.47,238.375,773.47c12.759,0,25.519-0.96,38.362-2.857

-						c98.718-14.685,159.636-94.249,209.715-172.164c0.646,201.59-94.896,298.719-239.686,344.328

-						c-23.765,7.479-72.09-1.758-81.986,37.138h666.314l7.021-7.166c-89.473-39.868-177.99-47.845-239.395-112.271

-						c-60.121-62.84-78.625-146.729-89.94-262.026c45.543,108.929,158.924,168.408,264.262,168.408

-						c103.896,0,199.818-57.896,214.812-183.319C1004.137,447.415,903.102,331.32,784.293,331.32z"/>

-				</g>

-			</g>

-			<g id="Shape_35_2_">

-				<g>

-					<path d="M359.044,692.846c-38.815,0-70.215,31.398-70.215,70.229c0,38.73,31.396,70.207,70.215,70.207

-						c38.744,0,70.215-31.477,70.215-70.207C429.259,724.244,397.788,692.846,359.044,692.846z M745.225,692.846

-						c-38.795,0-70.209,31.398-70.209,70.229c0,38.73,31.414,70.207,70.209,70.207c38.75,0,70.229-31.477,70.229-70.207

-						C815.447,724.244,783.975,692.846,745.225,692.846z M201.57,271.554l-70.727-105.333H60.621

-						c-29.104,0-52.66,23.592-52.66,52.667c0,29.075,23.556,52.667,52.66,52.667h31.025l179.627,351.069h601.474l118.241-351.069

-						L201.57,271.554L201.57,271.554z M675.016,324.207c9.691,0,17.562,7.82,17.562,17.556c0,9.677-7.865,17.556-17.562,17.556

-						c-9.705,0-17.555-7.879-17.555-17.556C657.461,332.027,665.311,324.207,675.016,324.207z M639.904,394.429

-						c9.707,0,17.557,7.82,17.557,17.556c0,9.661-7.85,17.541-17.557,17.541c-9.691,0-17.561-7.879-17.561-17.541

-						C622.35,402.249,630.213,394.429,639.904,394.429z M604.809,324.207c9.691,0,17.541,7.82,17.541,17.556

-						c0,9.677-7.85,17.556-17.541,17.556c-9.707,0-17.541-7.879-17.541-17.556C587.268,332.027,595.102,324.207,604.809,324.207z

-						 M569.727,394.429c9.77,0,17.541,7.82,17.541,17.556c0,9.661-7.771,17.541-17.541,17.541c-9.678,0-17.556-7.879-17.556-17.541

-						C552.171,402.249,560.049,394.429,569.727,394.429z M464.363,324.207c9.706,0,17.556,7.82,17.556,17.556

-						c0,9.677-7.85,17.556-17.556,17.556c-9.699,0-17.548-7.879-17.548-17.556C446.815,332.027,454.665,324.207,464.363,324.207z

-						 M394.155,324.207c9.693,0,17.548,7.82,17.548,17.556c0,9.677-7.854,17.556-17.548,17.556c-9.706,0-17.562-7.879-17.562-17.556

-						C376.6,332.027,384.449,324.207,394.155,324.207z M323.933,324.207c9.706,0,17.562,7.82,17.562,17.556

-						c0,9.677-7.854,17.556-17.562,17.556s-17.556-7.879-17.556-17.556C306.377,332.027,314.227,324.207,323.933,324.207z

-						 M253.718,359.318c-9.772,0-17.556-7.879-17.556-17.556c0-9.735,7.784-17.556,17.556-17.556c9.699,0,17.556,7.82,17.556,17.556

-						C271.273,351.439,263.417,359.318,253.718,359.318z M288.829,429.526c-9.706,0-17.556-7.879-17.556-17.541

-						c0-9.735,7.85-17.556,17.556-17.556c9.699,0,17.548,7.82,17.548,17.556C306.377,421.647,298.528,429.526,288.829,429.526z

-						 M323.933,499.748c-9.706,0-17.556-7.879-17.556-17.556c0-9.735,7.85-17.562,17.556-17.562s17.562,7.821,17.562,17.562

-						C341.489,491.869,333.639,499.748,323.933,499.748z M359.044,394.429c9.699,0,17.556,7.82,17.556,17.556

-						c0,9.661-7.854,17.541-17.556,17.541c-9.706,0-17.555-7.879-17.555-17.541C341.489,402.249,349.338,394.429,359.044,394.429z

-						 M359.044,569.971c-9.706,0-17.526-7.894-17.526-17.556c0-9.735,7.821-17.556,17.526-17.556

-						c9.699,0,17.556,7.814,17.556,17.556C376.6,562.077,368.743,569.971,359.044,569.971z M394.155,499.748

-						c-9.706,0-17.562-7.879-17.562-17.556c0-9.735,7.854-17.562,17.562-17.562c9.693,0,17.548,7.821,17.548,17.562

-						C411.704,491.869,403.854,499.748,394.155,499.748z M429.259,394.429c9.699,0,17.562,7.82,17.562,17.556

-						c0,9.661-7.857,17.541-17.562,17.541c-9.706,0-17.556-7.879-17.556-17.541C411.704,402.249,419.553,394.429,429.259,394.429z

-						 M429.259,569.971c-9.706,0-17.519-7.894-17.519-17.556c0-9.735,7.812-17.556,17.519-17.556

-						c9.699,0,17.562,7.814,17.562,17.556C446.815,562.077,438.958,569.971,429.259,569.971z M464.363,499.748

-						c-9.699,0-17.548-7.879-17.548-17.556c0-9.735,7.85-17.562,17.548-17.562c9.706,0,17.556,7.821,17.556,17.562

-						C481.919,491.869,474.069,499.748,464.363,499.748z M499.475,569.971c-9.705,0-17.521-7.894-17.521-17.556

-						c0-9.735,7.815-17.556,17.521-17.556c9.699,0,17.562,7.814,17.562,17.556C517.03,562.077,509.174,569.971,499.475,569.971z

-						 M499.475,429.526c-9.705,0-17.556-7.879-17.556-17.541c0-9.735,7.851-17.556,17.556-17.556c9.699,0,17.562,7.82,17.562,17.556

-						C517.03,421.647,509.174,429.526,499.475,429.526z M534.586,324.207c9.706,0,17.556,7.82,17.556,17.556

-						c0,9.677-7.85,17.556-17.556,17.556s-17.556-7.879-17.556-17.556C517.03,332.027,524.88,324.207,534.586,324.207z

-						 M534.586,499.748c-9.706,0-17.526-7.879-17.526-17.556c0-9.735,7.82-17.562,17.526-17.562s17.556,7.821,17.556,17.562

-						C552.142,491.869,544.292,499.748,534.586,499.748z M569.58,569.971c-9.662,0-17.438-7.894-17.438-17.556

-						c0-9.735,7.776-17.556,17.438-17.556c9.779,0,17.57,7.814,17.57,17.556C587.15,562.077,579.359,569.971,569.58,569.971z

-						 M604.809,499.748c-9.707,0-17.541-7.879-17.541-17.556c0-9.735,7.834-17.562,17.541-17.562

-						c9.691,0,17.541,7.821,17.541,17.562C622.35,491.869,614.5,499.748,604.809,499.748z M639.803,569.971

-						c-9.677,0-17.453-7.894-17.453-17.556c0-9.735,7.776-17.556,17.453-17.556c9.77,0,17.562,7.814,17.562,17.556

-						C657.358,562.077,649.566,569.971,639.803,569.971z M674.914,499.748c-9.677,0-17.453-7.879-17.453-17.556

-						c0-9.735,7.776-17.562,17.453-17.562c9.764,0,17.541,7.821,17.541,17.562C692.455,491.869,684.678,499.748,674.914,499.748z

-						 M710.127,394.429c9.691,0,17.557,7.82,17.557,17.556c0,9.661-7.859,17.541-17.557,17.541c-9.705,0-17.555-7.879-17.555-17.541

-						C692.572,402.249,700.422,394.429,710.127,394.429z M710.127,569.971c-9.705,0-17.525-7.894-17.525-17.556

-						c0-9.735,7.82-17.556,17.525-17.556c9.691,0,17.557,7.814,17.557,17.556C727.684,562.077,719.818,569.971,710.127,569.971z

-						 M745.137,499.748c-9.678,0-17.453-7.879-17.453-17.556c0-9.735,7.775-17.562,17.453-17.562c9.77,0,17.541,7.821,17.541,17.562

-						C762.678,491.869,754.9,499.748,745.137,499.748z M745.225,359.318c-9.707,0-17.541-7.879-17.541-17.556

-						c0-9.735,7.834-17.556,17.541-17.556c9.705,0,17.57,7.82,17.57,17.556C762.795,351.439,754.93,359.318,745.225,359.318z

-						 M780.336,569.971c-9.707,0-17.512-7.894-17.512-17.556c0-9.735,7.805-17.556,17.512-17.556

-						c9.705,0,17.555,7.814,17.555,17.556C797.891,562.077,790.041,569.971,780.336,569.971z M780.336,429.526

-						c-9.707,0-17.512-7.879-17.512-17.541c0-9.735,7.805-17.556,17.512-17.556c9.705,0,17.555,7.82,17.555,17.556

-						C797.891,421.647,790.041,429.526,780.336,429.526z M815.447,499.748c-9.707,0-17.518-7.879-17.518-17.556

-						c0-9.735,7.811-17.562,17.518-17.562c9.705,0,17.555,7.821,17.555,17.562C833.002,491.869,825.152,499.748,815.447,499.748z

-						 M815.447,359.318c-9.707,0-17.518-7.879-17.518-17.556c0-9.735,7.811-17.556,17.518-17.556c9.705,0,17.555,7.82,17.555,17.556

-						C833.002,351.439,825.152,359.318,815.447,359.318z M850.558,429.526c-9.706,0-17.521-7.879-17.521-17.541

-						c0-9.735,7.814-17.556,17.521-17.556s17.562,7.82,17.562,17.556C868.113,421.647,860.264,429.526,850.558,429.526z

-						 M885.669,359.318c-9.706,0-17.556-7.879-17.556-17.556c0-9.735,7.85-17.556,17.556-17.556s17.541,7.82,17.541,17.556

-						C903.21,351.439,895.375,359.318,885.669,359.318z"/>

-				</g>

-			</g>

-			<g id="Shape_101_2_">

-				<g>

-					<path d="M697.507,227.15c-0.096-106.755-12.133-141.453-14.778-147.828C658.545,11.063,594.662,8.856,589.37,8.787

-						c-1.097-0.027-2.193-0.027-3.263-0.027c-25.259,0-45.666,8.034-60.664,23.868c-26.336,27.803-25.486,69.945-25.295,75.086

-						v98.173l-21.062-2.262l-0.247-33.767c1.206-52.85-10.118-91.866-33.684-116.009c-22.188-22.716-48.202-24.485-55.646-24.485

-						c-0.754,0-1.396,0.027-1.858,0.041c-1.144-0.041-2.268-0.055-3.392-0.055c-27.235,0-49.773,9.13-66.979,27.104

-						c-36.426,38.043-35.042,102.697-34.835,108.62v48.161l-104.726,14.999l-0.165-0.014v625.646l453.164,136.669l0.658,0.206

-						l189.93-92.251V240.503l0.102-0.014L697.507,227.15z M282.428,240.86l-80.392-11.104l80.392-11.516V240.86z M344.038,82.16

-						c10.896-11.091,24.636-16.013,42.485-15.094l0.768,0.055l1.535-0.083c4.14,0,18.618,1.028,31.491,14.23

-						c16.104,16.506,24.109,46.584,23.149,87.055l-0.014,0.219l0.206,31.298l-38.757-4.181l-87.041,12.462v-44.254

-						C317.839,163.32,317.291,109.318,344.038,82.16z M317.839,245.727v-32.574l87.151-12.489l38.702,4.017l0.384,58.47

-						L317.839,245.727z M534.338,107.838c-0.014-0.315-1.221-31.751,16.054-50.053c8.705-9.171,20.646-13.627,36.535-13.627

-						c0.796,0,1.591,0.027,2.742,0.027c1.823,0.014,45.159,1.069,61.528,47.805l0.188,0.548

-						c0.123,0.302,11.652,32.135,11.892,130.911l-128.979-13.888l0.068-100.956L534.338,107.838z M631.25,288.98l-151.722-20.934

-						l-0.439-59.718l328.464,34.041L631.25,288.98z"/>

-				</g>

-			</g>

-			<g id="Shape_110_2_">

-				<g>

-					<path d="M575.712,422.511V159.448H422.236V422.51H159.174v153.479h263.062v263.079h153.476v-263.08h263.08V422.511H575.712z

-						 M498.975,7.371C227.754,7.371,7.097,228.028,7.097,499.248c0,271.221,220.657,491.878,491.875,491.878

-						c271.226,0,491.878-220.657,491.878-491.878C990.852,228.028,770.194,7.371,498.975,7.371z M498.975,938.018

-						c-241.938,0-438.75-196.819-438.75-438.77c0-241.927,196.808-438.752,438.75-438.752

-						c241.933,0,438.752,196.825,438.752,438.752C937.727,741.192,740.901,938.018,498.975,938.018z"/>

-				</g>

-			</g>

-			<g id="Shape_121_2_">

-				<g>

-					<path d="M821.111,934.699H177.838c-16.39,0-29.703,13.297-29.703,29.702c0,16.39,13.313,29.687,29.703,29.687h643.273

-						c16.401,0,29.703-13.297,29.703-29.687C850.814,947.996,837.518,934.699,821.111,934.699z M177.838,232.035h643.273

-						c16.401,0,29.703-13.298,29.703-29.688c0-16.39-13.302-29.687-29.703-29.687H699.994l28.389-40.229

-						c2.82,0.384,5.688,0.641,8.619,0.641c35.518,0,64.324-28.806,64.324-64.324c0-35.534-28.812-64.34-64.324-64.34

-						c-35.535,0-64.34,28.806-64.34,64.34c0,10.622,2.627,20.619,7.193,29.463l-52.555,74.449H177.838

-						c-16.39,0-29.703,13.297-29.703,29.687C148.135,218.737,161.448,232.035,177.838,232.035z M789.822,271.622

-						c-24.592,0-156.748,0-289.546,0c-0.545,0-1.062,0-1.586,0c-132.814,0-264.958,0-289.563,0

-						c-29.687,0-23.519,21.597-19.786,29.688c32.442,70.557,118.748,192.988,118.748,282.065

-						c0,89.061-86.305,211.492-118.748,282.049c-3.733,8.107-9.901,29.688,19.786,29.688c24.592,0,156.749,0,289.563,0

-						c0.523,0,1.041,0,1.586,0c132.798,0,264.938,0,289.546,0c29.688,0,23.52-21.58,19.787-29.688

-						c-32.443-70.557-118.748-192.986-118.748-282.049c0-89.077,86.305-211.509,118.748-282.065

-						C813.342,293.219,819.51,271.622,789.822,271.622z"/>

-				</g>

-			</g>

-			<g id="Shape_111_2_">

-				<g>

-					<path d="M712.756,918.966V681.912L440.343,403.979L167.916,681.912v237.039h213.345V722.109

-						c0-31.655,25.669-57.312,57.324-57.312c31.654,0,57.31,25.655,57.31,57.312v196.854L712.756,918.966L712.756,918.966z

-						 M314,835.333h-77.255v-27.805H314V835.333z M314,791.868h-77.255v-82.209H314V791.868z M438.585,580.077

-						c-17.897,0-32.396-14.513-32.396-32.396c0-17.896,14.493-32.404,32.396-32.404s32.396,14.513,32.396,32.404

-						C470.98,565.564,456.483,580.077,438.585,580.077z M563.155,709.659h77.255v82.209h-77.255V709.659z M563.155,807.528h77.255

-						v27.805h-77.255V807.528z M440.343,385.951l307.075,314.033l18.914-18.514l-228.657-233.84V238.806l-97.332-99.758

-						l-97.332,99.758v208.828L114.354,681.479l18.914,18.512L440.343,385.951z M123.812,959.482h633.063v-26.875H123.812V959.482z

-						 M871.377,338.651c-16.183-16.561-42.434-16.561-58.631,0v-16.503h-11.375v650.989H67.926v26.861h744.82V414.846

-						c16.197-16.546,42.448-16.546,58.646,0h-0.017c16.213,16.546,42.463,16.546,58.646,0v-76.208

-						C913.826,355.197,887.59,355.197,871.377,338.651z M440.343,121.078L584.191,268.18l18.896-18.508L446.038,89.046V-1.502

-						h-11.389v90.533L277.581,249.672l18.915,18.508L440.343,121.078z"/>

-				</g>

-			</g>

-			<g id="Shape_122_2_">

-				<g>

-					<path d="M67.386,225.596l403.275,331.261l460.918-331.261c28.812-23.666,57.608-43.219,0-43.219H67.386

-						C9.761,182.377,38.573,201.93,67.386,225.596z M470.661,643.277L9.761,268.798v489.714c0,28.795,29.174,57.608,52.221,57.608

-						h875.003c23.023,0,52.202-28.813,52.202-57.608V268.798L470.661,643.277z"/>

-				</g>

-			</g>

-			<g id="Shape_112_2_">

-				<g>

-					<path d="M256.099,378.068l0.094,0.094l237.603-237.603l-0.078-0.078c14.507-14.507,14.507-38.273,0-52.796

-						c-14.507-14.507-38.289-14.507-52.796,0L203.303,325.272c-14.521,14.507-14.521,38.289,0,52.795

-						C217.81,392.59,241.576,392.59,256.099,378.068z M836.928,430.896c-14.507-14.513-38.271-14.513-52.795,0l-0.146-0.15

-						l-238.9,239.321c-13.026,14.61-12.543,37.235,1.459,51.258c14.521,14.507,38.289,14.507,52.795,0L836.928,483.69

-						C851.436,469.184,851.436,445.417,836.928,430.896z M533.404,180.182l-238.112,237.08l66.428,66.434L18.511,826.916

-						c-14.507,14.507-14.507,38.289,0,52.796l26.405,26.405c14.507,14.508,38.273,14.508,52.796,0l343.21-343.229l65.612,65.612

-						l236.671-238.534L533.404,180.182z"/>

-				</g>

-			</g>

-			<g id="Shape_118_4_">

-				<g>

-					<path d="M783.93,839.049c-114.461,0-207.229,18.567-207.229,41.459c0,22.896,92.771,41.443,207.229,41.443

-						c114.444,0,207.231-18.551,207.231-41.443C991.161,857.616,898.374,839.049,783.93,839.049z"/>

-				</g>

-			</g>

-			<g id="Shape_114">

-				<g>

-					<path d="M234.065,514.635c0-60.592-49.24-109.671-109.944-109.671c-60.576,0-109.67,49.095-109.67,109.688

-						c0,60.672,49.095,109.928,109.67,109.928C184.826,624.578,234.065,575.322,234.065,514.635z M755.447,815.854

-						c-3.735-5.009-10.521-5.952-15.635-2.513L590.74,921.646c-4.831,3.857-5.926,10.781-2.479,15.635l20.337,28.227

-						c3.725,4.814,10.771,5.926,15.604,2.334l149.104-108.285c4.814-3.752,5.931-10.788,2.479-15.635L755.447,815.854z

-						 M481.069,592.633l59.062,104.275l31.108-23.234l-59.207-103.713L481.069,592.633z M433.214,431.371l-230-403.838

-						l-43.975,0.274L401.82,454.316L433.214,431.371z M908.416,628.572l-213.673-0.258c-17.021,0-31.963,7.311-44.957,16.729

-						l-165.255,116.16L370.835,648.908l158.234-115.886c24.604-20.61,27.921-57.274,7.311-81.884

-						c-20.724-24.324-57.242-27.519-81.862-7.053L207.239,620.295c-35.956,30.146-42.332,98.448-12.463,134.42l178.7,178.812

-						c0,0,48.692,63.484,128.896,5.684l227.779-160.713l178.265,0.273c41.479,0,75.083-33.479,75.083-75.104

-						C983.499,662.306,949.895,628.572,908.416,628.572z"/>

-				</g>

-			</g>

-			<g id="Shape_93">

-				<g>

-					<path d="M405.976,348.398h-2.713c-4.517,37.967-14.476,71.685-26.347,97.231h55.359

-						C422.191,418.766,411.214,389.533,405.976,348.398z M913.79,436.769h-6.649c-11.087,51.93-35.53,98.079-64.653,133.021H978.37

-						C953.593,533.028,926.648,493.038,913.79,436.769z M261.211,477.982h-6.665c-11.071,36.964-35.521,69.804-64.674,94.688

-						h135.904C300.998,546.516,274.055,518.021,261.211,477.982z M563.553,445.63h55.376c-10.1-26.864-21.078-56.097-26.312-97.231

-						H589.9C585.384,386.366,575.425,420.083,563.553,445.63z M740.154,477.982c-11.062,36.964-35.521,69.804-64.66,94.688h135.89

-						c-24.763-26.157-51.721-54.653-64.55-94.688H740.154L740.154,477.982z M89.927,436.769h-6.665

-						c-11.087,51.93-35.537,98.079-64.675,133.021h135.904C129.714,533.028,102.771,493.038,89.927,436.769z M959.96,816.63

-						l-0.096-145.108l29.405-31.853l-0.078-46.294H837.056l-0.126,15.479l-27.35,0.077v-15.556H678.914v41.166h-19.18v-31.773

-						h-55.453l-0.173,32.187h-13.189l-0.36-87.461h20.438l0.785-86.396h-41.104l-0.172,43.377h-2.854

-						c-25.249-55.797-51.68-117.163-65.442-200.516v-96.62c2.822-2.133,60.094-44.585,129.443-8.124c0,0,46.146,24.872,88.81,3.105

-						c0,0,45.307-21.768,67.92-12.17c0,0-33.215-29.529-90.707-3.387c0,0-28.59,14.694-65.161-27.993

-						c0,0-15.965-46.922-130.305-21.281v-21.391h-12.8V319.28c-12.646,70.994-34.896,134.853-61.82,185.19h-3.654v-43.377h-38.673

-						v86.396h17v87.461h-15.896v-32.187h-47.728l-0.33,21.521l-12.854-0.078l0.188-30.831H187.927l-0.031,16.043l-24.731-0.111

-						l0.188-15.932H9.743L9.68,639.669l30.487,31.854L39.289,816.63l-22.411,32.683l181.07,0.579l-16.545,32.517h216.512v-73.729

-						c0-56.062,45.872-101.92,101.92-101.92c56.065,0,101.92,45.855,101.92,101.92v73.729H827.3l-26.723-32.517l181.446-0.376

-						L959.96,816.63z"/>

-				</g>

-			</g>

-			<g id="Shape_46">

-				<g>

-					<path d="M499.475,6.066C226.821,6.066,5.793,227.095,5.793,499.748c0,272.654,221.028,493.683,493.682,493.683

-						c272.64,0,493.688-221.049,493.688-493.683C993.157,227.095,772.108,6.066,499.475,6.066z M552.809,340.471

-						c-43.812,0-79.348-35.535-79.348-79.348c0-43.832,35.536-79.347,79.348-79.367c43.812,0,79.354,35.535,79.354,79.367

-						S596.62,340.471,552.809,340.471z M728.297,512.283c-41.903,0-75.893-33.989-75.893-75.912

-						c0-41.924,33.983-75.913,75.913-75.913c41.923,0,75.892,34.01,75.892,75.913C804.209,478.294,770.24,512.283,728.297,512.283z

-						 M759.875,288.222c-32.441,0-58.757-26.314-58.757-58.757c0-32.462,26.312-58.758,58.757-58.777

-						c32.462,0,58.758,26.315,58.758,58.777C818.633,261.907,792.337,288.222,759.875,288.222z"/>

-				</g>

-			</g>

-			<g id="Shape_39">

-				<g>

-					<path d="M737.659,647.434c-95.929-96.052-72.961-253.299-238.128-262.708c-165.202,9.412-142.311,166.659-238.216,262.708

-						c-45.849,45.854-142.339,63.146-169.662,129.749c-33.486,81.729,21.563,155.638,63.04,187.503

-						c83.32,63.854,217.319,0.726,307.102-8.604c12.89-1.457,25.409-1.703,37.684-1.703c12.293,0,24.812,0.246,37.688,1.703

-						c89.782,9.324,223.781,72.452,307.155,8.604c41.423-31.865,96.484-105.773,63.021-187.503

-						C879.998,710.579,783.508,693.282,737.659,647.434z M916.031,239.942c-60.851-16.331-127.817,36.278-149.486,117.352

-						c-21.771,81.161,9.921,160.075,70.73,176.478c60.896,16.265,127.812-36.274,149.539-117.438

-						C1008.57,335.257,976.875,256.343,916.031,239.942z M161.664,533.771c60.862-16.243,92.505-95.314,70.783-176.394

-						c-21.738-81.161-88.642-133.612-149.521-117.439c-60.861,16.4-92.521,95.314-70.818,176.476

-						C33.829,497.491,100.784,550.03,161.664,533.771z M386.78,301.226c60.845-16.33,92.558-95.314,70.801-176.317

-						C435.859,43.747,368.922-8.774,308.06,7.557c-60.845,16.243-92.54,95.227-70.783,176.388

-						C258.998,264.947,325.918,317.486,386.78,301.226z M612.177,301.226c60.845,16.419,127.817-36.278,149.539-117.281

-						C783.473,102.784,751.742,23.8,690.88,7.557c-60.845-16.331-127.765,36.19-149.485,117.352

-						C519.637,205.911,551.367,284.895,612.177,301.226z"/>

-				</g>

-			</g>

-			<g id="Shape_44">

-				<g>

-					<path d="M990.266,292.161c-17.127-40.57-74.188-60.328-155.67-60.328c-26.521,0-55.731,2.232-86.937,6.484

-						c-11.056-10.418-22.771-20.151-35.021-29.199c-59.725-44.02-133.453-70.339-213.292-70.339

-						c-182.146,0-332.34,135.201-356.632,310.616c-2.12,15.028-3.57,30.244-3.792,45.784

-						C38.688,573.894-13.954,652.318,8.704,706.026c17.098,40.538,74.316,60.267,155.641,60.267c43.958,0,95.437-6.096,151.138-17.5

-						c78.441-16.029,165.683-42.844,255.332-80.646c89.318-37.688,169.428-81.309,235.613-126.158

-						C940.66,450.927,1016.617,354.732,990.266,292.161z M855.127,425.752c-0.837,0.754-1.699,1.508-2.549,2.262

-						c-0.135-0.674-0.29-1.34-0.43-2.013C564.775,663.979,193.526,705.547,193.526,705.547l-1.118-2.656

-						c-9.639,0.562-19.012,0.861-28.063,0.861c-72.954,0-96.256-17.701-98.066-22.018c-5.97-14.126,19.074-56.812,79.866-110.773

-						c8.521,42.203,24.37,81.721,46.229,117.172c433.799-86.588,628.037-275.378,650.335-298.326

-						c-10.709-33.727-26.232-65.312-45.833-93.919c13.067-0.986,25.674-1.515,37.72-1.515c0,0,0,0,0.107,0

-						c72.877,0,96.07,17.686,97.896,22.095C934.596,321.218,929.289,359.374,855.127,425.752z M285.744,789.115

-						c59.771,44.159,133.53,70.603,213.602,70.603c182.083,0,332.355-135.294,356.648-310.802

-						c-76.869,52.112-169.876,102.771-273.684,146.527C478.179,739.37,376.879,770.502,285.744,789.115z"/>

-				</g>

-			</g>

-			<g id="Shape_51_2_">

-				<g>

-					<path d="M163.088,425.002V761.38h112.126V425.002H163.088z M349.968,425.002V761.38h112.134V425.002H349.968z M536.855,425.002

-						V761.38H648.98V425.002H536.855z M723.727,425.002V761.38h112.127V425.002H723.727z M88.335,836.143h822.279v-37.381H88.335

-						V836.143z M13.582,873.508v37.38h971.794v-37.38H13.582z M947.995,350.242L536.855,88.609H499.47H462.1L50.962,350.242v37.38

-						h897.033V350.242z"/>

-				</g>

-			</g>

-			<g id="Shape_97_2_">

-				<g>

-					<path d="M982.645,782.662c-35.586-42.6-73.823-86.88-82.422-145.84c-8.604-58.979,16.275-106.413,38.229-157.382

-						l-12.622-86.656c-35.585-42.583-72.782-79.608-81.374-138.534c-8.593-58.978,15.229-113.685,37.18-164.671l-12.623-86.64

-						L786.49,14.978C745.43,46.722,696.075,68.691,641.111,76.7c-54.947,8.009-108.522,1.046-156.891-17.682l-91.692,13.377

-						c-40.953,31.727-95.458,54.45-150.385,62.459c-54.913,7.991-108.54,1.046-156.885-17.682l-82.575,12.04l12.622,86.64

-						c37.867,43.457,77.242,85.371,86.177,146.681c8.936,61.258-18.093,104.062-41.981,156.521l12.622,86.657

-						c37.866,43.371,76.195,78.134,85.13,139.393c8.918,61.24-17.047,111.354-40.936,163.812l12.639,86.64l86.623-12.639

-						c42.41-35.104,82.129-57.485,140.54-66.009c58.429-8.507,112.073,0.343,162.682,21.812l91.698-13.354

-						c42.377-35.036,86.194-58.085,144.604-66.592c58.407-8.522,102.859,1.572,153.541,23.135l86.617-12.622L982.645,782.662z

-						 M313.965,747.402l-63.145-433.18l433.167-63.128l63.145,433.188L313.965,747.402z"/>

-				</g>

-			</g>

-			<g id="Shape_53_2_">

-				<g>

-					<path d="M421.637,110.541C162.155,110.541,6.478,318.12,6.478,421.91c0,103.789,51.903,181.628,155.676,181.628

-						c103.79,0,155.693,25.935,155.693,103.789c0,103.79,77.838,181.628,181.627,181.628c337.321,0,492.997-181.628,492.997-363.256

-						C992.472,214.33,733.006,110.541,421.637,110.541z M175.13,499.748c-35.812,0-64.863-29.034-64.863-64.862

-						s29.051-64.862,64.863-64.862c35.828,0,64.862,29.034,64.862,64.862S210.958,499.748,175.13,499.748z M356.758,344.071

-						c-35.828,0-64.862-29.05-64.862-64.879c0-35.828,29.034-64.862,64.862-64.862s64.879,29.034,64.879,64.862

-						C421.637,315.021,392.586,344.071,356.758,344.071z M499.475,785.165c-42.981,0-77.838-34.851-77.838-77.838

-						s34.854-77.854,77.838-77.854c42.988,0,77.845,34.867,77.845,77.854S542.463,785.165,499.475,785.165z M564.354,344.071

-						c-35.845,0-64.879-29.05-64.879-64.879c0-35.828,29.034-64.862,64.879-64.862c35.802,0,64.852,29.034,64.852,64.862

-						C629.199,315.021,600.149,344.071,564.354,344.071z M771.917,447.845c-35.829,0-64.879-29.032-64.879-64.862

-						c0-35.828,29.05-64.862,64.879-64.862c35.828,0,64.879,29.034,64.879,64.862C836.796,418.812,807.745,447.845,771.917,447.845z

-						"/>

-				</g>

-			</g>

-			<g id="Shape_81_2_">

-				<g>

-					<path d="M499.475,197.479c0,0-120.918-120.918-483.637-120.918v725.473c366.501,0,483.637,120.896,483.637,120.896

-						s117.141-120.896,483.643-120.896V76.561C620.393,76.561,499.475,197.479,499.475,197.479z M439.024,761.643

-						c-54.323-28.685-148.593-64.25-302.292-77.223V197.479c153.695,12.854,247.965,48.401,302.292,77.206V761.643z M862.211,684.42

-						c-153.745,13.007-248.015,48.538-302.286,77.224V274.686c54.271-28.805,148.541-64.353,302.286-77.206V684.42z"/>

-				</g>

-			</g>

-			<g id="Shape_1_2_">

-				<g>

-					<path d="M350.242,117.661c16.812,0,30.574-13.033,31.803-29.534c0.6-1.85-23.154-82.915-30.185-82.915h-3.153

-						c-7.021,0-30.815,80.77-30.29,82.515C319.458,104.429,333.289,117.661,350.242,117.661z M737.678,632.005l-55.999-63.646

-						c-0.841-0.988-1.934-1.65-3.062-2.081c-0.831-0.295-1.729-0.494-2.618-0.494c-1.775,0-3.573,0.604-5.014,1.882l-64.658,56.85

-						l-4.229,3.709l-17.005,14.973v-98.229v-3.352c0-4.699,3.808-8.503,8.503-8.503c4.698,0,8.502,3.804,8.502,8.503v3.352v71.943

-						l63.267-55.61c2.938-2.584,6.702-4.005,10.625-4.005c0.895,0,1.766,0.084,2.604,0.242V477.85

-						c0-25.046-20.001-45.356-44.71-45.356H403.434c-8.04,0-15.276-5.58-17.205-13.074v-53.561l35.451,2.188

-						c6.527,30.931,33.975,54.138,66.834,54.138c32.854,0,60.297-23.207,66.834-54.117l47.999-2.964

-						c5.876,0,10.626-4.771,10.626-10.637c0-5.843-4.75-10.604-10.342-10.604c0,0,0,0-0.021,0l-48.017-2.954

-						c-1.546-8.051-4.478-15.597-8.598-22.365l32.854-34.306c1.944-1.786,2.854-4.445,2.491-7.293

-						c-0.284-2.354-1.419-4.709-3.163-6.59c-2.261-2.429-5.256-3.815-8.193-3.815c-2.139,0-4.12,0.756-5.37,1.934l-37.006,30.059

-						c-7.269-5.266-15.576-9.133-24.572-11.215l-4.32-69.808c0-5.844-4.771-10.625-10.636-10.625

-						c-5.854,0-10.605,4.771-10.605,10.342l-4.309,69.808c-9.406,2.018-18.098,5.949-25.613,11.394l-36.698-29.765

-						c-1.479-1.367-3.479-2.123-5.595-2.123c-2.953,0-5.946,1.387-8.208,3.826c-1.755,1.892-2.88,4.226-3.164,6.58

-						c-0.336,2.848,0.567,5.507,2.312,7.115l32.886,34.315c-4.149,6.811-7.125,14.431-8.681,22.534l-35.209,2.176V233.8

-						c0-13.41-6.896-25.182-17.341-32.024l7.767-40.559c0-0.873-0.084-1.734-0.188-2.564c5.748-0.294,10.312-4.436,10.312-9.533

-						v-11.992c0-5.297-4.908-9.606-10.961-9.606H323.79c-6.054,0-10.962,4.299-10.962,9.606v11.992

-						c0,5.108,4.572,9.239,10.311,9.533c-0.104,0.83-0.188,1.691-0.188,2.564l7.41,38.625c-12.275,6.369-20.688,19.18-20.688,33.958

-						v632.72c-10.09,0.945-17.973,9.42-17.973,19.738v22.428h-8.397c-13.212,0-23.932,8.896-23.932,19.854v45.233

-						c0,10.948,10.72,19.846,23.932,19.846h330.06c13.223,0,23.938-8.896,23.938-19.846V928.54c0-10.963-10.71-19.854-23.938-19.854

-						H605v-22.428c0-10.962-8.87-19.842-19.844-19.842h-0.062V700.741l17.551,19.969l14.932,16.943

-						c1.492,1.702,3.594,2.569,5.69,2.569c1.786,0,3.573-0.614,5.003-1.897l50.365-44.271l58.372-51.331

-						C740.158,639.973,740.452,635.159,737.678,632.005z M633.899,744.747c-2.927,2.554-6.679,3.962-10.558,3.995

-						c5.145,2.553,10.899,4.021,17.025,4.021c21.127,0,38.269-17.132,38.269-38.257l-0.01-9.123L633.899,744.747z"/>

-				</g>

-			</g>

-			<g id="Shape_98_2_">

-				<g>

-					<path d="M574.609,257.319c12.188-18.391,24.771-35.099,38.358-51.091c7.396-8.646,14.326-16.209,21.179-23.155

-						c8.356-8.496,15.903-15.442,21.284-19.624c1.521-1.199,3.114-2.632,4.447-4.081c6.769-7.279,10.295-16.775,9.912-26.703

-						c-0.367-9.929-4.598-19.124-11.878-25.888c-14.492-13.427-39.113-12.561-52.657,2.066

-						c-9.628,10.378-16.042,18.907-24.065,29.818c-6.696,9.278-13.243,19.057-20.013,29.951

-						c-12.261,19.808-23.536,40.764-33.5,62.286c-10.428,22.389-18.688,44.095-25.271,66.4

-						c-5.298,18.308-11.628,42.862-13.493,70.415c-0.566,8.229,5.047,15.759,13.076,17.542c1.217,0.266,2.433,0.399,3.682,0.399

-						c7.796,0,14.676-5.53,16.525-13.894c3.932-17.591,11.022-37.465,21.104-59.087

-						C552.021,294.085,562.565,275.444,574.609,257.319z M689.303,325.836l-6.479,2.016c-23.561,7.246-45.211,15.626-66.217,25.688

-						c-17.158,8.329-39.614,20.073-61.309,37.098c-6.348,4.981-8.13,14.026-4.182,21.04c2.915,5.197,8.429,8.435,14.376,8.435

-						c2.812,0,5.614-0.732,8.746-2.471c15.573-8.763,35.133-16.759,58.104-23.738c19.341-5.831,40.27-10.412,62.169-13.61

-						c20.846-3.065,41.663-4.831,63.688-5.397c10.523-0.267,21.021,0.15,31.351,0.616c6.58,0.317,19.524,2.716,27.271,4.148

-						c4.108,0.75,7.046,1.216,8.439,1.249c22.272,0,37.415-12.743,37.665-31.684c0.316-21.356-19.474-31.968-36.479-34.566

-						c-12.729-1.949-39.53-6.047-70.521-3.398C728.7,313.542,708.677,319.789,689.303,325.836z M858.985,562.585

-						c-10.628-9.412-19.273-15.625-30.368-23.388c-9.412-6.52-19.357-12.827-30.368-19.357

-						c-19.974-11.728-41.18-22.556-63.036-32.101c-22.639-9.912-44.511-17.708-66.967-23.822

-						c-27.836-7.379-49.042-10.944-71.647-11.96c-8.273,0-15.403,5.896-16.985,14.01c-1.816,9.361,4.312,18.479,14.486,20.479

-						c17.681,3.465,37.721,10.045,59.487,19.521c18.729,8.185,37.615,18.229,56.089,29.836

-						c18.624,11.646,35.649,23.738,52.074,36.998c8.846,7.146,16.575,13.859,23.688,20.523c8.529,7.963,15.858,15.521,20.189,20.756

-						c1.167,1.433,2.683,3.016,4.132,4.298c6.797,6.014,15.542,9.296,24.604,9.296c10.688,0,20.854-4.598,27.896-12.594

-						c6.58-7.446,9.862-17.025,9.246-26.953C870.88,578.229,866.432,569.132,858.985,562.585z M658.701,831.269

-						c18.724-2.382,31.451-20.021,29.686-41.062c-0.017-16.092-2.349-27.887-4.896-38.281c-1.2-4.695-2.021-9.361-2.832-13.993

-						c-1.199-6.69-2.438-13.604-4.715-20.557c-7.246-21.938-16.075-44.012-26.236-65.65c-10.445-22.271-21.773-42.546-34.667-61.98

-						c-10.661-15.825-25.438-36.438-45.294-55.479c-5.683-5.497-15.126-5.997-21.356-1.229c-3.515,2.665-5.764,6.547-6.347,10.895

-						c-0.583,4.364,0.566,8.685,3.682,12.744c10.911,14.312,21.562,32.566,31.651,54.256c8.562,18.562,16.025,38.632,22.139,59.654

-						c6.047,20.539,10.745,40.93,14.326,62.285c1.604,9.562,2.882,19.724,3.938,31.118c0.933,9.846,0.578,33.111,0.562,34.11

-						c-0.134,9.185,2.965,17.242,8.962,23.322c6.381,6.48,15.859,10.178,25.973,10.178

-						C655.069,831.604,656.886,831.502,658.701,831.269z M196.78,307.345c2.798,0,5.313-0.233,7.479-0.732

-						c9.545-2.199,23.105-4.082,27.869-4.365c10.212-0.6,20.69-0.35,31.201,0.767c20.557,2.116,41.846,7.812,61.503,16.476

-						c20.673,9.361,40.396,20.973,58.654,34.482c20.34,15.176,36.526,31.318,47.41,47.644c2.979,4.464,7.979,7.13,13.354,7.13

-						c2.398,0,4.73-0.517,6.896-1.55c3.858-1.854,6.773-5.063,8.212-9.102c1.433-4.042,1.197-8.375-0.649-12.243

-						c-12.993-27.237-31.201-47.544-47.354-63.952c-18.312-18.107-38.813-34.399-61.021-48.676

-						c-23.505-14.76-48.875-25.471-75.379-32.268c-13.577-3.498-27.47-4.348-41.33-5.563c-6.763-0.6-13.593,1.083-21.422,1.083

-						c-0.034,0-0.051,0-0.084,0c-7.629,0-24.721-1.999-34.149,1.249c-9.428,3.248-16.642,10.145-20.657,19.29

-						c-3.998,9.162-4.198,19.058-0.566,28.353C162.713,300.665,181.671,307.361,196.78,307.345z M436.278,518.273

-						c-0.483-9.278-8.13-15.358-18.357-15.358c-0.034,0-0.051,0-0.062,0c-25.604,0-50.823,6.13-77.132,16.975

-						c-24.688,10.245-48.061,24.394-67.602,42.602c-19.39,17.891-36.165,37.896-51.274,61.369

-						c-7.113,11.095-13.727,22.733-19.69,34.85c-5.53,11.527-10.911,23.122-15.858,38.812c-0.517,1.636-0.999,3.611-1.266,5.312

-						c-1.55,9.812,0.799,19.624,6.613,27.67c5.847,8.029,14.442,13.327,24.271,14.876c1.981,0.316,3.931,0.483,5.88,0.483

-						c18.357,0,33.8-13.183,36.682-31.336c1.217-7.479,4.115-18.439,7.713-29.284c3.582-10.628,7.613-20.74,12.027-30.138

-						c9.129-19.737,20.923-38.578,34.167-54.604c13.776-16.792,29.618-30.318,48.376-41.479

-						c19.096-11.312,40.58-19.227,61.354-23.225C430.681,534.133,436.761,526.953,436.278,518.273z M488.552,543.461

-						c-8.429-5.062-20.4-2.032-25.454,6.397c-14.188,23.688-22.788,46.594-29.335,65.896c-7.33,22.089-12.96,44.661-17.208,69.032

-						c-4.099,23.487-6.812,47.144-8.079,70.312c-0.684,12.85-0.896,24.621-0.694,36.065c0.277,11.411,0.6,23.222,2.665,38.215

-						c0.25,1.732,0.667,3.698,1.166,5.38c4.632,15.692,19.291,26.672,35.666,26.672c3.548,0,7.097-0.518,10.522-1.55

-						c19.657-5.812,30.938-26.555,25.154-46.228c-2.615-8.779-4.798-21.506-5.864-28.286c-1.532-9.712-2.781-20.174-3.715-31.104

-						c-1.749-21.09-2.231-41.979-1.466-63.812c0.75-21.756,3.032-42.995,6.729-63.056c4.314-23.173,10.045-43.326,17.441-60.732

-						C499.713,558.204,496.48,548.226,488.552,543.461z M673.644,874.131c-3.798,0-7.606,0.5-11.311,1.5

-						c-11.161,3.031-20.457,10.194-26.204,20.206s-7.246,21.673-4.215,32.8c5.064,18.791,22.206,31.938,41.68,31.938

-						c3.814,0,7.603-0.499,11.312-1.499c22.982-6.214,36.646-30.002,30.418-53.008C710.242,887.258,693.101,874.131,673.644,874.131

-						z M915.374,607.446c-23.389,4.598-38.681,27.354-34.1,50.741c3.965,20.224,21.771,34.916,42.379,34.916

-						c2.749,0,5.547-0.271,8.357-0.834c11.312-2.22,21.105-8.717,27.535-18.289c6.437-9.579,8.746-21.106,6.52-32.418

-						C961.602,618.624,939.296,602.782,915.374,607.446z M985.706,307.778c-7.563-8.713-18.074-13.96-29.604-14.776

-						c-24.006-1.865-44.489,16.525-46.155,40.063c-0.806,11.511,2.914,22.655,10.479,31.368

-						c7.579,8.729,18.091,13.977,29.604,14.775c1.028,0.084,2.05,0.101,3.081,0.101c22.568,0,41.479-17.642,43.062-40.164

-						C996.982,327.651,993.252,316.507,985.706,307.778z M722.636,105.028c2.732,0,5.521-0.25,8.296-0.8

-						c23.355-4.547,38.688-27.27,34.15-50.658c-4.448-22.955-27.054-38.797-50.642-34.183c-11.328,2.183-21.123,8.662-27.604,18.241

-						c-6.446,9.562-8.795,21.072-6.597,32.417C684.172,90.319,702.013,105.028,722.636,105.028z M78.355,323.637

-						c3.415,0,6.83-0.399,10.162-1.199c23.172-5.581,37.464-28.969,31.901-52.141c-4.698-19.49-21.973-33.101-41.996-33.101

-						c-3.398,0-6.813,0.417-10.145,1.216c-11.228,2.699-20.723,9.596-26.737,19.457c-6.03,9.846-7.863,21.439-5.147,32.668

-						C41.074,310.027,58.349,323.637,78.355,323.637z M180.354,759.055c-6.68,0-13.093,1.521-19.124,4.498

-						c-10.345,5.103-18.091,13.959-21.789,24.871c-3.698,10.944-2.916,22.672,2.215,33c7.312,14.859,22.156,24.104,38.747,24.104

-						c6.681,0,13.11-1.521,19.107-4.498c10.361-5.08,18.107-13.942,21.806-24.871c3.715-10.928,2.916-22.655-2.182-33

-						C211.806,768.316,196.946,759.055,180.354,759.055z M434.762,894.454c-3.798,0-7.606,0.517-11.311,1.517

-						c-22.989,6.214-36.648,29.984-30.418,52.979c5.062,18.842,22.205,31.968,41.679,31.968c3.798,0,7.613-0.499,11.312-1.499

-						c11.128-3.016,20.438-10.211,26.187-20.207c5.747-9.994,7.247-21.639,4.231-32.815

-						C471.344,907.581,454.202,894.454,434.762,894.454z M163.08,513.493c0.833-1.283,4.364-5.271,8.163-8.979

-						c3.515-3.479,7.313-6.796,11.228-10.022c7.962-6.53,16.608-12.35,25.67-17.593c17.858-10.382,38.415-18.156,59.354-22.688

-						c21.256-4.398,43.095-6.229,64.901-6.229h2.729c25.305,0,47.812,3.447,66.234,10.229c7.546,2.799,16.541-1.049,20.39-8.195

-						c4.331-8.062,1.299-18.125-6.78-22.473c-26.67-14.312-53.474-19.956-76.262-23.638c-25.571-3.805-51.625-4.887-78.095-3.271

-						c-27.687,1.982-54.64,8.163-80.094,18.374c-13.043,5.231-25.671,11.528-37.515,18.708c-6.43,3.881-12.26,7.796-18.891,12.71

-						c-5.597,4.248-10.445,7.936-17.225,14.693l-1.816,1.812c-1.849,1.866-3.498,3.915-4.848,6.063

-						c-11.161,17.325-6.146,40.497,11.161,51.675c6.047,3.897,13.044,5.964,20.224,5.964

-						C144.406,530.635,156.167,524.254,163.08,513.493z M73.841,534.232c-17.542-14.849-46.077-12.493-60.903,4.979

-						c-15.425,18.174-13.21,45.479,4.964,60.953c7.813,6.597,17.741,10.244,27.953,10.244c12.727,0,24.738-5.547,32.951-15.259

-						C94.231,576.995,91.982,549.675,73.841,534.232z"/>

-				</g>

-			</g>

-			<g id="Shape_96_2_">

-				<g>

-					<path d="M908.312,213.563h-49.065c0-18.053-14.639-32.709-32.709-32.709h-32.71c-18.053,0-32.71,14.656-32.71,32.709H450.41

-						c-32.71,0-32.71-81.773-65.402-81.773H205.121c-32.71,0-32.71,81.773-65.419,81.773H90.638

-						c-45.142,0-81.758,36.616-81.758,81.774v490.595c0,45.159,36.616,81.774,81.758,81.774h817.674

-						c45.142,0,81.758-36.615,81.758-81.774V295.338C990.069,250.18,953.453,213.563,908.312,213.563z M335.943,344.402

-						c0,18.054-14.646,32.693-32.71,32.693h-98.112c-18.07,0-32.71-14.64-32.71-32.693v-16.354c0-18.053,14.64-32.71,32.71-32.71

-						h98.112c18.07,0,32.71,14.64,32.71,32.71V344.402z M663.023,785.95c-135.458,0-245.312-109.865-245.312-245.312

-						c0-135.459,109.854-245.307,245.312-245.307c135.438,0,245.289,109.848,245.306,245.307

-						C908.329,676.104,798.465,785.95,663.023,785.95z M663.023,360.758c-99.336,0-179.893,80.534-179.893,179.889

-						c0,99.339,80.557,179.89,179.893,179.89c99.335,0,179.886-80.555,179.886-179.89

-						C842.909,441.292,762.358,360.758,663.023,360.758z"/>

-				</g>

-			</g>

-			<g id="Shape_117_2_">

-				<g>

-					<path d="M499.504,304.683c-107.706,0-195.04,87.334-195.04,195.049c0,107.658,87.334,195.048,195.04,195.048

-						c107.714,0,195.049-87.386,195.049-195.048C694.553,392.017,607.218,304.683,499.504,304.683z M499.504,207.15

-						c26.941,0,48.768-21.809,48.768-48.75V60.868c0-26.991-21.82-48.767-48.768-48.767c-26.925,0-48.758,21.775-48.758,48.767

-						V158.4C450.746,185.342,472.579,207.15,499.504,207.15z M740.877,307.107c12.49,0,24.965-4.717,34.481-14.234l68.941-68.997

-						c19.058-19.001,19.058-49.862,0-68.964c-19.051-19.051-49.896-19.051-68.941,0l-68.946,68.964

-						c-19.052,19.035-19.052,49.896,0,68.997C715.929,302.391,728.42,307.107,740.877,307.107z M938.367,451.015h-97.532

-						c-26.925,0-48.767,21.858-48.767,48.771c0,26.938,21.842,48.749,48.767,48.749h97.532c26.924,0,48.766-21.812,48.766-48.749

-						C987.133,472.873,965.291,451.015,938.367,451.015z M775.259,706.722c-19.034-19.051-49.896-19.051-68.946,0

-						c-19.052,19.002-19.052,49.863,0,68.897l68.946,68.964c9.534,9.518,22.009,14.334,34.482,14.334

-						c12.473,0,24.941-4.816,34.479-14.334c19.035-19.001,19.035-49.862,0-68.964L775.259,706.722z M499.362,792.346

-						c-26.925,0-48.771,21.858-48.771,48.771v97.516c0,26.958,21.843,48.771,48.771,48.771c26.934,0,48.759-21.812,48.759-48.771

-						v-97.516C548.121,814.204,526.296,792.346,499.362,792.346z M223.508,706.539l-68.956,68.947

-						c-19.043,19.052-19.043,49.896,0,68.997c9.526,9.517,22,14.229,34.482,14.229c12.474,0,24.948-4.718,34.474-14.229

-						l68.955-68.997c19.044-19.002,19.044-49.862,0-68.947C273.412,687.488,242.551,687.488,223.508,706.539z M206.865,499.632

-						c0-26.958-21.834-48.767-48.758-48.767H60.583c-26.933,0-48.766,21.809-48.766,48.767c0,26.907,21.833,48.771,48.766,48.771

-						h97.524C185.031,548.396,206.865,526.539,206.865,499.632z M223.699,292.724c9.525,9.534,21.999,14.334,34.474,14.334

-						c12.474,0,24.956-4.8,34.481-14.334c19.043-19.002,19.043-49.846,0-68.897l-68.955-68.947

-						c-19.052-19.051-49.904-19.051-68.956,0c-19.043,18.985-19.043,49.847,0,68.947L223.699,292.724z"/>

-				</g>

-			</g>

-			<g id="Shape_118_2_">

-				<g>

-					<path d="M122.342,411.566l-63.774-36.168c-16.408-9.309-37.265-3.55-46.574,12.858c-9.309,16.423-3.55,37.28,12.874,46.589

-						l78.339,44.41v355.938c0,30.182,24.467,54.664,54.648,54.664c30.196,0,54.664-24.482,54.664-54.664v-144.17L315.95,863.24

-						c0,0.023,0,0.045,0.015,0.076c15.525,25.863,49.104,34.264,75.002,18.708c25.869-15.54,34.27-49.118,18.729-75.003

-						l-89.78-149.477h206.892v177.646c0,30.182,24.472,54.659,54.663,54.659c30.187,0,54.663-24.479,54.663-54.659V656.287

-						c7.938-2.818,13.666-10.346,13.666-19.242V493.562l0.274-0.29L458.26,411.567L122.342,411.566L122.342,411.566z

-						 M854.737,329.586v27.316h136.659v-27.316H854.737z M946.422,201.398l-118.529,68.04l13.605,23.69l118.529-68.025

-						L946.422,201.398z M846.754,107.642L778.9,226.247l23.722,13.574l67.854-118.605L846.754,107.642z M759.122,261.256

-						l-68.36-109.312L566.84,290.462l-67.369-15.54l17.749,71.011l-29.922,33.441l191.733,81.69L772.758,356.9h-68.312

-						L759.122,261.256z M629.273,315.92c-11.311,0-20.512-9.171-20.512-20.491c0-11.319,9.201-20.491,20.512-20.491

-						c11.314,0,20.506,9.172,20.506,20.491C649.779,306.733,640.608,315.92,629.273,315.92z"/>

-				</g>

-			</g>

-			<g id="Shape_95">

-				<g>

-					<polygon points="873.006,752.66 961.497,752.66 853.963,627.225 914.485,627.225 808.624,509.64 843.943,509.64 

-						773.369,415.568 702.828,509.64 738.163,509.64 632.334,627.225 692.824,627.225 585.322,752.66 673.797,752.66 

-						561.825,893.695 726.325,893.695 726.325,979.982 820.381,979.982 820.381,893.695 985.043,893.695 					"/>

-				</g>

-			</g>

-			<g id="Shape_95_copy">

-				<g>

-					<polygon points="548.556,594.094 700.688,594.094 515.826,378.479 619.87,378.479 437.886,176.311 498.617,176.311 

-						377.284,14.593 255.983,176.311 316.746,176.311 134.811,378.479 238.79,378.479 53.992,594.094 206.092,594.094 

-						13.606,836.566 296.401,836.566 296.401,984.904 458.104,984.904 458.104,836.566 741.171,836.566 					"/>

-				</g>

-			</g>

-			<g id="Shape_57">

-				<g>

-					<path d="M785.441,512.893c-106.83,0-194.191,87.363-194.191,194.182c0,106.83,87.361,194.188,194.191,194.188

-						c106.825,0,194.489-87.356,194.489-194.188C979.936,600.256,892.271,512.893,785.441,512.893z M785.441,832.154

-						c-69.504,0-125.086-55.564-125.086-125.086c0-69.504,55.582-125.069,125.086-125.069S910.83,637.564,910.83,707.068

-						C910.83,776.59,854.945,832.154,785.441,832.154z M487.812,229.889c33.896-18.909,46.146-61.763,27.211-95.679

-						c-13.021-23.338-37.268-36.257-62.229-35.971c-11.342,0.144-22.876,3.154-33.454,9.062

-						c-33.868,18.909-46.146,61.763-27.209,95.694C411.061,236.915,453.945,248.798,487.812,229.889z M530.284,612.012

-						L673.18,507.891c5.932-5.146,9.908-12.276,11.27-20.021c1.338-7.71,0.047-15.979-3.766-22.829L561.857,252.096

-						c-2.994-5.433-7.455-10.021-12.823-13.143c-5.368-3.106-11.613-4.764-17.826-4.684c-5.799,0.144-11.55,1.769-16.567,4.684

-						c-4.923,2.788-9.155,6.802-12.188,11.581l-82.248,132.573l-110.063,58.48c-4.231,1.96-8.156,4.668-11.263,8.141

-						c-3.107,3.479-5.385,7.773-6.882,12.188c-1.497,4.429-2.246,9.112-1.879,13.764c0.382,4.652,1.896,9.32,4.062,13.446

-						c2.183,4.126,5.13,7.694,8.762,10.625c3.632,2.931,8.013,5.001,12.505,6.261c4.493,1.258,9.144,1.863,13.764,1.242

-						c4.62-0.604,9.128-2.295,13.126-4.684l118.522-62.862c5.336-2.819,9.925-7.073,13.126-12.187l56.298-90.692l76.604,137.289

-						L469.92,572.932c-4.636,3.983-8.027,9.208-10.004,15.013c-1.976,5.777-2.484,12.139-1.259,18.129l42.853,209.813

-						c0.748,4.571,2.501,8.922,5.002,12.823c2.485,3.92,5.863,7.396,9.688,10.005c3.84,2.628,7.966,4.413,12.506,5.321

-						c4.557,0.908,9.224,0.955,13.764,0c4.541-0.94,9.021-2.66,12.824-5.321c3.808-2.645,6.914-6.063,9.383-10.005

-						c2.453-3.918,4.285-8.538,5.002-13.126c0.72-4.571,0.516-9.271-0.62-13.764L530.284,612.012z M213.189,512.893

-						c-106.813,0-194.176,87.363-194.176,194.182c0,106.83,87.362,194.188,194.176,194.188c106.83,0,194.192-87.356,194.192-194.188

-						C407.381,600.256,320.02,512.893,213.189,512.893z M213.189,832.154c-69.504,0-125.07-55.564-125.07-125.086

-						c0-69.504,55.565-125.069,125.07-125.069c69.521,0,125.086,55.565,125.086,125.069

-						C338.275,776.59,282.709,832.154,213.189,832.154z"/>

-				</g>

-			</g>

-			<g id="Shape_61">

-				<g>

-					<path d="M432,166.023c41.952,0,76.881-33.755,76.881-76.854c0-41.924-34.929-76.854-76.881-76.854

-						c-41.91,0-76.839,34.93-76.839,76.854C355.16,132.268,390.09,166.023,432,166.023z M660.295,522.398

-						c12.799-18.647,19.766-41.93,20.955-68.719c-3.498-31.44-15.137-66.39-25.613-98.998c-10.492-20.969-1.188,0,6.952,2.336

-						c34.972,11.639,54.771,0,65.243-26.788c-32.621-72.209-60.585-143.258-94.34-214.292

-						c-26.816,1.161-47.771,10.492-61.718,26.774l45.421,124.625c-26.816-61.718-61.746-104.817-119.966-103.67

-						c-20.955,0-43.085,10.478-65.229,32.622c-1.161,1.175-2.336,2.336-3.469,3.483c-18.661,53.577-37.28,108.314-55.913,161.891

-						L210.755,472.319l22.116,44.259l24.466-8.146L400.595,753l-39.616,206.139L432,977.757l15.15,3.511l24.466-101.348

-						l55.913,89.682l41.908-3.479l-86.197-153.74l17.457-86.184l68.74-82.674L733.65,987.073l29.105-24.452l25.627-22.13

-						L660.295,522.398z M432,641.189l-20.941,44.271L294.575,492.126L430.852,423.4c0-1.161,1.147-2.322,1.147-2.322

-						c8.156-12.813,16.311-24.466,23.305-36.104c25.613,31.446,43.085,64.054,52.401,95.5L432,641.189z"/>

-				</g>

-			</g>

-			<g id="Shape_59">

-				<g>

-					<path d="M872.604,826.424L499.475,91.199L126.36,826.424H13.581v81.874h971.788v-81.874H872.604z M341.096,826.424

-						L499.475,520.67l158.379,305.754H341.096L341.096,826.424z"/>

-				</g>

-			</g>

-			<g id="Shape_54">

-				<g>

-					<path d="M728.842,272.859L766.15,8.063C681.85,29.212,555.02,83.06,474.587,164.568

-						C330.19,310.885,247.79,522.525,303.222,634.338l-57.841,60.98l-28.898,30.363c-7.254,7.154-16.804,13.979-26.503,18.771

-						c-19.828,9.947-41.688,13.004-62.226,7.518c-10.343-2.627-20.373-7.562-30.072-14.045c-9.286-5.859-20.521-16.07-24.801-22.422

-						c-25.693-33.898-16.226-97.303,3.751-147.168l0.38-1.041c2.825-7.104,0.396-15.516-6.279-19.762

-						c-7.435-4.793-17.316-2.463-22.042,5.055c-17.101,27.495-28.932,56.212-36.053,88.73c-6.659,31.84-6.031,70.104,12.987,104.188

-						c11.055,19.04,21.679,29.384,35.575,41.479c13.598,11.385,29.741,20.786,47.388,26.943c21.381,7.771,44.497,9.286,66.868,6.659

-						c-2.577,22.72-1.057,46.05,6.56,67.729c6.13,17.855,15.383,34.198,26.618,48.027c11.946,14.027,22.19,24.771,40.944,36.035

-						c33.624,19.282,71.438,19.91,102.854,13.138c32.061-7.233,60.408-19.218,87.572-36.496c6.41-4.136,9.22-12.431,6.229-19.798

-						c-3.271-8.263-12.606-12.239-20.753-8.924l-0.991,0.413c-49.238,20.19-111.827,29.812-145.271,3.784

-						c-6.262-4.346-16.324-15.779-22.19-25.132c-6.411-9.852-11.235-20.009-13.83-30.485c-5.453-20.783-2.379-42.938,7.418-62.949

-						c4.759-9.883,11.5-19.497,18.539-26.885l29.56-28.781l0.446-0.479l2.462-2.396l57.696-56.228

-						c110.35,56.15,319.229-27.276,463.729-173.645C901.09,438.463,968.09,318.342,990.151,235L728.842,272.859z M635.587,300.916

-						c-21.86,22.141-57.318,22.141-79.179,0.033c-21.859-22.125-21.859-58.095,0-80.236c21.854-22.124,57.352-22.124,79.179,0

-						C657.479,242.854,657.479,278.791,635.587,300.916z"/>

-				</g>

-			</g>

-			<g id="Shape_65">

-				<g>

-					<path d="M845.676,616.973c-20.965,0-41.036,4.854-58.784,13.146c-17.521,7.618-36.874,12.228-57.186,12.228

-						c-20.276,0-39.642-4.604-57.167-12.228c-17.749-8.29-37.803-13.146-58.784-13.146c-20.759,0-40.812,4.854-58.784,13.146

-						c-17.302,7.618-36.667,12.228-56.938,12.228c-20.294,0-39.9-4.604-57.188-12.228c-17.729-8.29-37.803-13.146-58.781-13.146

-						c-20.968,0-41.033,4.854-58.781,13.146c-17.525,7.618-36.891,12.228-57.168,12.228c-20.294,0-39.659-4.604-57.185-12.228

-						c-17.749-8.29-37.579-13.146-58.561-13.146s-41.036,4.854-58.784,13.146c-17.525,7.618-36.891,12.228-57.168,12.228v85.528

-						c20.277,0,39.643-4.627,57.168-12.229c17.748-8.288,37.802-13.143,58.784-13.143c20.981,0,40.812,4.854,58.561,13.143

-						c14.756,6.446,31.112,10.146,47.966,11.303l-71.012,70.788c-22.599-14.068-52.576-11.54-72.165,8.062L32.316,887.18

-						c-22.616,22.582-22.616,59.271,0,82.071c22.805,22.6,59.472,22.6,82.054,0l81.383-81.383

-						c18.471-18.454,21.687-46.109,10.146-68.021l97.997-97.756c6.69-2.062,13.14-3.68,19.365-6.446

-						c17.731-8.286,37.808-13.143,58.784-13.143c20.982,0,41.053,4.854,58.784,13.143c17.284,7.604,36.874,12.229,57.185,12.229

-						c20.277,0,39.646-4.627,56.944-12.229c17.989-8.286,38.025-13.143,58.784-13.143c20.979,0,41.035,4.854,58.784,13.143

-						c17.521,7.604,36.891,12.229,57.168,12.229c20.312,0,39.654-4.627,57.185-12.229c17.749-8.286,37.819-13.143,58.784-13.143

-						c20.979,0,40.829,4.854,58.784,13.143c17.302,7.604,36.891,12.229,57.185,12.229V642.34c-20.294,0-39.883-4.604-57.185-12.228

-						C886.487,621.822,866.657,616.973,845.676,616.973z M942.279,477.114c-12.899,0.465-393.775,0-393.775,0l116.657-116.536

-						l15.667,5.985c19.83,7.154,41.965-3.01,49.343-22.822c5.073-14.052,1.152-29.272-8.53-39.419l95.451-95.796

-						c21.896,11.558,49.565,8.548,68.003-9.889l81.399-81.383c22.822-22.822,22.822-59.489,0-82.071

-						c-22.604-22.839-59.489-22.839-82.07,0l-81.383,81.383c-19.606,19.59-22.152,49.566-7.86,71.924L693.968,289.824

-						l-201.032-74.47c-5.297-2.992-10.853-5.538-17.061-7.378c-43.805-13.14-90.154,11.764-103.294,55.568l-61.776,207.019

-						c-0.929,2.43-1.146,4.511-1.394,6.592H34.614v111.114c14.98,0,30.425-3.438,44.028-9.46

-						c22.375-10.353,47.262-15.891,71.7-15.891c24.439,0,49.102,5.521,70.995,15.668c14.533,6.449,29.513,9.683,44.733,9.683

-						c15.444,0,30.441-3.229,44.269-9.46c22.604-10.369,47.262-15.925,71.7-15.925c24.663,0,48.878,5.313,71.253,15.688

-						c14.052,6.443,29.513,9.683,44.716,9.683c15.221,0,30.218-3.231,44.271-9.459c22.354-10.371,47.272-15.908,71.459-15.908

-						c24.921,0,48.896,5.297,71.253,15.688c14.292,6.447,29.73,9.665,44.716,9.665c15.238,0,30.439-3.222,44.286-9.441

-						c22.354-10.371,47.262-15.926,71.684-15.926c4.162,0,20.981,1.29,37.578-9.786c29.514-12.898,40.571-20.294,66.403-36.082

-						C970.863,503.978,988.405,475.618,942.279,477.114z M506.54,477.149h-24.663l49.79-165.879l102.829,38.025L506.54,477.149z

-						 M505.852,106.54l-10.594,22.582c-6.932,14.068-21.224,23.751-37.579,23.751h-24.92c14.312,20.294,37.819,33.434,64.321,33.434

-						c43.354,0,78.632-35.033,78.632-78.391v-4.162h-66.18C507.915,103.754,506.316,104.924,505.852,106.54z M457.662,133.043

-						c8.53,0,16.132-5.073,19.589-12.452l10.388-22.581c3.921-8.53,12.229-14.292,21.896-14.292h81.159

-						c-10.611-41.74-48.654-72.405-93.611-72.405c-53.246,0-96.362,43.116-96.362,96.604c0,8.53,0.935,17.061,3.233,25.127

-						L457.662,133.043L457.662,133.043z"/>

-				</g>

-			</g>

-			<g id="Shape_115_2_">

-				<g>

-					<path d="M955.043,960.077C498.044,816.275,139.233,656.928,57.386,619.883c-8.459-3.412-18.289,0.482-21.482,8.692

-						c-3.442,8.458,0.218,17.618,8.459,20.812c20.345,9.146,40.457,18.062,59.898,26.521l-64.462,49.146

-						c-7.337,10.77-4.128,24.479,6.621,31.779c8.007,5.479,19.441,4.797,27.215-0.234l110.869-46.401

-						c271.261,114.071,477.234,180.62,767.346,272.049c5.938,0.919,11.438-3.194,12.354-9.378

-						C965.105,966.932,960.994,961.215,955.043,960.077z M255.134,660.479c8.256,0.473,16.232-1.366,23.087-4.812l169.988-76.801

-						c12.104-6.402,21.264-18.07,24.224-32.23l-0.218-85.509l117.958,105.62l-21.716,179.927c0,1.144-0.234,2.274-0.234,3.427

-						c-1.137,26.529,19.433,48.916,45.956,50.068c24.925,0.903,46.173-17.151,49.616-41.609l25.377-205.304

-						c0-0.903,0.218-1.823,0.218-2.741c0.452-14.404-5.265-27.434-14.855-36.578l-109.271-97.155l164.604-80.929l152.71,140.59

-						c6.854,6.636,16.248,10.765,26.296,10.765c20.578-0.25,37.045-16.936,36.812-37.278c0-10.967-5.027-20.797-12.567-27.667

-						L722.26,228.639c1.465,0.078,2.935,0.218,4.408,0.218c42.763,0,77.283-34.739,77.283-77.485

-						c0-42.762-34.521-77.517-77.283-77.517c-42.965,0-77.485,34.755-77.485,77.517c0,16.295,5.032,31.437,13.662,43.931

-						l-143.054-51.034L442.508,32.478c-5.951-8.24-15.106-13.724-25.829-15.095c-20.105-2.274-38.634,12.354-40.938,32.714

-						c-0.904,8.443,1.147,16.669,5.265,23.539l78.872,114.312c3.661,4.562,8.241,8.443,13.709,10.967l91.458,35.893L414.84,311.623

-						c-21.031,11.886-35.892,32.932-40.005,57.374l0.67,137.399l-138.879,62.64c-15.547,7.54-26.732,23.087-27.433,41.594

-						C208.057,637.158,228.636,659.342,255.134,660.479z"/>

-				</g>

-			</g>

-			<g id="Shape_75">

-				<g>

-					<path d="M888.713,892.24c-16.998-7.8-36.293-12.477-56.42-12.477c-20.018,0-39.295,4.654-56.326,12.477

-						c-16.871,7.642-35.475,12.123-54.973,12.123c-19.264,0-38.117-4.481-54.722-12.123c-17.099-7.8-36.394-12.477-56.53-12.477

-						c-19.907,0-39.232,4.654-56.295,12.477c-16.812,7.642-35.479,12.123-54.957,12.123c-19.514,0-38.104-4.481-54.753-12.123

-						c-17.092-7.8-36.402-12.477-56.451-12.477c-20.128,0-39.438,4.654-56.452,12.477c-16.7,7.642-35.396,12.123-54.895,12.123

-						c-19.373,0-38.085-4.481-54.816-12.123c-17.124-7.8-36.371-12.477-56.452-12.477c-20.018,0-39.296,4.654-56.389,12.477

-						c-16.747,7.642-35.302,12.123-54.8,12.123v83.168c19.499,0,38.054-4.529,54.8-12.124c17.093-8.104,36.355-12.771,56.389-12.771

-						c20.081,0,39.328,4.688,56.452,12.771c16.731,7.595,35.443,12.124,54.816,12.124c19.515,0,38.195-4.529,54.895-12.124

-						c16.999-8.104,36.324-12.771,56.452-12.771c20.033,0,39.359,4.688,56.451,12.771c16.646,7.595,35.239,12.124,54.753,12.124

-						c19.479,0,38.146-4.529,54.957-12.124c17.078-8.104,36.388-12.771,56.311-12.771c20.127,0,39.422,4.688,56.521,12.771

-						c16.604,7.595,35.458,12.124,54.753,12.124c19.479,0,38.064-4.529,54.957-12.124c17.047-8.104,36.309-12.771,56.311-12.771

-						c20.127,0,39.438,4.688,56.438,12.771c16.646,7.595,35.459,12.124,54.732,12.124v-83.168

-						C924.188,904.363,905.381,899.882,888.713,892.24z M634.367,158.983V640.22h302.951

-						C960.559,415.971,783.484,229.084,634.367,158.983z M873.287,685.479H734.988H199.156v123.678

-						c7.579,2.023,15.096,4.246,21.983,7.596c16.715,7.358,35.443,11.902,54.8,11.902c19.53,0,38.227-4.544,54.911-11.902

-						c16.999-8.035,36.312-12.754,56.438-12.754c20.062,0,39.354,4.702,56.451,12.754c16.684,7.358,35.271,11.902,54.769,11.902

-						c19.467,0,38.133-4.544,54.941-11.902c17.094-8.035,36.388-12.754,56.311-12.754c20.127,0,39.453,4.702,56.521,12.754

-						c16.604,7.358,35.476,11.902,54.753,11.902c3.758,0,7.312-0.934,10.834-1.354c0.426,0,0.426,0.424,0.859,0.424

-						c2.475,0,4.268-1.1,6.688-1.1c4.449-0.598,8.852-1.117,13.334-2.201c39.855-8.335,65.588-39.721,65.588-39.721l77.521-99.191

-						h-22.55v-0.025L873.287,685.479L873.287,685.479z M79.507,643.885c168.914,0,337.844,0,506.774,0

-						c2.013,0,3.664-1.667,3.664-3.646c0-208.511,0-417.002,0-625.495c0-1.604-0.865-2.61-1.982-3.13

-						c-1.242-0.88-2.861-1.006-4.166,0.473l-0.047,0.031c-0.017,0.016-0.032,0.016-0.048,0.031

-						c-168.931,208.507-337.844,417-506.774,625.509C75.01,640,76.079,643.885,79.507,643.885z"/>

-				</g>

-			</g>

-			<g id="Shape_94_2_">

-				<g>

-					<path d="M499.52,251.556c67.033-0.033,121.269-54.313,121.269-121.214c0-66.983-54.248-121.247-121.269-121.279

-						C432.561,9.095,378.41,63.359,378.41,130.342C378.405,197.242,432.561,251.522,499.52,251.556z M904.143,603.831

-						c-1.254-5.731-3.666-10.902-6.688-15.577l0.166-0.082l-0.414-0.363c-3.979-6.046-9.283-11.002-15.328-14.636l-93.43-88.854

-						l-94.521-175.824l-4.395-8.177l-0.197,0.148c-11.299-17.195-31.057-27.388-52.133-26.083H361.754

-						c-21.095-1.305-40.851,8.888-52.124,26.083l-0.198-0.148l-4.402,8.177l-94.536,175.824l-93.405,88.854

-						c-6.087,3.617-11.381,8.573-15.354,14.636l-0.396,0.363l0.148,0.082c-3.031,4.675-5.426,9.846-6.682,15.577

-						c-5.699,25.786,10.58,51.34,36.366,57.021c1,0.221,1.933,0.198,2.924,0.353c-5.979,11.646-9.68,24.608-9.68,38.588

-						c0,36.407,22.944,67.229,55.057,79.405l-0.149,0.312l141.778,61.354l-28.966,14.586c-2.998,1.205-5.806,2.771-8.572,4.354

-						l-0.355,0.188c-20.962,12.104-35.284,34.485-35.284,60.458c0,38.648,31.376,69.984,70.047,69.984

-						c8.581,0,16.749-1.768,24.364-4.625l0.1,0.247l2.062-0.854c0.495-0.248,1.021-0.463,1.544-0.711l153.434-66.395l153.442,66.395

-						c0.512,0.248,1.041,0.463,1.535,0.711l2.062,0.854l0.104-0.247c7.611,2.857,15.771,4.625,24.35,4.625

-						c38.67,0,70.039-31.336,70.039-69.984c0-25.973-14.289-48.354-35.268-60.458l-0.33-0.188c-2.793-1.585-5.584-3.151-8.594-4.354

-						l-28.977-14.586l141.765-61.354l-0.134-0.298c32.111-12.174,55.039-43.014,55.039-79.388c0-14.011-3.698-26.979-9.68-38.621

-						c1.021-0.148,1.934-0.132,2.924-0.33C893.57,655.171,909.842,629.617,904.143,603.831z M251.484,625.934l-0.074,0.148

-						c-11.621-6.591-24.827-10.638-39.033-11.134l83.097-72.853l40.726-65.892L350.01,675.6L251.484,625.934z M747.547,626.082

-						l-0.062-0.132l-84.74,42.684l14.223-169.432l26.518,42.896l83.09,72.853C772.391,615.444,759.16,619.475,747.547,626.082z"/>

-				</g>

-			</g>

-			<g id="Shape_103_2_">

-				<g>

-					<path d="M67.104,58.769H40.908c-8.845,0-15.987,7.143-15.987,15.987v197.389c0,8.845,7.143,16.004,15.987,16.004h26.196

-						c8.828,0,16.004-7.159,16.004-16.004V74.756C83.108,65.912,75.932,58.769,67.104,58.769z M958.008,58.769h-26.18

-						c-8.844,0-16.004,7.159-16.004,15.987v197.389c0,8.845,7.16,16.004,16.004,16.004h26.18c8.846,0,16.021-7.159,16.021-16.004

-						V74.756C974.029,65.912,966.854,58.769,958.008,58.769z M868.133,20.528h-34.889c-11.812,0-21.361,9.552-21.361,21.344v109.569

-						h-78.084c-2.812-5.694-6.822-10.934-12.01-15.263c-19.93-16.61-49.512-13.966-66.141,5.946c0,0-3.02,3.555-7.867,9.316h-81.906

-						c-11.625-25.084-36.928-42.504-66.392-42.504c-29.498,0-54.807,17.42-66.408,42.504h-88.479l-7.918-9.316

-						c-16.594-19.912-46.208-22.557-66.156-5.946c-5.188,4.329-9.198,9.568-11.994,15.263h-71.496V41.872

-						c0-11.792-9.552-21.344-21.345-21.344h-34.905c-11.793,0-21.328,9.552-21.328,21.344v263.175

-						c0,11.775,9.535,21.327,21.328,21.327h34.905c11.793,0,21.345-9.552,21.345-21.327v-109.57h72.793

-						c1.364,2.409,2.914,4.734,4.751,6.924l134.08,160.479v156.621c0,4.348-19.593,408.172-19.593,408.172

-						c-1.903,26.415,18.06,49.343,44.438,51.18c26.398,1.785,49.275-18.01,51.111-44.475l16.291-314.473

-						c2.896,0.186,15.529,0.305,18.917-0.117l21.582,314.59c1.752,26.448,24.68,46.26,51.158,44.479

-						c26.312-1.854,46.324-24.78,44.438-51.185c0,0-26.717-404.633-26.717-408.172V354.962l94.438-113.107l33.069-39.454

-						c1.816-2.189,3.388-4.531,4.75-6.924h79.359v109.569c0,11.792,9.552,21.344,21.345,21.344h34.905

-						c11.791,0,21.356-9.568,21.356-21.344V41.872C889.494,30.08,879.926,20.528,868.133,20.528z M557.166,258.55

-						c-16.375,14.454-37.77,23.281-61.254,23.281c-21.984,0-42.1-7.665-57.968-20.451l-55.98-65.903h45.502

-						c6.232,34.098,36.021,59.99,72.001,59.99c35.95,0,65.771-25.893,71.985-59.99h39.168

-						C584.742,226.137,557.283,258.634,557.166,258.55z"/>

-				</g>

-			</g>

-			<g id="Shape_66_2_">

-				<g>

-					<path d="M954.828,536.588c-56.789-64.501-140.688-90.534-227.962-90.534c-98.066,0-200.427,32.868-273.302,80.896

-						c-74.257,48.827-112.235,132.598-183.81,183.979c-18.285,13.115-39.022,21.131-60.761,26.91

-						c-10.467,2.791-21.148,5.027-31.92,7.104V308.357l452.396-139.2l-452.39-139.2h-34.8v721.299

-						c-44.104,8.194-86.454,18.807-115.636,53.908c-65.252,78.528,17.427,144.621,98.245,156.216

-						c41.349,5.958,83.18,8.158,125.118,8.158c73.646,0,147.663-6.834,220.396-12.292c111.557-8.444,229.441-23.832,328.891-76.273

-						c75.916-40.06,159.955-92.604,188.977-175.181C1008.665,647.679,996.016,583.375,954.828,536.588z M63.985,866.229

-						c0-25.729,33.368-47.307,78.295-53.152v106.312C97.354,913.572,63.985,891.994,63.985,866.229z M177.08,920.676V811.82

-						c51.727,2.827,92.108,26.141,92.108,54.408C269.188,894.535,228.807,917.849,177.08,920.676z"/>

-				</g>

-			</g>

-			<g id="Shape_119_2_">

-				<g>

-					<path d="M212.583,472.83c72.156,18.039,172.655,54.117,252.531,154.615l11.169,12.896l3.435,3.438

-						c-18.9-59.271-42.096-112.534-69.587-160.634c-48.084-82.46-118.538-168.374-221.605-184.69

-						c-11.155,40.364-6.003,83.326,3.435,116.821C197.112,435.035,203.981,453.94,212.583,472.83z M522.666,640.348l11.184-12.896

-						c79.877-100.498,180.361-136.576,252.531-154.615c8.587-18.89,15.471-37.795,21.459-57.551

-						c9.453-33.495,15.471-76.457,2.604-116.821c-101.354,16.335-173.513,102.23-221.621,184.69

-						c-27.491,48.108-50.668,101.359-69.572,160.633L522.666,640.348z M549.291,645.484l-11.141,13.754l20.604,11.17

-						c115.971-69.573,237.062-62.719,299.779-48.965c13.736-11.156,26.626-24.043,39.513-37.781

-						c21.488-23.205,44.665-55.834,55.819-93.646c-109.085-27.477-211.286,12.902-284.312,58.417

-						C625.748,575.062,586.235,607.705,549.291,645.484z M140.427,621.443c62.704-13.756,183.825-20.608,299.779,48.965

-						l20.622-11.17l-11.155-13.754c-36.944-37.779-76.438-70.43-120.255-97.055c-73.022-45.516-175.238-85.895-284.323-58.417

-						c11.155,37.812,34.346,70.439,55.819,93.646C113.801,597.386,126.688,610.287,140.427,621.443z M982.227,731.396l-3.434-2.584

-						c-16.322-18.896-65.287-57.557-134.009-78.18c-68.728-20.604-158.05-24.057-260.271,38.662

-						c-19.756,11.169-36.93,24.062-57.551,40.378l-9.453,7.727L508.045,746l8.604,7.721

-						c50.691,36.936,103.081,62.725,156.331,77.312c91.062,23.205,208.729,20.621,314.386-94.481

-						C986.514,733.963,984.811,733.963,982.227,731.396z M471.998,729.691c-20.623-16.322-37.795-29.229-57.552-40.396

-						c-101.365-61.838-190.694-59.255-260.281-38.646c-69.572,20.622-115.103,59.27-133.993,78.176l-3.435,2.582l-5.152,5.138

-						c105.636,115.118,223.322,117.688,314.383,94.495c53.251-14.604,105.651-40.378,156.333-77.322l8.586-7.721l-9.438-8.586

-						L471.998,729.691z M577.634,465.124c0-36.944-2.562-73.022-8.587-109.951c-9.438-62.718-28.342-140.012-69.558-199.295

-						c-40.378,59.283-60.136,136.577-69.604,199.295c-6.003,36.929-8.586,73.007-8.586,109.951c0,7.72,72.171,45.53,72.171,159.768

-						h12.021C505.492,510.641,577.634,472.845,577.634,465.124z"/>

-				</g>

-			</g>

-			<g id="Shape_102_2_">

-				<g>

-					<path d="M787.021,203.933c45.07,0,81.694-36.608,81.694-81.618c0-45.126-36.624-81.733-81.694-81.733

-						c-45.062,0-81.688,36.607-81.688,81.733C705.338,167.341,741.962,203.933,787.021,203.933z M975.197,429.71l-230.12-211.492

-						c-7.673-7.491-16.621-13.49-26.498-17.849L539.318,136.5L457.883,18.457c-6.297-8.451-15.926-14.467-27.261-15.926

-						c-21.428-2.402-40.718,13.026-43.354,34.471c-0.979,9.131,1.21,17.781,5.783,25.057l83.146,120.23

-						c3.845,5.055,8.667,8.933,14.468,11.584l96.35,38.033l-158.522,80.971c-21.931,12.794-37.854,34.735-42.182,60.737

-						l0.979,144.817l-146.381,66.013c-16.655,7.756-28.455,24.354-29.167,43.86c-0.497,11.534,3.066,22.206,9.181,30.989

-						c-48.274-18.356-78.949-30.022-78.949-30.022c-14.799-5.688-26.383-17.732-31.454-33.018

-						c-9.032-26.847-38.199-41.298-65.062-32.299c-26.865,9.049-41.332,38.199-32.284,65.096

-						c14.931,44.437,48.655,79.52,92.306,96.118L791,985.868c43.833,16.771,92.271,12.993,132.644-10.24

-						c24.609-14.037,33.017-45.375,18.908-69.969c-14.086-24.646-45.405-33.044-69.979-18.941

-						c-13.605,7.822-30.128,9.064-45.062,3.248c-0.033,0-72.304-27.492-169.88-64.581c17.583-6.099,30.975-21.727,33.492-40.884

-						l26.729-216.646c0.249-0.979,0.249-1.956,0.249-2.917c0.714-15.146-5.284-29.117-15.655-38.812l-115.2-102.148l173.51-85.579

-						l161.181,148.485c7.241,6.994,16.893,11.271,27.729,11.271c21.659-0.216,39.011-17.782,38.795-39.513

-						C988.472,447.078,983.169,436.704,975.197,429.71z M613.528,581.825L590.64,771.971c0,0.961-0.229,2.144-0.229,3.298

-						c-0.437,9.86,2.121,19.097,6.646,27.079C489.553,761.483,365.494,714.3,274.082,679.534c3.663-0.911,7.176-2.144,10.44-3.745

-						l179.377-80.954c12.771-6.978,22.389-19.307,25.531-33.956l-0.479-90.169L613.528,581.825z"/>

-				</g>

-			</g>

-			<g id="Shape_72_2_">

-				<g>

-					<path d="M99.477,483.251c-21.05,0-38.322,17.271-38.322,38.322c0,21.062,17.272,38.073,38.322,38.073

-						c21.066,0,38.075-17.013,38.075-38.073C137.551,500.522,120.543,483.251,99.477,483.251z M630.69,164.219

-						c45.69,0,82.99-37.052,82.99-82.996c0-45.943-37.3-83.242-82.99-83.242c-45.933,0-83.242,37.315-83.242,83.242

-						C547.448,127.15,584.764,164.219,630.69,164.219z M987.798,904.58L852.771,745.188c0,0-42.139-246.194-42.139-246.711

-						c0-0.242-6.335-27.93-6.335-27.93c0.247,0.266-17.009-77.65-30.223-138.573c21.083,12.191,40.104,23.112,41.127,23.607

-						c1.006,2.293,71.58,136.544,71.58,136.544c5.328,9.898,14.203,17.256,24.854,20.555c10.926,3.305,22.354,2.312,32.253-3.052

-						c9.896-5.062,17.259-13.956,20.56-24.86c3.547-10.674,2.54-22.089-2.788-31.981l-77.42-147.449c0,0-3.068-5.328-7.11-9.387

-						c-5.592-5.575-17.767-12.438-17.767-12.438l-150.253-85.52c-19.038-9.65-40.104-12.95-61.172-8.38

-						c-8.631,1.781-16.766,5.081-25.888,10.162c-1.04,0.247-34.275,14.962-53.562,60.147l-77.145,155.317

-						c0,0-117.508,22.848-121.58,23.604c-1.009,0.248-2.025,0.513-2.786,1.023l-109.62-77.669

-						c-24.63-17.272-27.682-69.039-27.929-71.085c-3.052-35.534-23.359-69.022-55.842-92.135

-						c-29.43-20.803-64.964-29.694-97.447-24.366c-25.372,4.322-46.95,17.52-60.659,36.805

-						c-10.684,14.994-16.26,33.025-16.26,52.294c0,0.247,1.534,16.744,1.534,16.744c5.576,32.746,25.636,63.199,55.066,84.266

-						c29.694,21.066,64.965,29.942,97.463,24.366l7.605-1.518c0.775-0.512,49.491-15.49,73.345,0.759

-						c0,0.247,81.989,58.135,103.814,73.604c-2.293,3.553-6.352,11.416-6.088,19.532c0,2.541,0.248,5.081,0.759,7.622

-						c4.312,22.831,26.659,38.062,49.491,33.488l145.685-28.424c0,0,12.438-3.812,17.771-7.622

-						c6.847-4.816,11.928-14.962,11.928-14.962l38.321-77.156c0,0,26.379,124.617,26.891,126.894

-						c-3.036,3.059-119.536,126.663-119.536,126.663l-2.013,2.524c-11.433,10.409-17.784,24.102-17.784,38.586v261.938

-						c0,27.913,22.854,50.497,50.777,50.497c27.666,0,50.514-22.584,50.514-50.497c0,0,0-215.229,0-218.775

-						c10.646-11.168,100.004-105.332,123.842-130.209c2.54,14.715,25.642,147.443,25.642,147.443

-						c2.023,11.685,7.604,22.354,15.979,30.969c0,0.243,160.415,189.599,160.415,189.599c8.876,10.162,21.066,16.497,34.517,17.768

-						c13.463,1.022,26.396-3.3,36.784-11.928c11.685-9.896,17.782-24.35,17.782-38.586

-						C999.725,925.63,995.914,914.214,987.798,904.58z M187.306,333.525c-8.892,12.422-22.601,20.556-39.592,23.591

-						c-23.854,4.058-50.514-2.788-72.85-19.037c-22.584-15.986-37.827-38.817-41.886-62.688l-1.006-11.91

-						c0-12.439,3.3-23.624,10.146-33.258c22.089-30.965,72.586-32.994,112.689-4.57

-						C194.663,254.077,209.378,302.545,187.306,333.525z"/>

-				</g>

-			</g>

-			<g id="Shape_62_2_">

-				<g>

-					<path d="M930.303,749.494c-18.771-8.887-40.047-14.092-62.305-14.092c-22.307,0-43.584,5.221-62.389,14.092

-						c-18.379,8.146-38.9,13.142-60.422,13.142c-21.512,0-42.1-4.985-60.43-13.142c-19.1-8.887-40.391-14.092-62.387-14.092

-						c-22.229,0-43.535,5.221-62.404,14.092c-18.297,8.146-39.109,13.142-60.402,13.142c-21.537,0-42.027-4.985-60.604-13.142

-						c-18.854-8.887-40.081-14.092-62.126-14.092c-22.258,0-43.55,5.221-62.403,14.092c-18.33,8.146-39.164,13.142-60.685,13.142

-						c-21.21,0-42.012-4.985-60.342-13.142c-18.854-8.887-40.146-14.092-62.387-14.092c-22.078,0-43.288,5.221-62.158,14.092

-						c-18.625,8.146-39.147,13.142-60.652,13.142v91.688c21.538,0,42.028-4.861,60.652-13.355

-						c18.87-8.592,40.081-13.828,62.158-13.828c22.242,0,43.534,5.204,62.387,13.828c18.33,8.494,39.148,13.355,60.342,13.355

-						c21.538,0,42.355-4.861,60.685-13.355c18.854-8.592,40.162-13.828,62.403-13.828c22.045,0,43.272,5.204,62.126,13.828

-						c18.575,8.494,39.065,13.355,60.604,13.355c21.293,0,42.105-4.861,60.402-13.355c18.869-8.592,40.184-13.828,62.404-13.828

-						c22.012,0,43.303,5.204,62.387,13.828c18.33,8.494,38.918,13.355,60.43,13.355c21.521,0,42.043-4.861,60.422-13.355

-						c18.805-8.592,40.082-13.828,62.389-13.828c22.258,0,43.533,5.204,62.305,13.828c18.412,8.494,38.918,13.355,60.439,13.355

-						v-91.688C969.221,762.636,948.715,757.646,930.303,749.494z M731.504,476.525c0,65.251,47.658,118.424,116.938,118.424

-						c64.497,0,116.866-53.173,116.866-118.424c0-65.307-52.354-118.229-116.865-118.229

-						C783.795,358.297,731.504,411.225,731.504,476.525z M193.439,670.609c18.297,8.38,39.131,13.354,60.358,13.354

-						c21.505,0,42.339-4.975,60.653-13.354c18.854-8.646,40.146-14.107,62.403-14.107c22.062,0,43.271,5.467,62.142,14.107

-						c18.543,8.38,39.05,13.354,60.571,13.354c21.292,0,42.104-4.975,60.422-13.354c18.871-8.646,40.18-14.107,62.42-14.107

-						c21.979,0,43.271,5.467,62.389,14.107c18.312,8.38,38.885,13.354,60.422,13.354c15.646,0,30.771-2.684,44.979-7.185

-						L595.225,321.016l226.771-41.849c33.271-6.432,57.439-32.862,57.439-66.74c0-37.331-30.062-67.248-66.758-67.248

-						c-2.646,0-5.104,0-7.604,0.229L454.79,209.889c-24.582,5.695-57.15,42.094-38.607,86.789c1.03,2.472,1.97,4.746,2.994,7.201

-						l91.42,166.9L167.679,661.51C176.746,663.703,185.289,666.896,193.439,670.609z"/>

-				</g>

-			</g>

-			<g id="Shape_104_2_">

-				<g>

-					<path d="M341.78,867.945c7.268,38.908,17.563,76.15,30.974,111.188c40.469,10.685,82.926,16.421,126.737,16.421

-						c57.521,0,112.717-9.901,164.087-27.938c-72.299-16.354-125.641-36.612-173.549-54.867

-						C440.699,893.965,396.631,877.219,341.78,867.945z M163.639,864.38c51.695,47.634,113.505,84.354,181.875,106.649

-						c-11.896-33.99-21.026-69.683-27.665-106.546C275.43,859.358,226.116,858.604,163.639,864.38z M314.013,841.446

-						c-3.462-22.951-5.999-46.297-7.729-69.917C180.487,746.83,80.798,701.339,24.748,642.872

-						C47.751,719.285,88.717,787.83,142.692,843.81C212.267,836.287,267.305,836.338,314.013,841.446z M265.316,627.634

-						c11.381,5.937,24.477,11.159,39.338,14.775C316.464,368.811,418.279,92.127,500.862,3.99c-0.463-0.018-0.908-0.052-1.371-0.052

-						c-148.215,0-281.175,65.135-372.037,168.252C81.243,300.951,123.066,553.501,265.316,627.634z M304.843,747.927

-						c-1.354-27.305-1.629-54.867-0.96-82.53c-18.718-4.047-35.069-10.423-49.022-17.688

-						C117.805,576.298,67.6,361.149,92.813,216.276C36.695,296.632,3.665,394.316,3.665,499.748c0,29.585,2.742,58.482,7.713,86.646

-						C48.505,658.916,158.462,717.914,304.843,747.927z M875.334,176.63C791.207,78.86,669.681,14.292,532.881,5.189

-						c-79.892,56.136-192.677,352.531-204.83,641.299C434.837,657.904,614.848,583.223,875.334,176.63z M456.057,790.059

-						c-44.062-2.531-86.303-7.354-126.172-14.188c1.783,23.26,4.395,46.177,7.902,68.683

-						c61.346,9.376,108.945,27.493,160.265,47.033c54.216,20.654,115.479,43.914,203.545,60.852

-						c125.475-56.104,223.312-162.804,267.616-294.187C854.662,769.593,630.463,800.154,456.057,790.059z M890.4,195.005

-						C628.183,602.077,441.213,679.861,327.331,668.994c-0.651,28.021-0.343,55.913,1.097,83.438

-						c40.709,7.308,83.903,12.444,128.938,15.032c187.262,10.816,433.07-25.419,526.217-160.812

-						c7.576-34.438,11.707-70.179,11.707-106.906C995.283,384.82,956.031,279.114,890.4,195.005z"/>

-				</g>

-			</g>

-			<g>

-				<path fill="#231F20" d="M730.357,111.158c0-54.18,38.338-98.086,85.604-98.086c47.33,0,85.688,43.906,85.688,98.086

-					c0,54.248-57.328,141.225-85.688,140.821C788.021,251.498,730.357,165.406,730.357,111.158z"/>

-				<path fill="none" stroke="#231F20" stroke-linecap="square" d="M815.967,259.104c-34.244,105.201,15.764,172.054,15.764,172.054

-					s28.497,123.7-21.446,180.556"/>

-				<path fill="#231F20" d="M219.732,966.231c11.641,26.303,59.109,23.016,67.936,0V640.534v-7.113h14.396l0.069,7.113V966.23

-					c8.758,23.017,56.295,26.304,67.877,0V404.166c26.913,59.867,40.817,124.044,63.146,185.349c1.229,1.78,2.539,3.429,3.837,4.791

-					l-0.896,0.827c0,0,56.787,49.312,68.708,45.953c20.487-0.609,31.434-8.562,35.817-12.802c8.089,2.332,15.135,0.479,18.362-9.318

-					v127.812v34.174v170.617c0,18.834,15.351,34.116,34.238,34.116c18.977,0,34.322-15.282,34.322-34.116V780.952h8.562v170.617

-					c0,18.834,15.331,34.116,34.24,34.116c18.896,0,34.242-15.282,34.242-34.116V780.952v-34.174V606.843l77.126,46.104l0.748-1.171

-					c2.48,0.758,5.078,1.171,7.813,1.171c14.17,0,25.683-11.444,25.683-25.624c0-11.699-7.872-21.579-18.696-24.591l-84.107-62.804

-					l-22.396-6.436H576.715l-17.729,6.298c-28.359,15.616-44.398,20.062-51.503,32.473l-20.556-12.403

-					c-11.646-44.104-58.765-195.483-64.861-206.917c-10.411-19.454-28.64-43.907-54.121-44.31

-					c-12.871-0.147-32.051-0.286-46.297-0.354l-0.069-4.172h-68.625l-0.079,4.241c-10.883,0.069-22.396,0.138-31.026,0.286

-					c-25.476,0.403-43.69,24.856-54.11,44.31c-6.917,12.939-66.44,205.417-67.464,218.223c-0.688,31.37,36.576,46.849,56.374,18.354

-					c22.327-61.308,36.231-125.479,63.085-185.352L219.732,966.231L219.732,966.231z M296.169,141.633

-					c-40.413,0-73.013,32.462-73.013,72.748c0,39.931,32.6,72.325,73.013,72.325c40.758,0,72.61-32.394,72.61-72.325

-					C368.779,174.095,336.927,141.633,296.169,141.633z M630.895,380.678c-36.015,0-65.062,29.107-65.062,65.279

-					c0,35.818,29.048,64.925,65.062,64.925c36.312,0,64.674-29.104,64.674-64.925C695.562,409.785,667.205,380.678,630.895,380.678z

-					"/>

-			</g>

-			<path fill="#231F20" d="M856.168,447.81c-15.576,121.438-130.451,293.075-275.441,293.075h-43.47v-87.934

-				C522.785,521.12,754.66,403.898,841.683,403.898C856.168,418.508,861.76,404.271,856.168,447.81z M899.637,389.179

-				c0-205.114-188.46-380.967-391.392-380.967l-7.235,0.069l-7.231-0.069C290.832,8.212,102.4,184.065,102.4,389.179

-				c0,86.829,211.935,587.766,398.615,600.538C687.688,976.944,899.637,476.007,899.637,389.179z M145.878,447.81

-				c-5.62-43.534,0-29.302,14.444-43.907c87.05,0,318.924,117.222,304.458,249.053v87.934H421.28

-				C276.329,740.885,161.427,569.243,145.878,447.81z"/>

-		</g>

-		<g id="weather">

-			<g>

-				<path d="M739.76,595.529c10.271,0,19.916,2.457,28.938,7.385c4.521,2.873,8.812,6.37,12.922,10.465

-					c11.506,11.492,17.252,25.649,17.252,42.484c0,16.419-5.746,30.576-17.252,42.471c-11.896,11.09-25.844,16.628-41.859,16.628

-					c-16.42,0-30.562-5.538-42.459-16.628c-11.908-11.895-17.858-26.052-17.858-42.471c0-16.835,5.951-30.992,17.858-42.484

-					c5.33-4.914,10.868-8.812,16.614-11.688C721.689,597.57,730.334,595.529,739.76,595.529z"/>

-				<path d="M695.429,744.511c2.059-2.47,4.537-4.104,7.397-4.927c3.289-2.055,6.979-3.068,11.089-3.068s8.19,1.018,12.312,3.068

-					c1.625,1.65,3.483,3.302,5.524,4.927c4.94,4.927,7.385,11.089,7.385,18.478c0,6.968-2.44,13.13-7.385,18.473

-					c-5.33,4.512-11.284,6.773-17.836,6.773c-7.384,0-13.546-2.266-18.486-6.773c-5.33-5.343-7.995-11.505-7.995-18.473

-					C687.434,755.6,690.099,749.438,695.429,744.511z"/>

-				<path d="M590.181,750.049c0,10.674-3.719,19.903-11.103,27.703c-7.8,6.981-16.822,10.479-27.066,10.479

-					c-10.686,0-19.916-3.497-27.716-10.479c-7.8-7.8-11.7-17.029-11.7-27.703c0-11.076,3.9-20.307,11.7-27.703

-					c3.276-3.271,6.994-5.746,11.089-7.384c4.901-2.873,10.465-4.312,16.627-4.312c6.557,0,12.714,1.638,18.46,4.938

-					c2.86,2.041,5.746,4.303,8.606,6.76C586.462,729.742,590.181,738.973,590.181,750.049z"/>

-				<path d="M637.565,829.467c3.288,2.055,6.366,4.511,9.229,7.384c8.229,7.804,12.324,17.853,12.324,30.188

-					c0,11.466-4.097,21.541-12.324,30.16c-8.203,7.787-18.058,11.695-29.55,11.695s-21.541-3.908-30.16-11.695

-					c-8.203-8.619-12.298-18.694-12.298-30.16c0-12.338,4.095-22.387,12.298-30.188c3.692-3.688,7.801-6.354,12.324-8.008

-					c5.33-2.856,11.271-4.304,17.836-4.304C624.631,824.539,631.417,826.178,637.565,829.467z"/>

-				<path d="M556.926,948.664c4.914,4.939,7.384,11.09,7.384,18.474c0,6.972-2.47,13.13-7.384,18.478

-					c-5.33,4.51-11.297,6.771-17.857,6.771c-7.389,0-13.54-2.263-18.471-6.771c-5.33-5.348-8.002-11.506-8.002-18.478

-					c0-7.384,2.672-13.529,8.002-18.474c2.062-2.457,4.523-4.107,7.395-4.927c3.302-2.041,6.979-3.067,11.076-3.067

-					c4.117,0,8.216,1.026,12.319,3.067C553.026,945.389,554.872,947.039,556.926,948.664z"/>

-				<path d="M461.505,836.24c2.873,2.062,5.746,4.312,8.619,6.771c7.384,7.384,11.083,16.614,11.083,27.703

-					c0,10.688-3.699,19.916-11.083,27.703c-7.793,6.968-16.841,10.479-27.099,10.479c-10.66,0-19.894-3.514-27.69-10.479

-					c-7.812-7.787-11.713-17.017-11.713-27.703c0-11.089,3.896-20.317,11.713-27.703c3.283-3.272,6.981-5.746,11.063-7.384

-					c4.934-2.887,10.479-4.314,16.627-4.314C449.604,831.312,455.753,832.963,461.505,836.24z"/>

-				<path d="M197.174,553.188c4.842,0,9.692,1.226,14.534,3.644c1.931,1.938,4.115,3.888,6.539,5.812

-					c5.811,5.824,8.716,13.095,8.716,21.806c0,8.239-2.905,15.508-8.716,21.812c-6.305,5.33-13.325,7.995-21.073,7.995

-					c-8.729,0-15.997-2.665-21.808-7.995c-6.292-6.306-9.445-13.569-9.445-21.812c0-8.711,3.153-15.979,9.445-21.806

-					c2.424-2.896,5.33-4.849,8.73-5.812C187.964,554.41,192.338,553.188,197.174,553.188z"/>

-				<path d="M452.978,555.373c13.562,13.572,20.349,30.303,20.349,50.154c0,19.369-6.786,36.088-20.348,50.141

-					c-14.048,13.078-30.521,19.617-49.404,19.617c-19.385,0-36.107-6.539-50.161-19.617c-14.053-14.053-21.062-30.771-21.062-50.141

-					c0-19.854,7.011-36.582,21.062-50.154c6.306-5.812,12.845-10.414,19.631-13.807c9.21-4.836,19.37-7.271,30.53-7.271

-					c12.097,0,23.498,2.912,34.147,8.725C443.064,546.416,448.141,550.523,452.978,555.373z"/>

-				<path d="M379.579,734.878c1.937,1.938,4.127,3.888,6.539,5.824c5.814,5.812,8.723,13.078,8.723,21.801

-					c0,8.229-2.905,15.496-8.723,21.788c-6.292,5.344-13.312,7.995-21.073,7.995c-8.704,0-15.971-2.651-21.795-7.995

-					c-6.305-6.292-9.458-13.559-9.458-21.788c0-8.723,3.152-15.989,9.458-21.801c2.411-2.925,5.33-4.862,8.717-5.824

-					c3.88-2.418,8.229-3.64,13.078-3.64C369.887,731.238,374.729,732.46,379.579,734.878z"/>

-				<path d="M192.078,690.547c7.755,0,15.022,1.951,21.808,5.812c3.387,2.431,6.786,5.097,10.173,7.994

-					c8.723,8.724,13.078,19.614,13.078,32.709c0,12.606-4.355,23.505-13.078,32.707c-9.197,8.229-19.864,12.352-31.98,12.352

-					c-12.59,0-23.497-4.121-32.695-12.352c-9.204-9.202-13.806-20.101-13.806-32.707c0-13.095,4.602-23.985,13.806-32.709

-					c3.874-3.873,8.236-6.784,13.085-8.713C178.285,692.238,184.812,690.547,192.078,690.547z"/>

-			</g>

-			<path d="M165.539,210.012c9.678,0,19.006,0.845,27.989,2.6c0-2.444,0-4.849,0-7.267c0-54.952,21.255-101.934,63.759-140.999

-				c42.848-39.04,94.328-58.565,154.46-58.565s111.443,19.526,153.94,58.565c5.877,5.174,11.411,10.712,16.589,16.601

-				c8.632,9.659,16.064,19.864,22.278,30.576c4.498,7.254,8.479,14.859,11.938,22.802c3.458,7.969,6.228,16.419,8.294,25.389

-				c17.265-5.863,35.751-8.788,55.459-8.788c46.645,0,86.555,15.184,119.729,45.591c31.101,28.691,47.688,62.557,49.769,101.622

-				c0,2.392,0,4.992,0,7.761c0,2.405,0,4.836,0,7.254c-0.364,3.107-0.702,6.383-1.04,9.841c11.414-4.823,23.842-7.241,37.311-7.241

-				c24.882,0,46.15,8.099,63.769,24.349c5.876,5.187,10.713,10.881,14.521,17.095c7.931,12.103,11.908,25.766,11.908,40.95

-				c0,22.824-8.813,42.325-26.43,58.591c-3.106,2.756-21.774,5.174-55.991,7.254c-255.352-14.456-510.715-14.456-766.082,0

-				c-30.063-6.214-51.663-15.379-64.786-27.495c-28.34-25.909-42.51-57.175-42.51-93.809c0-36.621,14.17-67.886,42.51-93.809

-				C91.243,222.973,125.459,210.012,165.539,210.012z"/>

-		</g>

-	</g>

-	<g id="Layer_2" display="inline">

-		<g>

-			<path d="M526.923,683.594c-4.379,1.785-8.624,4.058-12.604,6.96c0,0-24.979,18.234-24.998,18.248

-				c-37.046,23.867-85.829-16.771-115.271-41.513c-51.757-43.492-86.174-93.638-112.446-155.558

-				c-13.26-31.261-7.401-68.262,19.107-87.61l25.035-18.276c7.236-5.279,12.873-11.946,16.938-19.341

-				c0.312-0.548,0.604-1.116,0.896-1.679c0.354-0.701,0.729-1.393,1.058-2.108c16.877-35.828,2.646-99.832-38.491-158.604

-				c-49.215-70.314-118.652-107.01-157.018-83.714c-4.233,1.762-8.339,3.979-12.194,6.794L81.74,172.881

-				c-6.987,5.101-13.5,11.177-19.323,17.55c-11.683,12.782-20.792,27.815-27.031,43.952c-11.192,28.961-12.741,60.659-8.94,91.228

-				c6.333,50.953,26.219,99.717,48.612,145.512c53.494,109.391,117.015,209.58,201.69,297.451

-				c43.627,45.272,102.77,110.104,151.493,149.942c18.749,15.332,38.436,29.521,59.303,41.844

-				c38.99,23.019,83.437,38.169,129.062,31.276c12.522-1.893,26.509-4.637,38.241-9.591c1.695-0.671,3.363-1.429,5.009-2.267

-				c1.396-0.686,2.339-1.19,2.813-1.46c0.089-0.053,0.178-0.1,0.264-0.146c0.083-0.048,0.125-0.072,0.119-0.078

-				c1.662-0.979,3.297-2.039,4.888-3.198l35.193-25.688c12.354-9.021,20.157-21.997,23.076-35.958

-				c8.803-37.051-6.507-93.32-43.008-145.479C634.305,697.918,565.441,661.226,526.923,683.594z M238.01,377.108

-				c-1.679-0.741-3.393-1.498-5.139-2.269c-1.691-0.889-3.414-1.794-5.165-2.715c-0.875-0.459-1.759-0.924-2.65-1.392

-				c-0.859-0.525-1.723-1.053-2.596-1.585c-1.743-1.068-3.51-2.152-5.304-3.25c-6.94-4.741-14.147-9.959-20.899-16.186

-				c-6.906-6.05-13.442-12.951-19.745-20.232c-3.03-3.746-6.23-7.406-9.038-11.398l-4.337-5.902l-4.084-6.098

-				c-5.31-8.222-10.146-16.75-14.317-25.44c-4.099-8.722-7.556-17.575-10.249-26.347c-5.474-17.523-7.401-34.853-6.112-49.481

-				c0.717-7.309,2.287-13.912,4.417-19.479c2.137-5.574,4.841-10.07,7.429-13.479c2.691-3.333,5.135-5.67,6.914-7.115

-				c1.811-1.408,2.776-2.16,2.776-2.16s-0.585,1.211-1.683,3.482c-0.591,1.017-1.059,2.516-1.669,4.061

-				c-0.316,0.765-0.563,1.648-0.791,2.589c-0.252,0.884-0.52,1.823-0.803,2.815c-0.373,2.08-0.86,4.172-1.065,6.542

-				c-0.174,1.13-0.19,2.374-0.242,3.616c-0.093,1.236-0.139,2.479-0.001,3.642c0.041,0.574,0.081,1.158,0.122,1.752l0.052,1.061

-				l0.007,1.231c0.004,0.827,0.008,1.666,0.014,2.516l0.003,0.641c-0.12,0.462,0.161-0.54,0.137-0.412l0.01,0.067l0.02,0.134

-				l0.04,0.268l0.161,1.077c0.212,1.405,0.43,2.847,0.652,4.323c0.28,1.458,0.568,2.953,0.86,4.478

-				c0.834,3.079,1.454,6.159,2.492,9.393c0.407,1.588,1.046,3.219,1.587,4.867c0.516,1.643,1.016,3.288,1.706,4.977

-				c1.242,3.336,2.693,6.754,4.037,10.214c1.575,3.427,3.186,6.929,4.822,10.489c3.502,7.027,7.179,14.252,11.412,21.37

-				c2.094,3.583,4.147,7.198,6.486,10.704l3.25,5.099l1.562,2.455l0.775,1.232l1.049,1.505c2.504,3.574,5.01,7.147,7.504,10.706

-				c2.299,3.562,5.138,6.625,7.447,10.115c2.464,3.341,5.095,6.507,7.598,9.719c2.557,3.136,5.003,6.402,7.685,9.253

-				c1.264,1.515,2.475,3.114,3.764,4.558c1.307,1.433,2.603,2.851,3.884,4.255c2.485,2.958,5.093,5.539,7.609,8.251

-				c2.589,2.429,4.979,5.335,7.562,7.476c1.272,1.135,2.47,2.399,3.699,3.581c1.261,1.083,2.499,2.146,3.711,3.188

-				c4.859,4.387,9.637,7.867,14.18,11.073c2.246,1.411,4.487,2.868,6.611,4.083c2.211,1.15,4.243,2.206,6.077,3.161

-				c1.931,0.849,3.656,1.609,5.156,2.27c1.643,0.727,3.276,0.939,4.479,1.321c1.232,0.298,2.197,0.635,2.843,0.833

-				c0.646,0.204,0.979,0.31,0.979,0.31s-1.199,0.243-3.448,0.696c-1.132,0.178-2.496,0.619-4.157,0.726

-				c-1.66,0.115-3.567,0.248-5.704,0.397c-2.137,0.017-4.506-0.185-7.084-0.282c-2.567-0.232-5.314-0.778-8.264-1.199

-				c-2.882-0.76-6.001-1.403-9.18-2.439C244.718,379.678,241.327,378.699,238.01,377.108z M686.726,923.926

-				c0.681,0.063,1.024,0.1,1.024,0.1s-1.121,0.485-3.225,1.404c-1.068,0.41-2.312,1.129-3.91,1.584

-				c-1.602,0.461-3.438,0.994-5.491,1.588c-2.087,0.469-4.445,0.771-6.987,1.218c-2.559,0.312-5.355,0.355-8.33,0.563

-				c-2.978-0.136-6.163-0.105-9.485-0.452c-3.312-0.455-6.834-0.696-10.411-1.557c-1.798-0.369-3.633-0.749-5.503-1.135

-				c-1.84-0.517-3.713-1.038-5.619-1.568c-0.954-0.267-1.915-0.535-2.883-0.805c-0.949-0.33-1.906-0.666-2.872-1.002

-				c-1.928-0.68-3.887-1.365-5.869-2.064c-7.781-3.172-15.926-6.76-23.837-11.427c-8.022-4.46-15.864-9.832-23.562-15.626

-				c-3.749-3.021-7.646-5.93-11.23-9.24l-5.483-4.854l-5.272-5.104c-6.92-6.923-13.444-14.24-19.35-21.858

-				c-5.844-7.663-11.083-15.595-15.562-23.603c-9.035-15.979-14.565-32.517-16.38-47.088c-0.835-7.296-0.688-14.083,0.222-19.975

-				c0.916-5.896,2.611-10.86,4.423-14.74c1.934-3.823,3.827-6.623,5.267-8.408c1.475-1.759,2.26-2.697,2.26-2.697

-				s-0.319,1.311-0.913,3.76c-0.363,1.116-0.505,2.685-0.777,4.321c-0.146,0.813-0.202,1.729-0.228,2.697

-				c-0.062,0.916-0.125,1.89-0.194,2.919c0.072,2.115,0.039,4.263,0.336,6.621c0.069,1.141,0.313,2.361,0.527,3.585

-				c0.169,1.229,0.386,2.453,0.763,3.561c0.161,0.558,0.325,1.115,0.489,1.688l0.271,1.025l0.27,1.202

-				c0.177,0.811,0.354,1.626,0.541,2.456l0.139,0.624c-0.02,0.478,0.044-0.555,0.047-0.427l0.022,0.062l0.05,0.125l0.095,0.256

-				l0.384,1.019c0.503,1.329,1.021,2.692,1.549,4.088c0.58,1.368,1.175,2.771,1.78,4.198c1.462,2.833,2.718,5.714,4.409,8.658

-				c0.732,1.468,1.701,2.928,2.575,4.426c0.853,1.496,1.688,3,2.717,4.504c1.914,3.002,4.052,6.038,6.095,9.14

-				c2.263,3.02,4.569,6.103,6.92,9.238c4.899,6.134,10.017,12.421,15.65,18.489c2.8,3.062,5.569,6.166,8.594,9.102l4.248,4.302

-				l2.045,2.07l1.019,1.04l1.341,1.252c3.202,2.969,6.404,5.936,9.593,8.891c2.994,3,6.416,5.396,9.404,8.32

-				c3.112,2.746,6.352,5.288,9.474,7.902c3.16,2.527,6.238,5.205,9.46,7.428c1.556,1.219,3.074,2.522,4.643,3.666

-				c1.578,1.124,3.141,2.239,4.688,3.344c3.054,2.367,6.146,4.346,9.175,6.469c3.045,1.828,5.99,4.165,8.968,5.716

-				c1.479,0.844,2.919,1.826,4.368,2.724c1.461,0.794,2.896,1.572,4.301,2.337c5.672,3.268,11.073,5.663,16.188,7.844

-				c2.492,0.905,4.989,1.856,7.323,2.6c2.403,0.661,4.612,1.267,6.604,1.812c2.065,0.426,3.912,0.806,5.521,1.136

-				c1.756,0.361,3.398,0.228,4.656,0.347C685.039,923.742,686.055,923.87,686.726,923.926z"/>

-			<path d="M544.217,491.371c0-32.957-26.712-59.672-59.645-59.672c-32.955,0-59.672,26.716-59.672,59.672

-				s26.717,59.67,59.672,59.67C517.505,551.041,544.217,524.327,544.217,491.371z"/>

-			<path d="M487.68,4.391c-1.01-0.103-2.036-0.157-3.07-0.157c-16.479,0-29.836,13.358-29.836,29.836s13.355,29.836,29.836,29.836

-				h0.001v0.036c114.771,0,222.691,42.166,303.88,123.382c81.195,81.228,125.915,189.218,125.915,304.081

-				c0,62.366-13.036,122.485-38.746,178.691l54.264,24.822c28.354-61.979,44.154-130.897,44.154-203.517

-				C974.075,221.969,756.537,6.016,487.68,4.391z"/>

-			<path d="M467.543,194.92c-22.248,0-43.945,2.361-64.854,6.846l0.034,0.173c-12.823,3.341-22.306,14.968-22.306,28.84

-				c0,16.478,13.359,29.836,29.836,29.836c2.771,0,5.443-0.406,7.989-1.114c16.123-3.244,32.688-4.909,49.298-4.909

-				c136.761,0,248.021,111.326,248.021,248.165c0,41.945-10.641,83.375-30.771,119.812l0.019,0.009

-				c-2.443,4.329-3.854,9.312-3.854,14.638c0,16.479,13.357,29.836,29.836,29.836c11.413,0,21.322-6.413,26.34-15.825

-				c24.28-44.024,38.104-94.634,38.104-148.47C775.238,332.741,637.438,194.92,467.543,194.92z"/>

-		</g>

-	</g>

-	<path display="inline" d="M456.415,678.788c0,0,2.938-387.358,292.077-511.137L591.166,49.354h404.861v404.662l-96.785-121.05

-		C899.242,332.966,704.182,224.591,456.415,678.788z M6.637,948.5V139.176h449.778v172.287H178.913v464.762h644.838V633.894h172.276

-		V948.5H6.637z"/>

-</g>

-<g id="Layer_2_1_" display="none">

-	<path display="inline" d="M767.914,560.297c49.297,0,89.299,39.841,89.299,89.139c0,49.299-40.002,88.994-89.299,88.994

-		c-49.459,0-89.318-39.695-89.318-88.994C678.596,600.138,718.455,560.297,767.914,560.297z M234.379,560.297

-		c49.172,0,89.299,39.841,89.299,89.139c0,49.299-40.127,88.994-89.299,88.994c-49.459,0-89.442-39.695-89.442-88.994

-		C144.937,600.138,184.92,560.297,234.379,560.297z M636.926,387.02c-19.687-16.017-55.11-47.467-104.569-66.857

-		c-50.5-19.849-182.261-16.789-188.522-16.789c-1.812,0-17.712-1.678-22.576,12.508c-5.205,14.814-20.315,63.968-25.035,79.231

-		c-3.518,11.145,0.144,23.509,16.167,23.509h151.592H638.92C648.232,418.471,671.274,415.105,636.926,387.02z M231.185,314.366

-		c-12.831,5.339-37.399,21.822-47.162,29.611c-8.399,6.865-79.842,74.646-32.662,74.646h56.01c24.119,0,30.526-10.382,36.018-23.509

-		c4.899-12.051,27.35-69.765,30.688-79.231C280.788,297.568,257.745,303.221,231.185,314.366z M978.42,615.392

-		c-3.213,5.798-20.764,19.851-29.02,26.704c-9.295,7.34-21.967,22.611-28.086,29.61c-3.805,4.45-23.49,7.034-31.745,7.034

-		c14.501-75.267-35.712-154.945-121.979-154.945c-101.664,0-135.527,90.986-127.9,152.057c0.756,4.396-1.221,9.906-10.229,9.906

-		h-63.816H407.486c-35.856,0-40.289-38.925-56.619-82.121c-11.611-30.849-50.231-79.842-116.918-79.842

-		c-41.832,0-82.749,19.238-105.199,55.418c-20.297,32.984-21.212,76.021-22.594,91.596c-6.245-0.628-42.586-8.396-57.983-17.405

-		c-11.45-6.712-19.866-17.267-23.976-25.196c-9.637-18.467-15.416-51.9-17.103-79.357c0-26.271,20.62-27.798,27.17-46.576

-		c6.425-18.772-7.932-61.055,2.746-92.045c10.085-29.458,25.053-38.917,30.239-43.808c24.712-23.662,63.026-51.899,102.723-70.824

-		c13.729-6.568-8.686-7.035-15.434-14.509c-4.253-4.576-6.245-11.754-4.702-14.348c1.059-1.831,2.89-1.525,28.534-1.525

-		c7.322,0,11.001,0,27.314-0.924c4.576-0.144,11.145-2.593,16.349-3.203c26.094-3.509,70.061-3.509,114.942-3.509

-		c122.876,0,186.692,16.483,222.871,28.696c12.67,4.28,9.297,5.958,26.256,16.035c9.764,5.949,45.799,30.221,56.926,38.314

-		c48.096,34.645,81.224,61.519,81.224,61.519c5.958,6.104,87.469,17.553,179.514,50.52c13.585,4.89,39.696,19.085,52.043,38.934

-		c4.146,6.561,16.654,21.374,25.809,34.043c9.009,12.67,13.729,25.492,14.519,30.681

-		C997.801,569.755,987.268,599.061,978.42,615.392z"/>

-</g>

-<g id="Layer_3" display="none">

-	<polygon display="inline" points="123.801,4.172 123.801,992.159 879.045,498.166 	"/>

-</g>

-<g id="wrench" display="none">

-	<path display="inline" d="M982.192,178.811L826.938,334.066H664.679V169.273L818.003,16.01

-		c-22.576-6.822-46.118-11.59-70.867-11.59c-136.543,0-247.25,110.768-247.25,247.25c0,38.088,9.296,73.703,24.749,105.998

-		L29.531,852.65c-14.85,14.971-24.146,35.494-24.146,58.432c0,45.395,36.822,82.338,82.457,82.338

-		c22.817,0,43.462-9.176,58.19-24.146L641.258,474.23c32.113,15.332,67.85,24.688,105.878,24.688

-		c136.543,0,247.25-110.768,247.25-247.25C994.386,226.135,989.436,201.99,982.192,178.811z"/>

-</g>

-<path display="none" d="M801.92,543.083C899.197,596.99,975.73,692.571,994.9,806.324c0,102.729-83.347,186.076-186.075,186.076

-	h-85.77c37.009-32.315,64.146-75.05,76.925-124.052h8.845c34.283,0,62.023-27.741,62.023-62.024

-	c-15.989-61.781-58.238-113.631-113.024-147.006c-28.894-50.094-67.84-95.279-115.146-131.804

-	c7.117-12.205,13.387-24.955,18.747-38.069c49.487-16.385,85.376-62.417,85.376-117.295V248.1

-	c0-54.937-35.889-100.972-85.406-117.295c-20.229-49.184-53.362-91.251-94.311-123.99C585.014,2.666,603.548,0,622.75,0

-	c137.013,0,248.1,111.087,248.1,248.1v124.05C870.85,438.596,844.381,498.562,801.92,543.083z M560.725,992.4H188.575

-	C85.786,992.4,2.5,909.055,2.5,806.324l0,0C21.671,692.571,98.203,596.99,195.541,543.083

-	c-42.521-44.521-68.99-104.487-68.99-170.933V248.1C126.55,111.087,237.638,0,374.65,0c137.012,0,248.1,111.087,248.1,248.1v124.05

-	c0,66.446-26.47,126.413-68.931,170.933c97.277,53.907,173.81,149.488,192.98,263.241l0,0

-	C746.801,909.055,663.454,992.4,560.725,992.4z M498.7,372.15V248.1c0-68.476-55.575-124.049-124.05-124.049

-	c-68.477,0-124.05,55.573-124.05,124.049v124.05c0,68.476,55.574,124.049,124.05,124.049

-	C443.125,496.199,498.7,440.626,498.7,372.15z M622.75,806.324C595.068,699.477,490.099,620.25,374.65,620.25l0,0l0,0

-	c-115.509,0-220.419,79.227-248.101,186.074l0,0c0,34.284,27.802,62.024,62.025,62.024h372.148

-	C595.009,868.35,622.75,840.608,622.75,806.324L622.75,806.324z"/>

-<path display="none" d="M647.504,998.062H274.168c-103.117,0-186.668-83.611-186.668-186.668l0,0

-	c19.232-114.115,96.008-210.003,193.656-264.082c-42.656-44.662-69.21-104.818-69.21-171.478V251.391

-	C211.945,113.941,323.387,2.5,460.836,2.5s248.891,111.441,248.891,248.891v124.445c0,66.658-26.555,126.814-69.149,171.477

-	c97.588,54.08,174.362,149.968,193.596,264.082l0,0C834.172,914.451,750.561,998.062,647.504,998.062z M585.281,375.836V251.391

-	c0-68.693-55.752-124.445-124.445-124.445c-68.694,0-124.445,55.752-124.445,124.445v124.445

-	c0,68.693,55.751,124.445,124.445,124.445C529.529,500.281,585.281,444.529,585.281,375.836z M709.727,811.395

-	c-27.77-107.188-133.073-186.668-248.891-186.668l0,0l0,0c-115.877,0-221.121,79.48-248.891,186.668l0,0

-	c0,34.394,27.891,62.224,62.223,62.224h373.336C681.896,873.617,709.727,845.787,709.727,811.395L709.727,811.395z"/>

-<path display="none" d="M145.955,419.761L21.881,295.688C9.765,283.6,3.707,267.698,3.707,251.825

-	c0-15.902,6.058-31.775,18.174-43.861L145.955,83.892c17.751-17.66,44.407-23.021,67.61-13.48

-	c23.143,9.572,38.289,32.291,38.289,57.342v62.098h62.036v124.072h-62.036v61.977c0,25.051-15.146,47.77-38.289,57.342

-	C190.362,442.753,163.706,437.481,145.955,419.761z M854.045,580.214l124.073,124.074c12.116,12.055,18.175,27.928,18.175,43.861

-	c0,15.872-6.059,31.743-18.175,43.86L854.045,916.085c-17.751,17.689-44.468,22.961-67.61,13.449

-	c-23.202-9.572-38.288-32.291-38.288-57.312v-62.034H686.11V686.112h62.036v-62.037c0-25.08,15.086-47.799,38.288-57.371

-	C809.577,557.192,836.294,562.524,854.045,580.214z M437.963,686.112H500v124.073h-62.037V686.112z M375.927,189.851h62.036v124.072

-	h-62.036V189.851z M313.89,562.04H65.743c-34.229,0-62.036,27.807-62.036,62.035v248.146c0,34.353,27.807,62.037,62.036,62.037

-	H313.89c34.229,0,62.037-27.686,62.037-62.037V624.075C375.927,589.847,348.119,562.04,313.89,562.04z M251.854,810.188H127.78

-	V686.112h124.073L251.854,810.188L251.854,810.188z M500,189.851h62.036v124.072H500V189.851z M934.256,65.776H686.109

-	c-34.289,0-62.036,27.777-62.036,62.037V375.96c0,34.26,27.747,62.037,62.036,62.037h248.146c34.29,0,62.037-27.777,62.037-62.037

-	V127.813C996.293,93.554,968.546,65.776,934.256,65.776z M872.22,313.923H748.146V189.851H872.22V313.923z M562.036,686.112h62.037

-	v124.073h-62.037V686.112z"/>

-<path display="none" d="M996,499c0,20.92-1.696,41.534-4.238,61.817c-0.636,4.904-1.453,9.868-2.24,14.773

-	c-2.692,16.953-6.114,33.784-10.442,50.192c-0.818,2.907-1.454,5.874-2.211,8.75c-11.808,41.02-28.64,80.044-49.951,116.038

-	c-42.625,72.323-102.99,132.658-175.313,175.344c-35.995,21.313-74.986,38.084-116.037,49.921c-2.906,0.757-5.813,1.394-8.749,2.21

-	c-16.439,4.329-33.149,7.75-50.163,10.445c-4.903,0.757-9.869,1.634-14.805,2.21C541.534,993.304,520.948,995,500,995l0,0l0,0

-	c-20.949,0-41.535-1.696-61.818-4.238c-5.024-0.636-9.868-1.453-14.834-2.24c-17.014-2.692-33.784-6.114-50.224-10.442

-	c-2.815-0.819-5.843-1.454-8.688-2.211c-41.11-11.808-80.042-28.638-116.067-49.951C176.075,883.292,115.71,822.928,72.964,750.605

-	c-21.282-35.997-38.054-74.987-49.83-116.039c-0.787-2.875-1.453-5.813-2.24-8.749c-4.359-16.439-7.75-33.149-10.384-50.163

-	c-0.757-4.903-1.635-9.838-2.331-14.805C5.695,540.534,4,519.92,4,499l0,0l0,0c0-20.919,1.695-41.535,4.238-61.817

-	c0.605-5.025,1.453-9.868,2.301-14.834c2.634-17.014,6.055-33.785,10.444-50.224c0.757-2.816,1.423-5.843,2.24-8.689

-	c11.777-40.99,28.579-80.014,49.861-116.04c42.686-72.292,103.111-132.687,175.404-175.372

-	c35.935-21.222,74.958-38.024,115.978-49.8c2.876-0.817,5.843-1.482,8.688-2.241c16.407-4.389,33.239-7.75,50.192-10.443

-	c4.965-0.726,9.81-1.636,14.864-2.33C458.465,4.696,479.051,3,500,3l0,0l0,0c20.948,0,41.534,1.696,61.818,4.209

-	c4.903,0.634,9.869,1.482,14.772,2.33c16.953,2.633,33.784,6.054,50.192,10.443c2.907,0.759,5.874,1.424,8.75,2.241

-	C676.554,34,715.578,50.802,751.572,72.024c72.322,42.745,132.658,103.171,175.344,175.403

-	c21.312,36.025,38.084,74.956,49.921,116.067c0.756,2.847,1.394,5.813,2.21,8.689c4.329,16.439,7.75,33.209,10.445,50.224

-	c0.757,4.965,1.634,9.777,2.209,14.803C994.304,457.465,996,478.081,996,499L996,499L996,499z M211.888,386.291l-92.183-92.243

-	C86.586,355.354,66,424.407,66,499c0,74.594,20.586,143.678,53.705,204.952l92.183-92.154C198.174,576.742,190,538.93,190,499

-	C190,459.099,198.174,421.317,211.888,386.291z M500,933c74.594,0,143.678-20.525,204.951-53.645l-92.152-92.213

-	C577.742,800.765,539.931,809,500,809c-39.87,0-77.682-8.235-112.738-21.948l-92.273,92.243C356.353,912.475,425.406,933,500,933z

-	 M500,65c-74.594,0-143.647,20.586-204.951,53.705l92.273,92.183C422.318,197.173,460.13,189,500,189

-	c39.931,0,77.742,8.173,112.738,21.888l92.151-92.183C643.678,85.586,574.594,65,500,65z M738.828,435.578L738.828,435.578

-	C716.092,349.874,649.188,283,563.453,260.172l0,0l0,0c-8.234-2.148-16.469-3.966-25.066-5.329C525.854,252.604,513.198,251,500,251

-	c-13.199,0-25.854,1.604-38.447,3.844c-8.477,1.362-16.802,3.181-24.976,5.329l0,0l0,0C350.873,283,283.999,349.934,261.173,435.578

-	l0,0l0,0c-2.149,8.173-3.966,16.5-5.328,25.006C253.604,473.177,252,485.831,252,499c0,13.17,1.604,25.823,3.845,38.387

-	c1.302,8.6,3.179,16.771,5.328,25.066l0,0l0,0c22.735,85.673,89.761,152.548,175.404,175.313l0,0l0,0

-	c8.174,2.148,16.499,3.937,24.976,5.326C474.146,745.396,486.801,747,500,747c13.198,0,25.854-1.604,38.387-3.844

-	c8.599-1.303,16.771-3.182,25.066-5.328l0,0l0,0c85.673-22.769,152.548-89.643,175.312-175.375l0,0l0,0

-	c2.149-8.234,3.938-16.468,5.328-25.037C746.396,524.823,748,512.17,748,499c0-13.169-1.604-25.823-3.845-38.416

-	C742.763,452.077,740.977,443.75,738.828,435.578L738.828,435.578z M880.355,294.048l-92.213,92.274

-	C801.766,421.317,810,459.099,810,499c0,39.93-8.234,77.742-21.948,112.738l92.243,92.15C913.475,642.678,934,573.594,934,499

-	C934,424.407,913.475,355.354,880.355,294.048z"/>

-<path display="none" d="M962.252,997.5H35c0-119.822,140.166-219.904,331.177-252.59v-49.025

-	c-78.83-45.965-132.465-130.401-132.465-228.244v-6.698c-38.444-13.796-66.247-49.543-66.247-92.687

-	c0-43.115,27.803-78.891,66.217-92.627v-6.699C233.712,122.609,352.291,4,498.611,4c146.319,0,264.93,118.609,264.93,264.93v6.699

-	c38.414,13.736,66.217,49.512,66.217,92.627c0,43.144-27.803,78.891-66.217,92.687v6.698c0,97.843-53.635,182.279-132.465,228.152

-	v49.027C822.178,777.596,962.252,877.678,962.252,997.5z"/>

-<g id="plus" display="none">

-	<polygon display="inline" points="998.5,374.438 624.062,374.438 624.062,0 374.438,0 374.438,374.438 0,374.438 0,624.062 

-		374.438,624.062 374.438,998.5 624.062,998.5 624.062,624.062 998.5,624.062 	"/>

-</g>

-<g id="play" display="none">

-	<polygon display="inline" points="123,0 871.875,499.25 123,998.5 	"/>

-</g>

-<path display="none" d="M375.312,871.562L3.5,995.5l123.938-371.812L747.125,4L995,251.875L375.312,871.562z M127.438,871.562

-	l185.906-61.97L189.406,685.656L127.438,871.562z M251.375,623.688l123.938,123.938l371.812-371.812L623.188,251.875

-	L251.375,623.688z"/>

-<g id="plus_x5F_alt" display="none">

-	<path display="inline" d="M500.381,3C225.704,3,3,225.705,3,500.381s222.704,497.381,497.381,497.381

-		s497.381-222.705,497.381-497.381S775.058,3,500.381,3z M749.071,562.553H562.553V749.07H438.208V562.553H251.69V438.209h186.518

-		v-186.52h124.344v186.52h186.519V562.553z"/>

-</g>

-<g id="New_Symbol">

-	<polygon points="6.821,300 204.087,500 252.975,500 252.975,346.154 991.437,346.154 991.437,253.848 252.975,253.848 252.975,100 

-		204.087,100 	"/>

-	<polygon points="993.179,700 795.884,900 745.282,900 745.282,746.154 6.821,746.154 6.821,653.848 745.282,653.848 745.282,500 

-		795.884,500 	"/>

-</g>

-</svg>

diff --git a/assets/icons/table.svg b/assets/icons/table.svg
deleted file mode 100755
index 8fb7f6b..0000000
--- a/assets/icons/table.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M9.152 24.544v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.728q-0.224 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.256 0 0.416-0.16t0.16-0.416zM9.152 17.696v-3.456q0-0.224-0.16-0.384t-0.416-0.16h-5.728q-0.224 0-0.416 0.16t-0.16 0.384v3.456q0 0.224 0.16 0.384t0.416 0.16h5.728q0.256 0 0.416-0.16t0.16-0.384zM18.272 24.544v-3.424q0-0.256-0.16-0.416t-0.384-0.16h-5.728q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.224 0 0.384-0.16t0.16-0.416zM9.152 10.816v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.728q-0.224 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.256 0 0.416-0.16t0.16-0.416zM18.272 17.696v-3.456q0-0.224-0.16-0.384t-0.384-0.16h-5.728q-0.256 0-0.416 0.16t-0.16 0.384v3.456q0 0.224 0.16 0.384t0.416 0.16h5.728q0.224 0 0.384-0.16t0.16-0.384zM27.424 24.544v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.696q0.256 0 0.416-0.16t0.16-0.416zM18.272 10.816v-3.424q0-0.256-0.16-0.416t-0.384-0.16h-5.728q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.224 0 0.384-0.16t0.16-0.416zM27.424 17.696v-3.456q0-0.224-0.16-0.384t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.384v3.456q0 0.224 0.16 0.384t0.416 0.16h5.696q0.256 0 0.416-0.16t0.16-0.384zM27.424 10.816v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.696q0.256 0 0.416-0.16t0.16-0.416zM29.728 5.12v19.424q0 1.184-0.864 2.016t-2.016 0.832h-24q-1.152 0-2.016-0.832t-0.832-2.016v-19.424q0-1.184 0.832-2.016t2.016-0.864h24q1.184 0 2.016 0.864t0.864 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/trash.svg b/assets/icons/trash.svg
deleted file mode 100755
index 92fc6a9..0000000
--- a/assets/icons/trash.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M9.152 13.12v10.272q0 0.256-0.16 0.416t-0.416 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-10.272q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM13.728 13.12v10.272q0 0.256-0.16 0.416t-0.416 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-10.272q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM18.272 13.12v10.272q0 0.256-0.16 0.416t-0.384 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-10.272q0-0.256 0.16-0.416t0.416-0.16h1.152q0.224 0 0.384 0.16t0.16 0.416zM20.576 26.048v-16.928h-16v16.928q0 0.384 0.128 0.704t0.256 0.48 0.192 0.16h14.848q0.064 0 0.192-0.16t0.256-0.48 0.128-0.704zM8.576 6.816h8l-0.864-2.080q-0.128-0.16-0.288-0.192h-5.664q-0.192 0.032-0.32 0.192zM25.152 7.392v1.152q0 0.256-0.16 0.416t-0.416 0.16h-1.728v16.928q0 1.472-0.832 2.56t-2.016 1.088h-14.848q-1.184 0-2.016-1.056t-0.864-2.528v-16.992h-1.696q-0.256 0-0.416-0.16t-0.16-0.416v-1.152q0-0.256 0.16-0.416t0.416-0.16h5.504l1.248-2.976q0.288-0.672 0.992-1.12t1.408-0.48h5.696q0.704 0 1.408 0.48t0.96 1.12l1.248 2.976h5.536q0.256 0 0.416 0.16t0.16 0.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-1.svg b/assets/icons/up-1.svg
deleted file mode 100755
index 3d1d135..0000000
--- a/assets/icons/up-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M0.576 15.904l14.272-14.24 14.304 14.24-5.088 5.088-5.632-5.664v14.944h-7.136v-14.944l-5.664 5.664z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-circled.svg b/assets/icons/up-circled.svg
deleted file mode 100755
index b5117fe..0000000
--- a/assets/icons/up-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M19.968 15.616q-0.16 0.352-0.544 0.352h-3.424v6.272q0 0.256-0.16 0.416t-0.416 0.16h-3.424q-0.256 0-0.416-0.16t-0.16-0.416v-6.272h-3.424q-0.256 0-0.416-0.16t-0.16-0.416q0-0.224 0.192-0.416l5.696-5.696q0.192-0.16 0.416-0.16t0.384 0.16l5.728 5.696q0.256 0.288 0.128 0.64zM13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-dir.svg b/assets/icons/up-dir.svg
deleted file mode 100755
index 8c4e614..0000000
--- a/assets/icons/up-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
-<g>
-</g>
-	<path d="M18.272 21.696q0 0.448-0.32 0.8t-0.8 0.32h-16q-0.48 0-0.8-0.32t-0.352-0.8 0.352-0.832l8-8q0.32-0.32 0.8-0.32t0.8 0.32l8 8q0.32 0.352 0.32 0.832z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-open.svg b/assets/icons/up-open.svg
deleted file mode 100755
index 5e09c38..0000000
--- a/assets/icons/up-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 21.6l16-16 16 16-4.736 4.736-11.264-11.232-11.264 11.232z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up.svg b/assets/icons/up.svg
deleted file mode 100755
index 27a4f28..0000000
--- a/assets/icons/up.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="32" viewBox="0 0 14 32">
-<g>
-</g>
-	<path d="M13.664 8.768q-0.16 0.352-0.512 0.352h-4v22.272q0 0.256-0.16 0.416t-0.416 0.16h-3.424q-0.256 0-0.416-0.16t-0.16-0.416v-22.272h-4q-0.384 0-0.512-0.352t0.096-0.608l6.24-6.88q0.16-0.16 0.416-0.16 0.224 0 0.416 0.16l6.336 6.88q0.224 0.288 0.096 0.608z" fill="#000000" />
-</svg>
diff --git a/assets/icons/user.svg b/assets/icons/user.svg
deleted file mode 100755
index db12c41..0000000
--- a/assets/icons/user.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M20.736 31.904h-11.968c-3.296 0-5.952-2.656-5.952-5.984v0c0.608-3.648 3.072-6.72 6.176-8.448-1.344-1.408-2.208-3.36-2.208-5.472v-4c0-4.384 3.552-7.968 7.968-7.968s7.968 3.584 7.968 7.968v4c0 2.112-0.864 4.064-2.208 5.472 3.104 1.728 5.568 4.8 6.176 8.448v0c0 3.328-2.656 5.984-5.952 5.984zM18.72 12v-4c0-2.176-1.76-3.968-3.968-3.968s-3.968 1.792-3.968 3.968v4c0 2.176 1.76 3.968 3.968 3.968s3.968-1.792 3.968-3.968zM22.72 25.92c-0.896-3.424-4.256-5.952-7.968-5.952v0 0c-3.712 0-7.072 2.528-7.968 5.952v0c0 1.12 0.896 2.016 1.984 2.016h11.936c1.12 0 2.016-0.896 2.016-2.016v0z" fill="#000000" />
-</svg>
diff --git a/assets/icons/users.svg b/assets/icons/users.svg
deleted file mode 100755
index 4c479c0..0000000
--- a/assets/icons/users.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M25.664 17.344c3.104 1.728 5.568 4.8 6.176 8.416 0 3.296-2.656 5.952-5.952 5.952h-2.752c1.184-1.024 2.048-2.4 2.464-3.968h0.288c1.088 0 1.984-0.864 1.984-1.984-0.512-1.984-1.856-3.616-3.616-4.704-0.928-1.6-2.176-3.040-3.68-4.224 0.224-0.384 0.416-0.8 0.576-1.216 1.6-0.512 2.752-1.984 2.752-3.744v-3.968c0-1.76-1.152-3.232-2.752-3.744-0.64-1.568-1.696-2.944-3.008-3.968 0.576-0.128 1.184-0.224 1.792-0.224 4.384 0 7.936 3.552 7.936 7.936v3.968c0 2.144-0.864 4.064-2.208 5.472zM17.952 31.712h-11.904c-3.296 0-5.952-2.656-5.952-5.952v0c0.608-3.648 3.040-6.688 6.176-8.416-1.376-1.408-2.208-3.328-2.208-5.472v-3.968c0-4.384 3.552-7.936 7.936-7.936s7.936 3.552 7.936 7.936v3.968c0 2.112-0.864 4.032-2.208 5.472 3.104 1.728 5.568 4.768 6.176 8.416v0c0 3.296-2.656 5.952-5.952 5.952zM15.968 11.872v-3.968c0-2.176-1.792-3.968-3.968-3.968-2.208 0-3.968 1.792-3.968 3.968v3.968c0 2.208 1.76 3.968 3.968 3.968 2.176 0 3.968-1.76 3.968-3.968zM19.936 25.76c-0.896-3.424-4.256-5.952-7.936-5.952v0 0c-3.712 0-7.072 2.528-7.936 5.952v0c0 1.12 0.864 1.984 1.984 1.984h11.904c1.088 0 1.984-0.864 1.984-1.984v0z" fill="#000000" />
-</svg>
diff --git a/assets/icons/vertical-ellipsis.svg b/assets/icons/vertical-ellipsis.svg
deleted file mode 100644
index 536604f..0000000
--- a/assets/icons/vertical-ellipsis.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -256 1792 1792">
-  <g transform="matrix(1 0 0 -1 0 1536)">
-   <path fill="currentColor"
-d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-  </g>
-
-</svg>
diff --git a/assets/icons/wrench.svg b/assets/icons/wrench.svg
deleted file mode 100755
index 298a8ea..0000000
--- a/assets/icons/wrench.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M31.607 5.643l-5.023 5.023h-5.25v-5.332l4.961-4.959c-0.734-0.221-1.492-0.375-2.297-0.375-4.416 0-7.998 3.584-7.998 8 0 1.232 0.301 2.385 0.801 3.43l-16.020 16.015c-0.48 0.485-0.781 1.149-0.781 1.891 0 1.469 1.191 2.664 2.668 2.664 0.738 0 1.406-0.297 1.883-0.781l16.023-16.018c1.041 0.496 2.197 0.799 3.424 0.799 4.422 0 8-3.584 8-8 0-0.826-0.156-1.607-0.391-2.357z" fill="#000000" />
-</svg>
diff --git a/assets/icons/wrench2.svg b/assets/icons/wrench2.svg
deleted file mode 100644
index 6caa1ea..0000000
--- a/assets/icons/wrench2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M448 1472q0-26-19-45t-45-19-45 19-19 45 19 45 45 19 45-19 19-45zm644-420l-682 682q-37 37-90 37-52 0-91-37l-106-108q-38-36-38-90 0-53 38-91l681-681q39 98 114.5 173.5t173.5 114.5zm634-435q0 39-23 106-47 134-164.5 217.5t-258.5 83.5q-185 0-316.5-131.5t-131.5-316.5 131.5-316.5 316.5-131.5q58 0 121.5 16.5t107.5 46.5q16 11 16 28t-16 28l-293 169v224l193 107q5-3 79-48.5t135.5-81 70.5-35.5q15 0 23.5 10t8.5 25z" fill="#fff"/></svg>
diff --git a/assets/img/CouchDB-horizontal-logo.png b/assets/img/CouchDB-horizontal-logo.png
deleted file mode 100644
index 0489be3..0000000
--- a/assets/img/CouchDB-horizontal-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/CouchDB-negative-logo.png b/assets/img/CouchDB-negative-logo.png
deleted file mode 100644
index dde0eed..0000000
--- a/assets/img/CouchDB-negative-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/asf-feather-logo.png b/assets/img/asf-feather-logo.png
deleted file mode 100644
index 842f5ed..0000000
--- a/assets/img/asf-feather-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/couch-watermark.png b/assets/img/couch-watermark.png
deleted file mode 100644
index 0376c6e..0000000
--- a/assets/img/couch-watermark.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/couchdb-logo.png b/assets/img/couchdb-logo.png
deleted file mode 100644
index 133dceb..0000000
--- a/assets/img/couchdb-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/github.png b/assets/img/github.png
deleted file mode 100644
index ea6ff54..0000000
--- a/assets/img/github.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/glyphicons-halflings-white.png b/assets/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484..0000000
--- a/assets/img/glyphicons-halflings-white.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/glyphicons-halflings.png b/assets/img/glyphicons-halflings.png
deleted file mode 100644
index 79bc568..0000000
--- a/assets/img/glyphicons-halflings.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/googleplus.png b/assets/img/googleplus.png
deleted file mode 100755
index 68bd450..0000000
--- a/assets/img/googleplus.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/linen.png b/assets/img/linen.png
deleted file mode 100644
index 365c61a..0000000
--- a/assets/img/linen.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/linkedin.png b/assets/img/linkedin.png
deleted file mode 100644
index 11f7d74..0000000
--- a/assets/img/linkedin.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/loader.gif b/assets/img/loader.gif
deleted file mode 100644
index 96ff188..0000000
--- a/assets/img/loader.gif
+++ /dev/null
Binary files differ
diff --git a/assets/img/twitter.png b/assets/img/twitter.png
deleted file mode 100644
index c9b8935..0000000
--- a/assets/img/twitter.png
+++ /dev/null
Binary files differ
diff --git a/assets/index.underscore b/assets/index.underscore
deleted file mode 100644
index 0602283..0000000
--- a/assets/index.underscore
+++ /dev/null
@@ -1,52 +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.
--->
-<!doctype html>
-<html lang="en">
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-  <meta http-equiv="Content-Language" content="en" />
-  <link rel="shortcut icon" type="image/png" href="dashboard.assets/img/couchdb-logo.png"/>
-  <title><%= htmlWebpackPlugin.options.title %></title>
-
-  <!-- Application styles. -->
-  <style>
-    .noscript-warning {
-      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-      padding: 1px 30px 10px 30px;
-      color: #fff;
-      background: @brandHighlight;
-      margin: 100px;
-      box-shadow: 2px 2px 5px #989898;
-    }
-  </style>
-
-</head>
-
-<body id="home">
-
-  <noscript>
-    <div class="noscript-warning">
-      <h1>Please turn on JavaScript</h1>
-      <p>Fauxton <strong>requires</strong> JavaScript to be enabled.</p>
-    </div>
-  </noscript>
-
-
-  <div id="app"></div>
-
- <!-- <%= htmlWebpackPlugin.options.generationLabel %> : <%= htmlWebpackPlugin.options.generationDate %> -->
-</body>
-</html>
diff --git a/assets/js/plugins/beautify.js b/assets/js/plugins/beautify.js
deleted file mode 100644
index 4beb640..0000000
--- a/assets/js/plugins/beautify.js
+++ /dev/null
@@ -1,4047 +0,0 @@
-/*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
-/* AUTO-GENERATED. DO NOT MODIFY. */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-
- JS Beautifier
----------------
-
-
-  Written by Einar Lielmanis, <einar@beautifier.io>
-      https://beautifier.io/
-
-  Originally converted to javascript by Vital, <vital76@gmail.com>
-  "End braces on own line" added by Chris J. Shull, <chrisjshull@gmail.com>
-  Parsing improvements for brace-less statements by Liam Newman <bitwiseman@beautifier.io>
-
-
-  Usage:
-    js_beautify(js_source_text);
-    js_beautify(js_source_text, options);
-
-  The options are:
-    indent_size (default 4)          - indentation size,
-    indent_char (default space)      - character to indent with,
-    preserve_newlines (default true) - whether existing line breaks should be preserved,
-    max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,
-
-    jslint_happy (default false) - if true, then jslint-stricter mode is enforced.
-
-            jslint_happy        !jslint_happy
-            ---------------------------------
-            function ()         function()
-
-            switch () {         switch() {
-            case 1:               case 1:
-              break;                break;
-            }                   }
-
-    space_after_anon_function (default false) - should the space before an anonymous function's parens be added, "function()" vs "function ()",
-          NOTE: This option is overriden by jslint_happy (i.e. if jslint_happy is true, space_after_anon_function is true by design)
-
-    brace_style (default "collapse") - "collapse" | "expand" | "end-expand" | "none" | any of the former + ",preserve-inline"
-            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.
-            preserve-inline will try to preserve inline blocks of curly braces
-
-    space_before_conditional (default true) - should the space before conditional statement be added, "if(true)" vs "if (true)",
-
-    unescape_strings (default false) - should printable characters in strings encoded in \xNN notation be unescaped, "example" vs "\x65\x78\x61\x6d\x70\x6c\x65"
-
-    wrap_line_length (default unlimited) - lines should wrap at next opportunity after this number of characters.
-          NOTE: This is not a hard limit. Lines will continue until a point where a newline would
-                be preserved if it were present.
-
-    end_with_newline (default false)  - end output with a newline
-
-
-    e.g
-
-    js_beautify(js_source_text, {
-      'indent_size': 1,
-      'indent_char': '\t'
-    });
-
-*/
-
-(function() {
-
-/* GENERATED_BUILD_OUTPUT */
-var legacy_beautify_js =
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var Beautifier = __webpack_require__(1).Beautifier,
-  Options = __webpack_require__(5).Options;
-
-function js_beautify(js_source_text, options) {
-  var beautifier = new Beautifier(js_source_text, options);
-  return beautifier.beautify();
-}
-
-module.exports = js_beautify;
-module.exports.defaultOptions = function() {
-  return new Options();
-};
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var Output = __webpack_require__(2).Output;
-var Token = __webpack_require__(3).Token;
-var acorn = __webpack_require__(4);
-var Options = __webpack_require__(5).Options;
-var Tokenizer = __webpack_require__(7).Tokenizer;
-var line_starters = __webpack_require__(7).line_starters;
-var positionable_operators = __webpack_require__(7).positionable_operators;
-var TOKEN = __webpack_require__(7).TOKEN;
-
-
-function in_array(what, arr) {
-  return arr.indexOf(what) !== -1;
-}
-
-function ltrim(s) {
-  return s.replace(/^\s+/g, '');
-}
-
-function generateMapFromStrings(list) {
-  var result = {};
-  for (var x = 0; x < list.length; x++) {
-    // make the mapped names underscored instead of dash
-    result[list[x].replace(/-/g, '_')] = list[x];
-  }
-  return result;
-}
-
-function reserved_word(token, word) {
-  return token && token.type === TOKEN.RESERVED && token.text === word;
-}
-
-function reserved_array(token, words) {
-  return token && token.type === TOKEN.RESERVED && in_array(token.text, words);
-}
-// Unsure of what they mean, but they work. Worth cleaning up in future.
-var special_words = ['case', 'return', 'do', 'if', 'throw', 'else', 'await', 'break', 'continue', 'async'];
-
-var validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];
-
-// Generate map from array
-var OPERATOR_POSITION = generateMapFromStrings(validPositionValues);
-
-var OPERATOR_POSITION_BEFORE_OR_PRESERVE = [OPERATOR_POSITION.before_newline, OPERATOR_POSITION.preserve_newline];
-
-var MODE = {
-  BlockStatement: 'BlockStatement', // 'BLOCK'
-  Statement: 'Statement', // 'STATEMENT'
-  ObjectLiteral: 'ObjectLiteral', // 'OBJECT',
-  ArrayLiteral: 'ArrayLiteral', //'[EXPRESSION]',
-  ForInitializer: 'ForInitializer', //'(FOR-EXPRESSION)',
-  Conditional: 'Conditional', //'(COND-EXPRESSION)',
-  Expression: 'Expression' //'(EXPRESSION)'
-};
-
-function remove_redundant_indentation(output, frame) {
-  // This implementation is effective but has some issues:
-  //     - can cause line wrap to happen too soon due to indent removal
-  //           after wrap points are calculated
-  // These issues are minor compared to ugly indentation.
-
-  if (frame.multiline_frame ||
-    frame.mode === MODE.ForInitializer ||
-    frame.mode === MODE.Conditional) {
-    return;
-  }
-
-  // remove one indent from each line inside this section
-  output.remove_indent(frame.start_line_index);
-}
-
-// we could use just string.split, but
-// IE doesn't like returning empty strings
-function split_linebreaks(s) {
-  //return s.split(/\x0d\x0a|\x0a/);
-
-  s = s.replace(acorn.allLineBreaks, '\n');
-  var out = [],
-    idx = s.indexOf("\n");
-  while (idx !== -1) {
-    out.push(s.substring(0, idx));
-    s = s.substring(idx + 1);
-    idx = s.indexOf("\n");
-  }
-  if (s.length) {
-    out.push(s);
-  }
-  return out;
-}
-
-function is_array(mode) {
-  return mode === MODE.ArrayLiteral;
-}
-
-function is_expression(mode) {
-  return in_array(mode, [MODE.Expression, MODE.ForInitializer, MODE.Conditional]);
-}
-
-function all_lines_start_with(lines, c) {
-  for (var i = 0; i < lines.length; i++) {
-    var line = lines[i].trim();
-    if (line.charAt(0) !== c) {
-      return false;
-    }
-  }
-  return true;
-}
-
-function each_line_matches_indent(lines, indent) {
-  var i = 0,
-    len = lines.length,
-    line;
-  for (; i < len; i++) {
-    line = lines[i];
-    // allow empty lines to pass through
-    if (line && line.indexOf(indent) !== 0) {
-      return false;
-    }
-  }
-  return true;
-}
-
-
-function Beautifier(source_text, options) {
-  options = options || {};
-  this._source_text = source_text || '';
-
-  this._output = null;
-  this._tokens = null;
-  this._last_last_text = null;
-  this._flags = null;
-  this._previous_flags = null;
-
-  this._flag_store = null;
-  this._options = new Options(options);
-}
-
-Beautifier.prototype.create_flags = function(flags_base, mode) {
-  var next_indent_level = 0;
-  if (flags_base) {
-    next_indent_level = flags_base.indentation_level;
-    if (!this._output.just_added_newline() &&
-      flags_base.line_indent_level > next_indent_level) {
-      next_indent_level = flags_base.line_indent_level;
-    }
-  }
-
-  var next_flags = {
-    mode: mode,
-    parent: flags_base,
-    last_token: flags_base ? flags_base.last_token : new Token(TOKEN.START_BLOCK, ''), // last token text
-    last_word: flags_base ? flags_base.last_word : '', // last TOKEN.WORD passed
-    declaration_statement: false,
-    declaration_assignment: false,
-    multiline_frame: false,
-    inline_frame: false,
-    if_block: false,
-    else_block: false,
-    do_block: false,
-    do_while: false,
-    import_block: false,
-    in_case_statement: false, // switch(..){ INSIDE HERE }
-    in_case: false, // we're on the exact line with "case 0:"
-    case_body: false, // the indented case-action block
-    indentation_level: next_indent_level,
-    alignment: 0,
-    line_indent_level: flags_base ? flags_base.line_indent_level : next_indent_level,
-    start_line_index: this._output.get_line_number(),
-    ternary_depth: 0
-  };
-  return next_flags;
-};
-
-Beautifier.prototype._reset = function(source_text) {
-  var baseIndentString = source_text.match(/^[\t ]*/)[0];
-
-  this._last_last_text = ''; // pre-last token text
-  this._output = new Output(this._options, baseIndentString);
-
-  // If testing the ignore directive, start with output disable set to true
-  this._output.raw = this._options.test_output_raw;
-
-
-  // Stack of parsing/formatting states, including MODE.
-  // We tokenize, parse, and output in an almost purely a forward-only stream of token input
-  // and formatted output.  This makes the beautifier less accurate than full parsers
-  // but also far more tolerant of syntax errors.
-  //
-  // For example, the default mode is MODE.BlockStatement. If we see a '{' we push a new frame of type
-  // MODE.BlockStatement on the the stack, even though it could be object literal.  If we later
-  // encounter a ":", we'll switch to to MODE.ObjectLiteral.  If we then see a ";",
-  // most full parsers would die, but the beautifier gracefully falls back to
-  // MODE.BlockStatement and continues on.
-  this._flag_store = [];
-  this.set_mode(MODE.BlockStatement);
-  var tokenizer = new Tokenizer(source_text, this._options);
-  this._tokens = tokenizer.tokenize();
-  return source_text;
-};
-
-Beautifier.prototype.beautify = function() {
-  // if disabled, return the input unchanged.
-  if (this._options.disabled) {
-    return this._source_text;
-  }
-
-  var sweet_code;
-  var source_text = this._reset(this._source_text);
-
-  var eol = this._options.eol;
-  if (this._options.eol === 'auto') {
-    eol = '\n';
-    if (source_text && acorn.lineBreak.test(source_text || '')) {
-      eol = source_text.match(acorn.lineBreak)[0];
-    }
-  }
-
-  var current_token = this._tokens.next();
-  while (current_token) {
-    this.handle_token(current_token);
-
-    this._last_last_text = this._flags.last_token.text;
-    this._flags.last_token = current_token;
-
-    current_token = this._tokens.next();
-  }
-
-  sweet_code = this._output.get_code(eol);
-
-  return sweet_code;
-};
-
-Beautifier.prototype.handle_token = function(current_token, preserve_statement_flags) {
-  if (current_token.type === TOKEN.START_EXPR) {
-    this.handle_start_expr(current_token);
-  } else if (current_token.type === TOKEN.END_EXPR) {
-    this.handle_end_expr(current_token);
-  } else if (current_token.type === TOKEN.START_BLOCK) {
-    this.handle_start_block(current_token);
-  } else if (current_token.type === TOKEN.END_BLOCK) {
-    this.handle_end_block(current_token);
-  } else if (current_token.type === TOKEN.WORD) {
-    this.handle_word(current_token);
-  } else if (current_token.type === TOKEN.RESERVED) {
-    this.handle_word(current_token);
-  } else if (current_token.type === TOKEN.SEMICOLON) {
-    this.handle_semicolon(current_token);
-  } else if (current_token.type === TOKEN.STRING) {
-    this.handle_string(current_token);
-  } else if (current_token.type === TOKEN.EQUALS) {
-    this.handle_equals(current_token);
-  } else if (current_token.type === TOKEN.OPERATOR) {
-    this.handle_operator(current_token);
-  } else if (current_token.type === TOKEN.COMMA) {
-    this.handle_comma(current_token);
-  } else if (current_token.type === TOKEN.BLOCK_COMMENT) {
-    this.handle_block_comment(current_token, preserve_statement_flags);
-  } else if (current_token.type === TOKEN.COMMENT) {
-    this.handle_comment(current_token, preserve_statement_flags);
-  } else if (current_token.type === TOKEN.DOT) {
-    this.handle_dot(current_token);
-  } else if (current_token.type === TOKEN.EOF) {
-    this.handle_eof(current_token);
-  } else if (current_token.type === TOKEN.UNKNOWN) {
-    this.handle_unknown(current_token, preserve_statement_flags);
-  } else {
-    this.handle_unknown(current_token, preserve_statement_flags);
-  }
-};
-
-Beautifier.prototype.handle_whitespace_and_comments = function(current_token, preserve_statement_flags) {
-  var newlines = current_token.newlines;
-  var keep_whitespace = this._options.keep_array_indentation && is_array(this._flags.mode);
-
-  if (current_token.comments_before) {
-    var comment_token = current_token.comments_before.next();
-    while (comment_token) {
-      // The cleanest handling of inline comments is to treat them as though they aren't there.
-      // Just continue formatting and the behavior should be logical.
-      // Also ignore unknown tokens.  Again, this should result in better behavior.
-      this.handle_whitespace_and_comments(comment_token, preserve_statement_flags);
-      this.handle_token(comment_token, preserve_statement_flags);
-      comment_token = current_token.comments_before.next();
-    }
-  }
-
-  if (keep_whitespace) {
-    for (var i = 0; i < newlines; i += 1) {
-      this.print_newline(i > 0, preserve_statement_flags);
-    }
-  } else {
-    if (this._options.max_preserve_newlines && newlines > this._options.max_preserve_newlines) {
-      newlines = this._options.max_preserve_newlines;
-    }
-
-    if (this._options.preserve_newlines) {
-      if (newlines > 1) {
-        this.print_newline(false, preserve_statement_flags);
-        for (var j = 1; j < newlines; j += 1) {
-          this.print_newline(true, preserve_statement_flags);
-        }
-      }
-    }
-  }
-
-};
-
-var newline_restricted_tokens = ['async', 'break', 'continue', 'return', 'throw', 'yield'];
-
-Beautifier.prototype.allow_wrap_or_preserved_newline = function(current_token, force_linewrap) {
-  force_linewrap = (force_linewrap === undefined) ? false : force_linewrap;
-
-  // Never wrap the first token on a line
-  if (this._output.just_added_newline()) {
-    return;
-  }
-
-  var shouldPreserveOrForce = (this._options.preserve_newlines && current_token.newlines) || force_linewrap;
-  var operatorLogicApplies = in_array(this._flags.last_token.text, positionable_operators) ||
-    in_array(current_token.text, positionable_operators);
-
-  if (operatorLogicApplies) {
-    var shouldPrintOperatorNewline = (
-        in_array(this._flags.last_token.text, positionable_operators) &&
-        in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)
-      ) ||
-      in_array(current_token.text, positionable_operators);
-    shouldPreserveOrForce = shouldPreserveOrForce && shouldPrintOperatorNewline;
-  }
-
-  if (shouldPreserveOrForce) {
-    this.print_newline(false, true);
-  } else if (this._options.wrap_line_length) {
-    if (reserved_array(this._flags.last_token, newline_restricted_tokens)) {
-      // These tokens should never have a newline inserted
-      // between them and the following expression.
-      return;
-    }
-    this._output.set_wrap_point();
-  }
-};
-
-Beautifier.prototype.print_newline = function(force_newline, preserve_statement_flags) {
-  if (!preserve_statement_flags) {
-    if (this._flags.last_token.text !== ';' && this._flags.last_token.text !== ',' && this._flags.last_token.text !== '=' && (this._flags.last_token.type !== TOKEN.OPERATOR || this._flags.last_token.text === '--' || this._flags.last_token.text === '++')) {
-      var next_token = this._tokens.peek();
-      while (this._flags.mode === MODE.Statement &&
-        !(this._flags.if_block && reserved_word(next_token, 'else')) &&
-        !this._flags.do_block) {
-        this.restore_mode();
-      }
-    }
-  }
-
-  if (this._output.add_new_line(force_newline)) {
-    this._flags.multiline_frame = true;
-  }
-};
-
-Beautifier.prototype.print_token_line_indentation = function(current_token) {
-  if (this._output.just_added_newline()) {
-    if (this._options.keep_array_indentation &&
-      current_token.newlines &&
-      (current_token.text === '[' || is_array(this._flags.mode))) {
-      this._output.current_line.set_indent(-1);
-      this._output.current_line.push(current_token.whitespace_before);
-      this._output.space_before_token = false;
-    } else if (this._output.set_indent(this._flags.indentation_level, this._flags.alignment)) {
-      this._flags.line_indent_level = this._flags.indentation_level;
-    }
-  }
-};
-
-Beautifier.prototype.print_token = function(current_token) {
-  if (this._output.raw) {
-    this._output.add_raw_token(current_token);
-    return;
-  }
-
-  if (this._options.comma_first && current_token.previous && current_token.previous.type === TOKEN.COMMA &&
-    this._output.just_added_newline()) {
-    if (this._output.previous_line.last() === ',') {
-      var popped = this._output.previous_line.pop();
-      // if the comma was already at the start of the line,
-      // pull back onto that line and reprint the indentation
-      if (this._output.previous_line.is_empty()) {
-        this._output.previous_line.push(popped);
-        this._output.trim(true);
-        this._output.current_line.pop();
-        this._output.trim();
-      }
-
-      // add the comma in front of the next token
-      this.print_token_line_indentation(current_token);
-      this._output.add_token(',');
-      this._output.space_before_token = true;
-    }
-  }
-
-  this.print_token_line_indentation(current_token);
-  this._output.non_breaking_space = true;
-  this._output.add_token(current_token.text);
-  if (this._output.previous_token_wrapped) {
-    this._flags.multiline_frame = true;
-  }
-};
-
-Beautifier.prototype.indent = function() {
-  this._flags.indentation_level += 1;
-  this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-};
-
-Beautifier.prototype.deindent = function() {
-  if (this._flags.indentation_level > 0 &&
-    ((!this._flags.parent) || this._flags.indentation_level > this._flags.parent.indentation_level)) {
-    this._flags.indentation_level -= 1;
-    this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-  }
-};
-
-Beautifier.prototype.set_mode = function(mode) {
-  if (this._flags) {
-    this._flag_store.push(this._flags);
-    this._previous_flags = this._flags;
-  } else {
-    this._previous_flags = this.create_flags(null, mode);
-  }
-
-  this._flags = this.create_flags(this._previous_flags, mode);
-  this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-};
-
-
-Beautifier.prototype.restore_mode = function() {
-  if (this._flag_store.length > 0) {
-    this._previous_flags = this._flags;
-    this._flags = this._flag_store.pop();
-    if (this._previous_flags.mode === MODE.Statement) {
-      remove_redundant_indentation(this._output, this._previous_flags);
-    }
-    this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-  }
-};
-
-Beautifier.prototype.start_of_object_property = function() {
-  return this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement && (
-    (this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) || (reserved_array(this._flags.last_token, ['get', 'set'])));
-};
-
-Beautifier.prototype.start_of_statement = function(current_token) {
-  var start = false;
-  start = start || reserved_array(this._flags.last_token, ['var', 'let', 'const']) && current_token.type === TOKEN.WORD;
-  start = start || reserved_word(this._flags.last_token, 'do');
-  start = start || (!(this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement)) && reserved_array(this._flags.last_token, newline_restricted_tokens) && !current_token.newlines;
-  start = start || reserved_word(this._flags.last_token, 'else') &&
-    !(reserved_word(current_token, 'if') && !current_token.comments_before);
-  start = start || (this._flags.last_token.type === TOKEN.END_EXPR && (this._previous_flags.mode === MODE.ForInitializer || this._previous_flags.mode === MODE.Conditional));
-  start = start || (this._flags.last_token.type === TOKEN.WORD && this._flags.mode === MODE.BlockStatement &&
-    !this._flags.in_case &&
-    !(current_token.text === '--' || current_token.text === '++') &&
-    this._last_last_text !== 'function' &&
-    current_token.type !== TOKEN.WORD && current_token.type !== TOKEN.RESERVED);
-  start = start || (this._flags.mode === MODE.ObjectLiteral && (
-    (this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) || reserved_array(this._flags.last_token, ['get', 'set'])));
-
-  if (start) {
-    this.set_mode(MODE.Statement);
-    this.indent();
-
-    this.handle_whitespace_and_comments(current_token, true);
-
-    // Issue #276:
-    // If starting a new statement with [if, for, while, do], push to a new line.
-    // if (a) if (b) if(c) d(); else e(); else f();
-    if (!this.start_of_object_property()) {
-      this.allow_wrap_or_preserved_newline(current_token,
-        reserved_array(current_token, ['do', 'for', 'if', 'while']));
-    }
-    return true;
-  }
-  return false;
-};
-
-Beautifier.prototype.handle_start_expr = function(current_token) {
-  // The conditional starts the statement if appropriate.
-  if (!this.start_of_statement(current_token)) {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  var next_mode = MODE.Expression;
-  if (current_token.text === '[') {
-
-    if (this._flags.last_token.type === TOKEN.WORD || this._flags.last_token.text === ')') {
-      // this is array index specifier, break immediately
-      // a[x], fn()[x]
-      if (reserved_array(this._flags.last_token, line_starters)) {
-        this._output.space_before_token = true;
-      }
-      this.print_token(current_token);
-      this.set_mode(next_mode);
-      this.indent();
-      if (this._options.space_in_paren) {
-        this._output.space_before_token = true;
-      }
-      return;
-    }
-
-    next_mode = MODE.ArrayLiteral;
-    if (is_array(this._flags.mode)) {
-      if (this._flags.last_token.text === '[' ||
-        (this._flags.last_token.text === ',' && (this._last_last_text === ']' || this._last_last_text === '}'))) {
-        // ], [ goes to new line
-        // }, [ goes to new line
-        if (!this._options.keep_array_indentation) {
-          this.print_newline();
-        }
-      }
-    }
-
-    if (!in_array(this._flags.last_token.type, [TOKEN.START_EXPR, TOKEN.END_EXPR, TOKEN.WORD, TOKEN.OPERATOR])) {
-      this._output.space_before_token = true;
-    }
-  } else {
-    if (this._flags.last_token.type === TOKEN.RESERVED) {
-      if (this._flags.last_token.text === 'for') {
-        this._output.space_before_token = this._options.space_before_conditional;
-        next_mode = MODE.ForInitializer;
-      } else if (in_array(this._flags.last_token.text, ['if', 'while'])) {
-        this._output.space_before_token = this._options.space_before_conditional;
-        next_mode = MODE.Conditional;
-      } else if (in_array(this._flags.last_word, ['await', 'async'])) {
-        // Should be a space between await and an IIFE, or async and an arrow function
-        this._output.space_before_token = true;
-      } else if (this._flags.last_token.text === 'import' && current_token.whitespace_before === '') {
-        this._output.space_before_token = false;
-      } else if (in_array(this._flags.last_token.text, line_starters) || this._flags.last_token.text === 'catch') {
-        this._output.space_before_token = true;
-      }
-    } else if (this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
-      // Support of this kind of newline preservation.
-      // a = (b &&
-      //     (c || d));
-      if (!this.start_of_object_property()) {
-        this.allow_wrap_or_preserved_newline(current_token);
-      }
-    } else if (this._flags.last_token.type === TOKEN.WORD) {
-      this._output.space_before_token = false;
-
-      // function name() vs function name ()
-      // function* name() vs function* name ()
-      // async name() vs async name ()
-      // In ES6, you can also define the method properties of an object
-      // var obj = {a: function() {}}
-      // It can be abbreviated
-      // var obj = {a() {}}
-      // var obj = { a() {}} vs var obj = { a () {}}
-      // var obj = { * a() {}} vs var obj = { * a () {}}
-      var peek_back_two = this._tokens.peek(-3);
-      if (this._options.space_after_named_function && peek_back_two) {
-        // peek starts at next character so -1 is current token
-        var peek_back_three = this._tokens.peek(-4);
-        if (reserved_array(peek_back_two, ['async', 'function']) ||
-          (peek_back_two.text === '*' && reserved_array(peek_back_three, ['async', 'function']))) {
-          this._output.space_before_token = true;
-        } else if (this._flags.mode === MODE.ObjectLiteral) {
-          if ((peek_back_two.text === '{' || peek_back_two.text === ',') ||
-            (peek_back_two.text === '*' && (peek_back_three.text === '{' || peek_back_three.text === ','))) {
-            this._output.space_before_token = true;
-          }
-        }
-      }
-    } else {
-      // Support preserving wrapped arrow function expressions
-      // a.b('c',
-      //     () => d.e
-      // )
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-
-    // function() vs function ()
-    // yield*() vs yield* ()
-    // function*() vs function* ()
-    if ((this._flags.last_token.type === TOKEN.RESERVED && (this._flags.last_word === 'function' || this._flags.last_word === 'typeof')) ||
-      (this._flags.last_token.text === '*' &&
-        (in_array(this._last_last_text, ['function', 'yield']) ||
-          (this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))) {
-      this._output.space_before_token = this._options.space_after_anon_function;
-    }
-  }
-
-  if (this._flags.last_token.text === ';' || this._flags.last_token.type === TOKEN.START_BLOCK) {
-    this.print_newline();
-  } else if (this._flags.last_token.type === TOKEN.END_EXPR || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.END_BLOCK || this._flags.last_token.text === '.' || this._flags.last_token.type === TOKEN.COMMA) {
-    // do nothing on (( and )( and ][ and ]( and .(
-    // TODO: Consider whether forcing this is required.  Review failing tests when removed.
-    this.allow_wrap_or_preserved_newline(current_token, current_token.newlines);
-  }
-
-  this.print_token(current_token);
-  this.set_mode(next_mode);
-  if (this._options.space_in_paren) {
-    this._output.space_before_token = true;
-  }
-
-  // In all cases, if we newline while inside an expression it should be indented.
-  this.indent();
-};
-
-Beautifier.prototype.handle_end_expr = function(current_token) {
-  // statements inside expressions are not valid syntax, but...
-  // statements must all be closed when their container closes
-  while (this._flags.mode === MODE.Statement) {
-    this.restore_mode();
-  }
-
-  this.handle_whitespace_and_comments(current_token);
-
-  if (this._flags.multiline_frame) {
-    this.allow_wrap_or_preserved_newline(current_token,
-      current_token.text === ']' && is_array(this._flags.mode) && !this._options.keep_array_indentation);
-  }
-
-  if (this._options.space_in_paren) {
-    if (this._flags.last_token.type === TOKEN.START_EXPR && !this._options.space_in_empty_paren) {
-      // () [] no inner space in empty parens like these, ever, ref #320
-      this._output.trim();
-      this._output.space_before_token = false;
-    } else {
-      this._output.space_before_token = true;
-    }
-  }
-  this.deindent();
-  this.print_token(current_token);
-  this.restore_mode();
-
-  remove_redundant_indentation(this._output, this._previous_flags);
-
-  // do {} while () // no statement required after
-  if (this._flags.do_while && this._previous_flags.mode === MODE.Conditional) {
-    this._previous_flags.mode = MODE.Expression;
-    this._flags.do_block = false;
-    this._flags.do_while = false;
-
-  }
-};
-
-Beautifier.prototype.handle_start_block = function(current_token) {
-  this.handle_whitespace_and_comments(current_token);
-
-  // Check if this is should be treated as a ObjectLiteral
-  var next_token = this._tokens.peek();
-  var second_token = this._tokens.peek(1);
-  if (this._flags.last_word === 'switch' && this._flags.last_token.type === TOKEN.END_EXPR) {
-    this.set_mode(MODE.BlockStatement);
-    this._flags.in_case_statement = true;
-  } else if (this._flags.case_body) {
-    this.set_mode(MODE.BlockStatement);
-  } else if (second_token && (
-      (in_array(second_token.text, [':', ',']) && in_array(next_token.type, [TOKEN.STRING, TOKEN.WORD, TOKEN.RESERVED])) ||
-      (in_array(next_token.text, ['get', 'set', '...']) && in_array(second_token.type, [TOKEN.WORD, TOKEN.RESERVED]))
-    )) {
-    // We don't support TypeScript,but we didn't break it for a very long time.
-    // We'll try to keep not breaking it.
-    if (!in_array(this._last_last_text, ['class', 'interface'])) {
-      this.set_mode(MODE.ObjectLiteral);
-    } else {
-      this.set_mode(MODE.BlockStatement);
-    }
-  } else if (this._flags.last_token.type === TOKEN.OPERATOR && this._flags.last_token.text === '=>') {
-    // arrow function: (param1, paramN) => { statements }
-    this.set_mode(MODE.BlockStatement);
-  } else if (in_array(this._flags.last_token.type, [TOKEN.EQUALS, TOKEN.START_EXPR, TOKEN.COMMA, TOKEN.OPERATOR]) ||
-    reserved_array(this._flags.last_token, ['return', 'throw', 'import', 'default'])
-  ) {
-    // Detecting shorthand function syntax is difficult by scanning forward,
-    //     so check the surrounding context.
-    // If the block is being returned, imported, export default, passed as arg,
-    //     assigned with = or assigned in a nested object, treat as an ObjectLiteral.
-    this.set_mode(MODE.ObjectLiteral);
-  } else {
-    this.set_mode(MODE.BlockStatement);
-  }
-
-  var empty_braces = !next_token.comments_before && next_token.text === '}';
-  var empty_anonymous_function = empty_braces && this._flags.last_word === 'function' &&
-    this._flags.last_token.type === TOKEN.END_EXPR;
-
-  if (this._options.brace_preserve_inline) // check for inline, set inline_frame if so
-  {
-    // search forward for a newline wanted inside this block
-    var index = 0;
-    var check_token = null;
-    this._flags.inline_frame = true;
-    do {
-      index += 1;
-      check_token = this._tokens.peek(index - 1);
-      if (check_token.newlines) {
-        this._flags.inline_frame = false;
-        break;
-      }
-    } while (check_token.type !== TOKEN.EOF &&
-      !(check_token.type === TOKEN.END_BLOCK && check_token.opened === current_token));
-  }
-
-  if ((this._options.brace_style === "expand" ||
-      (this._options.brace_style === "none" && current_token.newlines)) &&
-    !this._flags.inline_frame) {
-    if (this._flags.last_token.type !== TOKEN.OPERATOR &&
-      (empty_anonymous_function ||
-        this._flags.last_token.type === TOKEN.EQUALS ||
-        (reserved_array(this._flags.last_token, special_words) && this._flags.last_token.text !== 'else'))) {
-      this._output.space_before_token = true;
-    } else {
-      this.print_newline(false, true);
-    }
-  } else { // collapse || inline_frame
-    if (is_array(this._previous_flags.mode) && (this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.COMMA)) {
-      if (this._flags.last_token.type === TOKEN.COMMA || this._options.space_in_paren) {
-        this._output.space_before_token = true;
-      }
-
-      if (this._flags.last_token.type === TOKEN.COMMA || (this._flags.last_token.type === TOKEN.START_EXPR && this._flags.inline_frame)) {
-        this.allow_wrap_or_preserved_newline(current_token);
-        this._previous_flags.multiline_frame = this._previous_flags.multiline_frame || this._flags.multiline_frame;
-        this._flags.multiline_frame = false;
-      }
-    }
-    if (this._flags.last_token.type !== TOKEN.OPERATOR && this._flags.last_token.type !== TOKEN.START_EXPR) {
-      if (this._flags.last_token.type === TOKEN.START_BLOCK && !this._flags.inline_frame) {
-        this.print_newline();
-      } else {
-        this._output.space_before_token = true;
-      }
-    }
-  }
-  this.print_token(current_token);
-  this.indent();
-
-  // Except for specific cases, open braces are followed by a new line.
-  if (!empty_braces && !(this._options.brace_preserve_inline && this._flags.inline_frame)) {
-    this.print_newline();
-  }
-};
-
-Beautifier.prototype.handle_end_block = function(current_token) {
-  // statements must all be closed when their container closes
-  this.handle_whitespace_and_comments(current_token);
-
-  while (this._flags.mode === MODE.Statement) {
-    this.restore_mode();
-  }
-
-  var empty_braces = this._flags.last_token.type === TOKEN.START_BLOCK;
-
-  if (this._flags.inline_frame && !empty_braces) { // try inline_frame (only set if this._options.braces-preserve-inline) first
-    this._output.space_before_token = true;
-  } else if (this._options.brace_style === "expand") {
-    if (!empty_braces) {
-      this.print_newline();
-    }
-  } else {
-    // skip {}
-    if (!empty_braces) {
-      if (is_array(this._flags.mode) && this._options.keep_array_indentation) {
-        // we REALLY need a newline here, but newliner would skip that
-        this._options.keep_array_indentation = false;
-        this.print_newline();
-        this._options.keep_array_indentation = true;
-
-      } else {
-        this.print_newline();
-      }
-    }
-  }
-  this.restore_mode();
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_word = function(current_token) {
-  if (current_token.type === TOKEN.RESERVED) {
-    if (in_array(current_token.text, ['set', 'get']) && this._flags.mode !== MODE.ObjectLiteral) {
-      current_token.type = TOKEN.WORD;
-    } else if (current_token.text === 'import' && this._tokens.peek().text === '(') {
-      current_token.type = TOKEN.WORD;
-    } else if (in_array(current_token.text, ['as', 'from']) && !this._flags.import_block) {
-      current_token.type = TOKEN.WORD;
-    } else if (this._flags.mode === MODE.ObjectLiteral) {
-      var next_token = this._tokens.peek();
-      if (next_token.text === ':') {
-        current_token.type = TOKEN.WORD;
-      }
-    }
-  }
-
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-    if (reserved_array(this._flags.last_token, ['var', 'let', 'const']) && current_token.type === TOKEN.WORD) {
-      this._flags.declaration_statement = true;
-    }
-  } else if (current_token.newlines && !is_expression(this._flags.mode) &&
-    (this._flags.last_token.type !== TOKEN.OPERATOR || (this._flags.last_token.text === '--' || this._flags.last_token.text === '++')) &&
-    this._flags.last_token.type !== TOKEN.EQUALS &&
-    (this._options.preserve_newlines || !reserved_array(this._flags.last_token, ['var', 'let', 'const', 'set', 'get']))) {
-    this.handle_whitespace_and_comments(current_token);
-    this.print_newline();
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  if (this._flags.do_block && !this._flags.do_while) {
-    if (reserved_word(current_token, 'while')) {
-      // do {} ## while ()
-      this._output.space_before_token = true;
-      this.print_token(current_token);
-      this._output.space_before_token = true;
-      this._flags.do_while = true;
-      return;
-    } else {
-      // do {} should always have while as the next word.
-      // if we don't see the expected while, recover
-      this.print_newline();
-      this._flags.do_block = false;
-    }
-  }
-
-  // if may be followed by else, or not
-  // Bare/inline ifs are tricky
-  // Need to unwind the modes correctly: if (a) if (b) c(); else d(); else e();
-  if (this._flags.if_block) {
-    if (!this._flags.else_block && reserved_word(current_token, 'else')) {
-      this._flags.else_block = true;
-    } else {
-      while (this._flags.mode === MODE.Statement) {
-        this.restore_mode();
-      }
-      this._flags.if_block = false;
-      this._flags.else_block = false;
-    }
-  }
-
-  if (this._flags.in_case_statement && reserved_array(current_token, ['case', 'default'])) {
-    this.print_newline();
-    if (this._flags.last_token.type !== TOKEN.END_BLOCK && (this._flags.case_body || this._options.jslint_happy)) {
-      // switch cases following one another
-      this.deindent();
-    }
-    this._flags.case_body = false;
-
-    this.print_token(current_token);
-    this._flags.in_case = true;
-    return;
-  }
-
-  if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
-    if (!this.start_of_object_property()) {
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-  }
-
-  if (reserved_word(current_token, 'function')) {
-    if (in_array(this._flags.last_token.text, ['}', ';']) ||
-      (this._output.just_added_newline() && !(in_array(this._flags.last_token.text, ['(', '[', '{', ':', '=', ',']) || this._flags.last_token.type === TOKEN.OPERATOR))) {
-      // make sure there is a nice clean space of at least one blank line
-      // before a new function definition
-      if (!this._output.just_added_blankline() && !current_token.comments_before) {
-        this.print_newline();
-        this.print_newline(true);
-      }
-    }
-    if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD) {
-      if (reserved_array(this._flags.last_token, ['get', 'set', 'new', 'export']) ||
-        reserved_array(this._flags.last_token, newline_restricted_tokens)) {
-        this._output.space_before_token = true;
-      } else if (reserved_word(this._flags.last_token, 'default') && this._last_last_text === 'export') {
-        this._output.space_before_token = true;
-      } else if (this._flags.last_token.text === 'declare') {
-        // accomodates Typescript declare function formatting
-        this._output.space_before_token = true;
-      } else {
-        this.print_newline();
-      }
-    } else if (this._flags.last_token.type === TOKEN.OPERATOR || this._flags.last_token.text === '=') {
-      // foo = function
-      this._output.space_before_token = true;
-    } else if (!this._flags.multiline_frame && (is_expression(this._flags.mode) || is_array(this._flags.mode))) {
-      // (function
-    } else {
-      this.print_newline();
-    }
-
-    this.print_token(current_token);
-    this._flags.last_word = current_token.text;
-    return;
-  }
-
-  var prefix = 'NONE';
-
-  if (this._flags.last_token.type === TOKEN.END_BLOCK) {
-
-    if (this._previous_flags.inline_frame) {
-      prefix = 'SPACE';
-    } else if (!reserved_array(current_token, ['else', 'catch', 'finally', 'from'])) {
-      prefix = 'NEWLINE';
-    } else {
-      if (this._options.brace_style === "expand" ||
-        this._options.brace_style === "end-expand" ||
-        (this._options.brace_style === "none" && current_token.newlines)) {
-        prefix = 'NEWLINE';
-      } else {
-        prefix = 'SPACE';
-        this._output.space_before_token = true;
-      }
-    }
-  } else if (this._flags.last_token.type === TOKEN.SEMICOLON && this._flags.mode === MODE.BlockStatement) {
-    // TODO: Should this be for STATEMENT as well?
-    prefix = 'NEWLINE';
-  } else if (this._flags.last_token.type === TOKEN.SEMICOLON && is_expression(this._flags.mode)) {
-    prefix = 'SPACE';
-  } else if (this._flags.last_token.type === TOKEN.STRING) {
-    prefix = 'NEWLINE';
-  } else if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD ||
-    (this._flags.last_token.text === '*' &&
-      (in_array(this._last_last_text, ['function', 'yield']) ||
-        (this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))) {
-    prefix = 'SPACE';
-  } else if (this._flags.last_token.type === TOKEN.START_BLOCK) {
-    if (this._flags.inline_frame) {
-      prefix = 'SPACE';
-    } else {
-      prefix = 'NEWLINE';
-    }
-  } else if (this._flags.last_token.type === TOKEN.END_EXPR) {
-    this._output.space_before_token = true;
-    prefix = 'NEWLINE';
-  }
-
-  if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {
-    if (this._flags.inline_frame || this._flags.last_token.text === 'else' || this._flags.last_token.text === 'export') {
-      prefix = 'SPACE';
-    } else {
-      prefix = 'NEWLINE';
-    }
-
-  }
-
-  if (reserved_array(current_token, ['else', 'catch', 'finally'])) {
-    if ((!(this._flags.last_token.type === TOKEN.END_BLOCK && this._previous_flags.mode === MODE.BlockStatement) ||
-        this._options.brace_style === "expand" ||
-        this._options.brace_style === "end-expand" ||
-        (this._options.brace_style === "none" && current_token.newlines)) &&
-      !this._flags.inline_frame) {
-      this.print_newline();
-    } else {
-      this._output.trim(true);
-      var line = this._output.current_line;
-      // If we trimmed and there's something other than a close block before us
-      // put a newline back in.  Handles '} // comment' scenario.
-      if (line.last() !== '}') {
-        this.print_newline();
-      }
-      this._output.space_before_token = true;
-    }
-  } else if (prefix === 'NEWLINE') {
-    if (reserved_array(this._flags.last_token, special_words)) {
-      // no newline between 'return nnn'
-      this._output.space_before_token = true;
-    } else if (this._flags.last_token.text === 'declare' && reserved_array(current_token, ['var', 'let', 'const'])) {
-      // accomodates Typescript declare formatting
-      this._output.space_before_token = true;
-    } else if (this._flags.last_token.type !== TOKEN.END_EXPR) {
-      if ((this._flags.last_token.type !== TOKEN.START_EXPR || !reserved_array(current_token, ['var', 'let', 'const'])) && this._flags.last_token.text !== ':') {
-        // no need to force newline on 'var': for (var x = 0...)
-        if (reserved_word(current_token, 'if') && reserved_word(current_token.previous, 'else')) {
-          // no newline for } else if {
-          this._output.space_before_token = true;
-        } else {
-          this.print_newline();
-        }
-      }
-    } else if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {
-      this.print_newline();
-    }
-  } else if (this._flags.multiline_frame && is_array(this._flags.mode) && this._flags.last_token.text === ',' && this._last_last_text === '}') {
-    this.print_newline(); // }, in lists get a newline treatment
-  } else if (prefix === 'SPACE') {
-    this._output.space_before_token = true;
-  }
-  if (current_token.previous && (current_token.previous.type === TOKEN.WORD || current_token.previous.type === TOKEN.RESERVED)) {
-    this._output.space_before_token = true;
-  }
-  this.print_token(current_token);
-  this._flags.last_word = current_token.text;
-
-  if (current_token.type === TOKEN.RESERVED) {
-    if (current_token.text === 'do') {
-      this._flags.do_block = true;
-    } else if (current_token.text === 'if') {
-      this._flags.if_block = true;
-    } else if (current_token.text === 'import') {
-      this._flags.import_block = true;
-    } else if (this._flags.import_block && reserved_word(current_token, 'from')) {
-      this._flags.import_block = false;
-    }
-  }
-};
-
-Beautifier.prototype.handle_semicolon = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-    // Semicolon can be the start (and end) of a statement
-    this._output.space_before_token = false;
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  var next_token = this._tokens.peek();
-  while (this._flags.mode === MODE.Statement &&
-    !(this._flags.if_block && reserved_word(next_token, 'else')) &&
-    !this._flags.do_block) {
-    this.restore_mode();
-  }
-
-  // hacky but effective for the moment
-  if (this._flags.import_block) {
-    this._flags.import_block = false;
-  }
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_string = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-    // One difference - strings want at least a space before
-    this._output.space_before_token = true;
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-    if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD || this._flags.inline_frame) {
-      this._output.space_before_token = true;
-    } else if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
-      if (!this.start_of_object_property()) {
-        this.allow_wrap_or_preserved_newline(current_token);
-      }
-    } else {
-      this.print_newline();
-    }
-  }
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_equals = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  if (this._flags.declaration_statement) {
-    // just got an '=' in a var-line, different formatting/line-breaking, etc will now be done
-    this._flags.declaration_assignment = true;
-  }
-  this._output.space_before_token = true;
-  this.print_token(current_token);
-  this._output.space_before_token = true;
-};
-
-Beautifier.prototype.handle_comma = function(current_token) {
-  this.handle_whitespace_and_comments(current_token, true);
-
-  this.print_token(current_token);
-  this._output.space_before_token = true;
-  if (this._flags.declaration_statement) {
-    if (is_expression(this._flags.parent.mode)) {
-      // do not break on comma, for(var a = 1, b = 2)
-      this._flags.declaration_assignment = false;
-    }
-
-    if (this._flags.declaration_assignment) {
-      this._flags.declaration_assignment = false;
-      this.print_newline(false, true);
-    } else if (this._options.comma_first) {
-      // for comma-first, we want to allow a newline before the comma
-      // to turn into a newline after the comma, which we will fixup later
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-  } else if (this._flags.mode === MODE.ObjectLiteral ||
-    (this._flags.mode === MODE.Statement && this._flags.parent.mode === MODE.ObjectLiteral)) {
-    if (this._flags.mode === MODE.Statement) {
-      this.restore_mode();
-    }
-
-    if (!this._flags.inline_frame) {
-      this.print_newline();
-    }
-  } else if (this._options.comma_first) {
-    // EXPR or DO_BLOCK
-    // for comma-first, we want to allow a newline before the comma
-    // to turn into a newline after the comma, which we will fixup later
-    this.allow_wrap_or_preserved_newline(current_token);
-  }
-};
-
-Beautifier.prototype.handle_operator = function(current_token) {
-  var isGeneratorAsterisk = current_token.text === '*' &&
-    (reserved_array(this._flags.last_token, ['function', 'yield']) ||
-      (in_array(this._flags.last_token.type, [TOKEN.START_BLOCK, TOKEN.COMMA, TOKEN.END_BLOCK, TOKEN.SEMICOLON]))
-    );
-  var isUnary = in_array(current_token.text, ['-', '+']) && (
-    in_array(this._flags.last_token.type, [TOKEN.START_BLOCK, TOKEN.START_EXPR, TOKEN.EQUALS, TOKEN.OPERATOR]) ||
-    in_array(this._flags.last_token.text, line_starters) ||
-    this._flags.last_token.text === ','
-  );
-
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-  } else {
-    var preserve_statement_flags = !isGeneratorAsterisk;
-    this.handle_whitespace_and_comments(current_token, preserve_statement_flags);
-  }
-
-  if (reserved_array(this._flags.last_token, special_words)) {
-    // "return" had a special handling in TK_WORD. Now we need to return the favor
-    this._output.space_before_token = true;
-    this.print_token(current_token);
-    return;
-  }
-
-  // hack for actionscript's import .*;
-  if (current_token.text === '*' && this._flags.last_token.type === TOKEN.DOT) {
-    this.print_token(current_token);
-    return;
-  }
-
-  if (current_token.text === '::') {
-    // no spaces around exotic namespacing syntax operator
-    this.print_token(current_token);
-    return;
-  }
-
-  // Allow line wrapping between operators when operator_position is
-  //   set to before or preserve
-  if (this._flags.last_token.type === TOKEN.OPERATOR && in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)) {
-    this.allow_wrap_or_preserved_newline(current_token);
-  }
-
-  if (current_token.text === ':' && this._flags.in_case) {
-    this.print_token(current_token);
-
-    this._flags.in_case = false;
-    this._flags.case_body = true;
-    if (this._tokens.peek().type !== TOKEN.START_BLOCK) {
-      this.indent();
-      this.print_newline();
-    } else {
-      this._output.space_before_token = true;
-    }
-    return;
-  }
-
-  var space_before = true;
-  var space_after = true;
-  var in_ternary = false;
-  if (current_token.text === ':') {
-    if (this._flags.ternary_depth === 0) {
-      // Colon is invalid javascript outside of ternary and object, but do our best to guess what was meant.
-      space_before = false;
-    } else {
-      this._flags.ternary_depth -= 1;
-      in_ternary = true;
-    }
-  } else if (current_token.text === '?') {
-    this._flags.ternary_depth += 1;
-  }
-
-  // let's handle the operator_position option prior to any conflicting logic
-  if (!isUnary && !isGeneratorAsterisk && this._options.preserve_newlines && in_array(current_token.text, positionable_operators)) {
-    var isColon = current_token.text === ':';
-    var isTernaryColon = (isColon && in_ternary);
-    var isOtherColon = (isColon && !in_ternary);
-
-    switch (this._options.operator_position) {
-      case OPERATOR_POSITION.before_newline:
-        // if the current token is : and it's not a ternary statement then we set space_before to false
-        this._output.space_before_token = !isOtherColon;
-
-        this.print_token(current_token);
-
-        if (!isColon || isTernaryColon) {
-          this.allow_wrap_or_preserved_newline(current_token);
-        }
-
-        this._output.space_before_token = true;
-        return;
-
-      case OPERATOR_POSITION.after_newline:
-        // if the current token is anything but colon, or (via deduction) it's a colon and in a ternary statement,
-        //   then print a newline.
-
-        this._output.space_before_token = true;
-
-        if (!isColon || isTernaryColon) {
-          if (this._tokens.peek().newlines) {
-            this.print_newline(false, true);
-          } else {
-            this.allow_wrap_or_preserved_newline(current_token);
-          }
-        } else {
-          this._output.space_before_token = false;
-        }
-
-        this.print_token(current_token);
-
-        this._output.space_before_token = true;
-        return;
-
-      case OPERATOR_POSITION.preserve_newline:
-        if (!isOtherColon) {
-          this.allow_wrap_or_preserved_newline(current_token);
-        }
-
-        // if we just added a newline, or the current token is : and it's not a ternary statement,
-        //   then we set space_before to false
-        space_before = !(this._output.just_added_newline() || isOtherColon);
-
-        this._output.space_before_token = space_before;
-        this.print_token(current_token);
-        this._output.space_before_token = true;
-        return;
-    }
-  }
-
-  if (isGeneratorAsterisk) {
-    this.allow_wrap_or_preserved_newline(current_token);
-    space_before = false;
-    var next_token = this._tokens.peek();
-    space_after = next_token && in_array(next_token.type, [TOKEN.WORD, TOKEN.RESERVED]);
-  } else if (current_token.text === '...') {
-    this.allow_wrap_or_preserved_newline(current_token);
-    space_before = this._flags.last_token.type === TOKEN.START_BLOCK;
-    space_after = false;
-  } else if (in_array(current_token.text, ['--', '++', '!', '~']) || isUnary) {
-    // unary operators (and binary +/- pretending to be unary) special cases
-    if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR) {
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-
-    space_before = false;
-    space_after = false;
-
-    // http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1
-    // if there is a newline between -- or ++ and anything else we should preserve it.
-    if (current_token.newlines && (current_token.text === '--' || current_token.text === '++')) {
-      this.print_newline(false, true);
-    }
-
-    if (this._flags.last_token.text === ';' && is_expression(this._flags.mode)) {
-      // for (;; ++i)
-      //        ^^^
-      space_before = true;
-    }
-
-    if (this._flags.last_token.type === TOKEN.RESERVED) {
-      space_before = true;
-    } else if (this._flags.last_token.type === TOKEN.END_EXPR) {
-      space_before = !(this._flags.last_token.text === ']' && (current_token.text === '--' || current_token.text === '++'));
-    } else if (this._flags.last_token.type === TOKEN.OPERATOR) {
-      // a++ + ++b;
-      // a - -b
-      space_before = in_array(current_token.text, ['--', '-', '++', '+']) && in_array(this._flags.last_token.text, ['--', '-', '++', '+']);
-      // + and - are not unary when preceeded by -- or ++ operator
-      // a-- + b
-      // a * +b
-      // a - -b
-      if (in_array(current_token.text, ['+', '-']) && in_array(this._flags.last_token.text, ['--', '++'])) {
-        space_after = true;
-      }
-    }
-
-
-    if (((this._flags.mode === MODE.BlockStatement && !this._flags.inline_frame) || this._flags.mode === MODE.Statement) &&
-      (this._flags.last_token.text === '{' || this._flags.last_token.text === ';')) {
-      // { foo; --i }
-      // foo(); --bar;
-      this.print_newline();
-    }
-  }
-
-  this._output.space_before_token = this._output.space_before_token || space_before;
-  this.print_token(current_token);
-  this._output.space_before_token = space_after;
-};
-
-Beautifier.prototype.handle_block_comment = function(current_token, preserve_statement_flags) {
-  if (this._output.raw) {
-    this._output.add_raw_token(current_token);
-    if (current_token.directives && current_token.directives.preserve === 'end') {
-      // If we're testing the raw output behavior, do not allow a directive to turn it off.
-      this._output.raw = this._options.test_output_raw;
-    }
-    return;
-  }
-
-  if (current_token.directives) {
-    this.print_newline(false, preserve_statement_flags);
-    this.print_token(current_token);
-    if (current_token.directives.preserve === 'start') {
-      this._output.raw = true;
-    }
-    this.print_newline(false, true);
-    return;
-  }
-
-  // inline block
-  if (!acorn.newline.test(current_token.text) && !current_token.newlines) {
-    this._output.space_before_token = true;
-    this.print_token(current_token);
-    this._output.space_before_token = true;
-    return;
-  } else {
-    this.print_block_commment(current_token, preserve_statement_flags);
-  }
-};
-
-Beautifier.prototype.print_block_commment = function(current_token, preserve_statement_flags) {
-  var lines = split_linebreaks(current_token.text);
-  var j; // iterator for this case
-  var javadoc = false;
-  var starless = false;
-  var lastIndent = current_token.whitespace_before;
-  var lastIndentLength = lastIndent.length;
-
-  // block comment starts with a new line
-  this.print_newline(false, preserve_statement_flags);
-
-  // first line always indented
-  this.print_token_line_indentation(current_token);
-  this._output.add_token(lines[0]);
-  this.print_newline(false, preserve_statement_flags);
-
-
-  if (lines.length > 1) {
-    lines = lines.slice(1);
-    javadoc = all_lines_start_with(lines, '*');
-    starless = each_line_matches_indent(lines, lastIndent);
-
-    if (javadoc) {
-      this._flags.alignment = 1;
-    }
-
-    for (j = 0; j < lines.length; j++) {
-      if (javadoc) {
-        // javadoc: reformat and re-indent
-        this.print_token_line_indentation(current_token);
-        this._output.add_token(ltrim(lines[j]));
-      } else if (starless && lines[j]) {
-        // starless: re-indent non-empty content, avoiding trim
-        this.print_token_line_indentation(current_token);
-        this._output.add_token(lines[j].substring(lastIndentLength));
-      } else {
-        // normal comments output raw
-        this._output.current_line.set_indent(-1);
-        this._output.add_token(lines[j]);
-      }
-
-      // for comments on their own line or  more than one line, make sure there's a new line after
-      this.print_newline(false, preserve_statement_flags);
-    }
-
-    this._flags.alignment = 0;
-  }
-};
-
-
-Beautifier.prototype.handle_comment = function(current_token, preserve_statement_flags) {
-  if (current_token.newlines) {
-    this.print_newline(false, preserve_statement_flags);
-  } else {
-    this._output.trim(true);
-  }
-
-  this._output.space_before_token = true;
-  this.print_token(current_token);
-  this.print_newline(false, preserve_statement_flags);
-};
-
-Beautifier.prototype.handle_dot = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-  } else {
-    this.handle_whitespace_and_comments(current_token, true);
-  }
-
-  if (reserved_array(this._flags.last_token, special_words)) {
-    this._output.space_before_token = false;
-  } else {
-    // allow preserved newlines before dots in general
-    // force newlines on dots after close paren when break_chained - for bar().baz()
-    this.allow_wrap_or_preserved_newline(current_token,
-      this._flags.last_token.text === ')' && this._options.break_chained_methods);
-  }
-
-  // Only unindent chained method dot if this dot starts a new line.
-  // Otherwise the automatic extra indentation removal will handle the over indent
-  if (this._options.unindent_chained_methods && this._output.just_added_newline()) {
-    this.deindent();
-  }
-
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_unknown = function(current_token, preserve_statement_flags) {
-  this.print_token(current_token);
-
-  if (current_token.text[current_token.text.length - 1] === '\n') {
-    this.print_newline(false, preserve_statement_flags);
-  }
-};
-
-Beautifier.prototype.handle_eof = function(current_token) {
-  // Unwind any open statements
-  while (this._flags.mode === MODE.Statement) {
-    this.restore_mode();
-  }
-  this.handle_whitespace_and_comments(current_token);
-};
-
-module.exports.Beautifier = Beautifier;
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-function OutputLine(parent) {
-  this.__parent = parent;
-  this.__character_count = 0;
-  // use indent_count as a marker for this.__lines that have preserved indentation
-  this.__indent_count = -1;
-  this.__alignment_count = 0;
-  this.__wrap_point_index = 0;
-  this.__wrap_point_character_count = 0;
-  this.__wrap_point_indent_count = -1;
-  this.__wrap_point_alignment_count = 0;
-
-  this.__items = [];
-}
-
-OutputLine.prototype.clone_empty = function() {
-  var line = new OutputLine(this.__parent);
-  line.set_indent(this.__indent_count, this.__alignment_count);
-  return line;
-};
-
-OutputLine.prototype.item = function(index) {
-  if (index < 0) {
-    return this.__items[this.__items.length + index];
-  } else {
-    return this.__items[index];
-  }
-};
-
-OutputLine.prototype.has_match = function(pattern) {
-  for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {
-    if (this.__items[lastCheckedOutput].match(pattern)) {
-      return true;
-    }
-  }
-  return false;
-};
-
-OutputLine.prototype.set_indent = function(indent, alignment) {
-  if (this.is_empty()) {
-    this.__indent_count = indent || 0;
-    this.__alignment_count = alignment || 0;
-    this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);
-  }
-};
-
-OutputLine.prototype._set_wrap_point = function() {
-  if (this.__parent.wrap_line_length) {
-    this.__wrap_point_index = this.__items.length;
-    this.__wrap_point_character_count = this.__character_count;
-    this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;
-    this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;
-  }
-};
-
-OutputLine.prototype._should_wrap = function() {
-  return this.__wrap_point_index &&
-    this.__character_count > this.__parent.wrap_line_length &&
-    this.__wrap_point_character_count > this.__parent.next_line.__character_count;
-};
-
-OutputLine.prototype._allow_wrap = function() {
-  if (this._should_wrap()) {
-    this.__parent.add_new_line();
-    var next = this.__parent.current_line;
-    next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);
-    next.__items = this.__items.slice(this.__wrap_point_index);
-    this.__items = this.__items.slice(0, this.__wrap_point_index);
-
-    next.__character_count += this.__character_count - this.__wrap_point_character_count;
-    this.__character_count = this.__wrap_point_character_count;
-
-    if (next.__items[0] === " ") {
-      next.__items.splice(0, 1);
-      next.__character_count -= 1;
-    }
-    return true;
-  }
-  return false;
-};
-
-OutputLine.prototype.is_empty = function() {
-  return this.__items.length === 0;
-};
-
-OutputLine.prototype.last = function() {
-  if (!this.is_empty()) {
-    return this.__items[this.__items.length - 1];
-  } else {
-    return null;
-  }
-};
-
-OutputLine.prototype.push = function(item) {
-  this.__items.push(item);
-  var last_newline_index = item.lastIndexOf('\n');
-  if (last_newline_index !== -1) {
-    this.__character_count = item.length - last_newline_index;
-  } else {
-    this.__character_count += item.length;
-  }
-};
-
-OutputLine.prototype.pop = function() {
-  var item = null;
-  if (!this.is_empty()) {
-    item = this.__items.pop();
-    this.__character_count -= item.length;
-  }
-  return item;
-};
-
-
-OutputLine.prototype._remove_indent = function() {
-  if (this.__indent_count > 0) {
-    this.__indent_count -= 1;
-    this.__character_count -= this.__parent.indent_size;
-  }
-};
-
-OutputLine.prototype._remove_wrap_indent = function() {
-  if (this.__wrap_point_indent_count > 0) {
-    this.__wrap_point_indent_count -= 1;
-  }
-};
-OutputLine.prototype.trim = function() {
-  while (this.last() === ' ') {
-    this.__items.pop();
-    this.__character_count -= 1;
-  }
-};
-
-OutputLine.prototype.toString = function() {
-  var result = '';
-  if (this.is_empty()) {
-    if (this.__parent.indent_empty_lines) {
-      result = this.__parent.get_indent_string(this.__indent_count);
-    }
-  } else {
-    result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);
-    result += this.__items.join('');
-  }
-  return result;
-};
-
-function IndentStringCache(options, baseIndentString) {
-  this.__cache = [''];
-  this.__indent_size = options.indent_size;
-  this.__indent_string = options.indent_char;
-  if (!options.indent_with_tabs) {
-    this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);
-  }
-
-  // Set to null to continue support for auto detection of base indent
-  baseIndentString = baseIndentString || '';
-  if (options.indent_level > 0) {
-    baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);
-  }
-
-  this.__base_string = baseIndentString;
-  this.__base_string_length = baseIndentString.length;
-}
-
-IndentStringCache.prototype.get_indent_size = function(indent, column) {
-  var result = this.__base_string_length;
-  column = column || 0;
-  if (indent < 0) {
-    result = 0;
-  }
-  result += indent * this.__indent_size;
-  result += column;
-  return result;
-};
-
-IndentStringCache.prototype.get_indent_string = function(indent_level, column) {
-  var result = this.__base_string;
-  column = column || 0;
-  if (indent_level < 0) {
-    indent_level = 0;
-    result = '';
-  }
-  column += indent_level * this.__indent_size;
-  this.__ensure_cache(column);
-  result += this.__cache[column];
-  return result;
-};
-
-IndentStringCache.prototype.__ensure_cache = function(column) {
-  while (column >= this.__cache.length) {
-    this.__add_column();
-  }
-};
-
-IndentStringCache.prototype.__add_column = function() {
-  var column = this.__cache.length;
-  var indent = 0;
-  var result = '';
-  if (this.__indent_size && column >= this.__indent_size) {
-    indent = Math.floor(column / this.__indent_size);
-    column -= indent * this.__indent_size;
-    result = new Array(indent + 1).join(this.__indent_string);
-  }
-  if (column) {
-    result += new Array(column + 1).join(' ');
-  }
-
-  this.__cache.push(result);
-};
-
-function Output(options, baseIndentString) {
-  this.__indent_cache = new IndentStringCache(options, baseIndentString);
-  this.raw = false;
-  this._end_with_newline = options.end_with_newline;
-  this.indent_size = options.indent_size;
-  this.wrap_line_length = options.wrap_line_length;
-  this.indent_empty_lines = options.indent_empty_lines;
-  this.__lines = [];
-  this.previous_line = null;
-  this.current_line = null;
-  this.next_line = new OutputLine(this);
-  this.space_before_token = false;
-  this.non_breaking_space = false;
-  this.previous_token_wrapped = false;
-  // initialize
-  this.__add_outputline();
-}
-
-Output.prototype.__add_outputline = function() {
-  this.previous_line = this.current_line;
-  this.current_line = this.next_line.clone_empty();
-  this.__lines.push(this.current_line);
-};
-
-Output.prototype.get_line_number = function() {
-  return this.__lines.length;
-};
-
-Output.prototype.get_indent_string = function(indent, column) {
-  return this.__indent_cache.get_indent_string(indent, column);
-};
-
-Output.prototype.get_indent_size = function(indent, column) {
-  return this.__indent_cache.get_indent_size(indent, column);
-};
-
-Output.prototype.is_empty = function() {
-  return !this.previous_line && this.current_line.is_empty();
-};
-
-Output.prototype.add_new_line = function(force_newline) {
-  // never newline at the start of file
-  // otherwise, newline only if we didn't just add one or we're forced
-  if (this.is_empty() ||
-    (!force_newline && this.just_added_newline())) {
-    return false;
-  }
-
-  // if raw output is enabled, don't print additional newlines,
-  // but still return True as though you had
-  if (!this.raw) {
-    this.__add_outputline();
-  }
-  return true;
-};
-
-Output.prototype.get_code = function(eol) {
-  this.trim(true);
-
-  // handle some edge cases where the last tokens
-  // has text that ends with newline(s)
-  var last_item = this.current_line.pop();
-  if (last_item) {
-    if (last_item[last_item.length - 1] === '\n') {
-      last_item = last_item.replace(/\n+$/g, '');
-    }
-    this.current_line.push(last_item);
-  }
-
-  if (this._end_with_newline) {
-    this.__add_outputline();
-  }
-
-  var sweet_code = this.__lines.join('\n');
-
-  if (eol !== '\n') {
-    sweet_code = sweet_code.replace(/[\n]/g, eol);
-  }
-  return sweet_code;
-};
-
-Output.prototype.set_wrap_point = function() {
-  this.current_line._set_wrap_point();
-};
-
-Output.prototype.set_indent = function(indent, alignment) {
-  indent = indent || 0;
-  alignment = alignment || 0;
-
-  // Next line stores alignment values
-  this.next_line.set_indent(indent, alignment);
-
-  // Never indent your first output indent at the start of the file
-  if (this.__lines.length > 1) {
-    this.current_line.set_indent(indent, alignment);
-    return true;
-  }
-
-  this.current_line.set_indent();
-  return false;
-};
-
-Output.prototype.add_raw_token = function(token) {
-  for (var x = 0; x < token.newlines; x++) {
-    this.__add_outputline();
-  }
-  this.current_line.set_indent(-1);
-  this.current_line.push(token.whitespace_before);
-  this.current_line.push(token.text);
-  this.space_before_token = false;
-  this.non_breaking_space = false;
-  this.previous_token_wrapped = false;
-};
-
-Output.prototype.add_token = function(printable_token) {
-  this.__add_space_before_token();
-  this.current_line.push(printable_token);
-  this.space_before_token = false;
-  this.non_breaking_space = false;
-  this.previous_token_wrapped = this.current_line._allow_wrap();
-};
-
-Output.prototype.__add_space_before_token = function() {
-  if (this.space_before_token && !this.just_added_newline()) {
-    if (!this.non_breaking_space) {
-      this.set_wrap_point();
-    }
-    this.current_line.push(' ');
-  }
-};
-
-Output.prototype.remove_indent = function(index) {
-  var output_length = this.__lines.length;
-  while (index < output_length) {
-    this.__lines[index]._remove_indent();
-    index++;
-  }
-  this.current_line._remove_wrap_indent();
-};
-
-Output.prototype.trim = function(eat_newlines) {
-  eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;
-
-  this.current_line.trim();
-
-  while (eat_newlines && this.__lines.length > 1 &&
-    this.current_line.is_empty()) {
-    this.__lines.pop();
-    this.current_line = this.__lines[this.__lines.length - 1];
-    this.current_line.trim();
-  }
-
-  this.previous_line = this.__lines.length > 1 ?
-    this.__lines[this.__lines.length - 2] : null;
-};
-
-Output.prototype.just_added_newline = function() {
-  return this.current_line.is_empty();
-};
-
-Output.prototype.just_added_blankline = function() {
-  return this.is_empty() ||
-    (this.current_line.is_empty() && this.previous_line.is_empty());
-};
-
-Output.prototype.ensure_empty_line_above = function(starts_with, ends_with) {
-  var index = this.__lines.length - 2;
-  while (index >= 0) {
-    var potentialEmptyLine = this.__lines[index];
-    if (potentialEmptyLine.is_empty()) {
-      break;
-    } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&
-      potentialEmptyLine.item(-1) !== ends_with) {
-      this.__lines.splice(index + 1, 0, new OutputLine(this));
-      this.previous_line = this.__lines[this.__lines.length - 2];
-      break;
-    }
-    index--;
-  }
-};
-
-module.exports.Output = Output;
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-function Token(type, text, newlines, whitespace_before) {
-  this.type = type;
-  this.text = text;
-
-  // comments_before are
-  // comments that have a new line before them
-  // and may or may not have a newline after
-  // this is a set of comments before
-  this.comments_before = null; /* inline comment*/
-
-
-  // this.comments_after =  new TokenStream(); // no new line before and newline after
-  this.newlines = newlines || 0;
-  this.whitespace_before = whitespace_before || '';
-  this.parent = null;
-  this.next = null;
-  this.previous = null;
-  this.opened = null;
-  this.closed = null;
-  this.directives = null;
-}
-
-
-module.exports.Token = Token;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* jshint node: true, curly: false */
-// Parts of this section of code is taken from acorn.
-//
-// Acorn was written by Marijn Haverbeke and released under an MIT
-// license. The Unicode regexps (for identifiers and whitespace) were
-// taken from [Esprima](http://esprima.org) by Ariya Hidayat.
-//
-// Git repositories for Acorn are available at
-//
-//     http://marijnhaverbeke.nl/git/acorn
-//     https://github.com/marijnh/acorn.git
-
-// ## Character categories
-
-
-
-
-// acorn used char codes to squeeze the last bit of performance out
-// Beautifier is okay without that, so we're using regex
-// permit # (23), $ (36), and @ (64). @ is used in ES7 decorators.
-// 65 through 91 are uppercase letters.
-// permit _ (95).
-// 97 through 123 are lowercase letters.
-var baseASCIIidentifierStartChars = "\\x23\\x24\\x40\\x41-\\x5a\\x5f\\x61-\\x7a";
-
-// inside an identifier @ is not allowed but 0-9 are.
-var baseASCIIidentifierChars = "\\x24\\x30-\\x39\\x41-\\x5a\\x5f\\x61-\\x7a";
-
-// Big ugly regular expressions that match characters in the
-// whitespace, identifier, and identifier-start categories. These
-// are only applied when a character is found to actually have a
-// code point above 128.
-var nonASCIIidentifierStartChars = "\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc";
-var nonASCIIidentifierChars = "\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f";
-//var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
-//var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
-var identifierStart = "(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierStartChars + nonASCIIidentifierStartChars + "])";
-var identifierChars = "(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])*";
-
-exports.identifier = new RegExp(identifierStart + identifierChars, 'g');
-exports.identifierStart = new RegExp(identifierStart);
-exports.identifierMatch = new RegExp("(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])+");
-
-var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/; // jshint ignore:line
-
-// Whether a single character denotes a newline.
-
-exports.newline = /[\n\r\u2028\u2029]/;
-
-// Matches a whole line break (where CRLF is considered a single
-// line break). Used to count lines.
-
-// in javascript, these two differ
-// in python they are the same, different methods are called on them
-exports.lineBreak = new RegExp('\r\n|' + exports.newline.source);
-exports.allLineBreaks = new RegExp(exports.lineBreak.source, 'g');
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var BaseOptions = __webpack_require__(6).Options;
-
-var validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];
-
-function Options(options) {
-  BaseOptions.call(this, options, 'js');
-
-  // compatibility, re
-  var raw_brace_style = this.raw_options.brace_style || null;
-  if (raw_brace_style === "expand-strict") { //graceful handling of deprecated option
-    this.raw_options.brace_style = "expand";
-  } else if (raw_brace_style === "collapse-preserve-inline") { //graceful handling of deprecated option
-    this.raw_options.brace_style = "collapse,preserve-inline";
-  } else if (this.raw_options.braces_on_own_line !== undefined) { //graceful handling of deprecated option
-    this.raw_options.brace_style = this.raw_options.braces_on_own_line ? "expand" : "collapse";
-    // } else if (!raw_brace_style) { //Nothing exists to set it
-    //   raw_brace_style = "collapse";
-  }
-
-  //preserve-inline in delimited string will trigger brace_preserve_inline, everything
-  //else is considered a brace_style and the last one only will have an effect
-
-  var brace_style_split = this._get_selection_list('brace_style', ['collapse', 'expand', 'end-expand', 'none', 'preserve-inline']);
-
-  this.brace_preserve_inline = false; //Defaults in case one or other was not specified in meta-option
-  this.brace_style = "collapse";
-
-  for (var bs = 0; bs < brace_style_split.length; bs++) {
-    if (brace_style_split[bs] === "preserve-inline") {
-      this.brace_preserve_inline = true;
-    } else {
-      this.brace_style = brace_style_split[bs];
-    }
-  }
-
-  this.unindent_chained_methods = this._get_boolean('unindent_chained_methods');
-  this.break_chained_methods = this._get_boolean('break_chained_methods');
-  this.space_in_paren = this._get_boolean('space_in_paren');
-  this.space_in_empty_paren = this._get_boolean('space_in_empty_paren');
-  this.jslint_happy = this._get_boolean('jslint_happy');
-  this.space_after_anon_function = this._get_boolean('space_after_anon_function');
-  this.space_after_named_function = this._get_boolean('space_after_named_function');
-  this.keep_array_indentation = this._get_boolean('keep_array_indentation');
-  this.space_before_conditional = this._get_boolean('space_before_conditional', true);
-  this.unescape_strings = this._get_boolean('unescape_strings');
-  this.e4x = this._get_boolean('e4x');
-  this.comma_first = this._get_boolean('comma_first');
-  this.operator_position = this._get_selection('operator_position', validPositionValues);
-
-  // For testing of beautify preserve:start directive
-  this.test_output_raw = this._get_boolean('test_output_raw');
-
-  // force this._options.space_after_anon_function to true if this._options.jslint_happy
-  if (this.jslint_happy) {
-    this.space_after_anon_function = true;
-  }
-
-}
-Options.prototype = new BaseOptions();
-
-
-
-module.exports.Options = Options;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-function Options(options, merge_child_field) {
-  this.raw_options = _mergeOpts(options, merge_child_field);
-
-  // Support passing the source text back with no change
-  this.disabled = this._get_boolean('disabled');
-
-  this.eol = this._get_characters('eol', 'auto');
-  this.end_with_newline = this._get_boolean('end_with_newline');
-  this.indent_size = this._get_number('indent_size', 4);
-  this.indent_char = this._get_characters('indent_char', ' ');
-  this.indent_level = this._get_number('indent_level');
-
-  this.preserve_newlines = this._get_boolean('preserve_newlines', true);
-  this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);
-  if (!this.preserve_newlines) {
-    this.max_preserve_newlines = 0;
-  }
-
-  this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\t');
-  if (this.indent_with_tabs) {
-    this.indent_char = '\t';
-
-    // indent_size behavior changed after 1.8.6
-    // It used to be that indent_size would be
-    // set to 1 for indent_with_tabs. That is no longer needed and
-    // actually doesn't make sense - why not use spaces? Further,
-    // that might produce unexpected behavior - tabs being used
-    // for single-column alignment. So, when indent_with_tabs is true
-    // and indent_size is 1, reset indent_size to 4.
-    if (this.indent_size === 1) {
-      this.indent_size = 4;
-    }
-  }
-
-  // Backwards compat with 1.3.x
-  this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));
-
-  this.indent_empty_lines = this._get_boolean('indent_empty_lines');
-
-  // valid templating languages ['django', 'erb', 'handlebars', 'php']
-  // For now, 'auto' = all off for javascript, all on for html (and inline javascript).
-  // other values ignored
-  this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);
-}
-
-Options.prototype._get_array = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  var result = default_value || [];
-  if (typeof option_value === 'object') {
-    if (option_value !== null && typeof option_value.concat === 'function') {
-      result = option_value.concat();
-    }
-  } else if (typeof option_value === 'string') {
-    result = option_value.split(/[^a-zA-Z0-9_\/\-]+/);
-  }
-  return result;
-};
-
-Options.prototype._get_boolean = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  var result = option_value === undefined ? !!default_value : !!option_value;
-  return result;
-};
-
-Options.prototype._get_characters = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  var result = default_value || '';
-  if (typeof option_value === 'string') {
-    result = option_value.replace(/\\r/, '\r').replace(/\\n/, '\n').replace(/\\t/, '\t');
-  }
-  return result;
-};
-
-Options.prototype._get_number = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  default_value = parseInt(default_value, 10);
-  if (isNaN(default_value)) {
-    default_value = 0;
-  }
-  var result = parseInt(option_value, 10);
-  if (isNaN(result)) {
-    result = default_value;
-  }
-  return result;
-};
-
-Options.prototype._get_selection = function(name, selection_list, default_value) {
-  var result = this._get_selection_list(name, selection_list, default_value);
-  if (result.length !== 1) {
-    throw new Error(
-      "Invalid Option Value: The option '" + name + "' can only be one of the following values:\n" +
-      selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
-  }
-
-  return result[0];
-};
-
-
-Options.prototype._get_selection_list = function(name, selection_list, default_value) {
-  if (!selection_list || selection_list.length === 0) {
-    throw new Error("Selection list cannot be empty.");
-  }
-
-  default_value = default_value || [selection_list[0]];
-  if (!this._is_valid_selection(default_value, selection_list)) {
-    throw new Error("Invalid Default Value!");
-  }
-
-  var result = this._get_array(name, default_value);
-  if (!this._is_valid_selection(result, selection_list)) {
-    throw new Error(
-      "Invalid Option Value: The option '" + name + "' can contain only the following values:\n" +
-      selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
-  }
-
-  return result;
-};
-
-Options.prototype._is_valid_selection = function(result, selection_list) {
-  return result.length && selection_list.length &&
-    !result.some(function(item) { return selection_list.indexOf(item) === -1; });
-};
-
-
-// merges child options up with the parent options object
-// Example: obj = {a: 1, b: {a: 2}}
-//          mergeOpts(obj, 'b')
-//
-//          Returns: {a: 2}
-function _mergeOpts(allOptions, childFieldName) {
-  var finalOpts = {};
-  allOptions = _normalizeOpts(allOptions);
-  var name;
-
-  for (name in allOptions) {
-    if (name !== childFieldName) {
-      finalOpts[name] = allOptions[name];
-    }
-  }
-
-  //merge in the per type settings for the childFieldName
-  if (childFieldName && allOptions[childFieldName]) {
-    for (name in allOptions[childFieldName]) {
-      finalOpts[name] = allOptions[childFieldName][name];
-    }
-  }
-  return finalOpts;
-}
-
-function _normalizeOpts(options) {
-  var convertedOpts = {};
-  var key;
-
-  for (key in options) {
-    var newKey = key.replace(/-/g, "_");
-    convertedOpts[newKey] = options[key];
-  }
-  return convertedOpts;
-}
-
-module.exports.Options = Options;
-module.exports.normalizeOpts = _normalizeOpts;
-module.exports.mergeOpts = _mergeOpts;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var InputScanner = __webpack_require__(8).InputScanner;
-var BaseTokenizer = __webpack_require__(9).Tokenizer;
-var BASETOKEN = __webpack_require__(9).TOKEN;
-var Directives = __webpack_require__(13).Directives;
-var acorn = __webpack_require__(4);
-var Pattern = __webpack_require__(12).Pattern;
-var TemplatablePattern = __webpack_require__(14).TemplatablePattern;
-
-
-function in_array(what, arr) {
-  return arr.indexOf(what) !== -1;
-}
-
-
-var TOKEN = {
-  START_EXPR: 'TK_START_EXPR',
-  END_EXPR: 'TK_END_EXPR',
-  START_BLOCK: 'TK_START_BLOCK',
-  END_BLOCK: 'TK_END_BLOCK',
-  WORD: 'TK_WORD',
-  RESERVED: 'TK_RESERVED',
-  SEMICOLON: 'TK_SEMICOLON',
-  STRING: 'TK_STRING',
-  EQUALS: 'TK_EQUALS',
-  OPERATOR: 'TK_OPERATOR',
-  COMMA: 'TK_COMMA',
-  BLOCK_COMMENT: 'TK_BLOCK_COMMENT',
-  COMMENT: 'TK_COMMENT',
-  DOT: 'TK_DOT',
-  UNKNOWN: 'TK_UNKNOWN',
-  START: BASETOKEN.START,
-  RAW: BASETOKEN.RAW,
-  EOF: BASETOKEN.EOF
-};
-
-
-var directives_core = new Directives(/\/\*/, /\*\//);
-
-var number_pattern = /0[xX][0123456789abcdefABCDEF]*|0[oO][01234567]*|0[bB][01]*|\d+n|(?:\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/;
-
-var digit = /[0-9]/;
-
-// Dot "." must be distinguished from "..." and decimal
-var dot_pattern = /[^\d\.]/;
-
-var positionable_operators = (
-  ">>> === !== " +
-  "<< && >= ** != == <= >> || |> " +
-  "< / - + > : & % ? ^ | *").split(' ');
-
-// IMPORTANT: this must be sorted longest to shortest or tokenizing many not work.
-// Also, you must update possitionable operators separately from punct
-var punct =
-  ">>>= " +
-  "... >>= <<= === >>> !== **= " +
-  "=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= |> " +
-  "= ! ? > < : / ^ - + * & % ~ |";
-
-punct = punct.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&");
-// ?. but not if followed by a number
-punct = '\\?\\.(?!\\d) ' + punct;
-punct = punct.replace(/ /g, '|');
-
-var punct_pattern = new RegExp(punct);
-
-// words which should always start on new line.
-var line_starters = 'continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export'.split(',');
-var reserved_words = line_starters.concat(['do', 'in', 'of', 'else', 'get', 'set', 'new', 'catch', 'finally', 'typeof', 'yield', 'async', 'await', 'from', 'as']);
-var reserved_word_pattern = new RegExp('^(?:' + reserved_words.join('|') + ')$');
-
-// var template_pattern = /(?:(?:<\?php|<\?=)[\s\S]*?\?>)|(?:<%[\s\S]*?%>)/g;
-
-var in_html_comment;
-
-var Tokenizer = function(input_string, options) {
-  BaseTokenizer.call(this, input_string, options);
-
-  this._patterns.whitespace = this._patterns.whitespace.matching(
-    /\u00A0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff/.source,
-    /\u2028\u2029/.source);
-
-  var pattern_reader = new Pattern(this._input);
-  var templatable = new TemplatablePattern(this._input)
-    .read_options(this._options);
-
-  this.__patterns = {
-    template: templatable,
-    identifier: templatable.starting_with(acorn.identifier).matching(acorn.identifierMatch),
-    number: pattern_reader.matching(number_pattern),
-    punct: pattern_reader.matching(punct_pattern),
-    // comment ends just before nearest linefeed or end of file
-    comment: pattern_reader.starting_with(/\/\//).until(/[\n\r\u2028\u2029]/),
-    //  /* ... */ comment ends with nearest */ or end of file
-    block_comment: pattern_reader.starting_with(/\/\*/).until_after(/\*\//),
-    html_comment_start: pattern_reader.matching(/<!--/),
-    html_comment_end: pattern_reader.matching(/-->/),
-    include: pattern_reader.starting_with(/#include/).until_after(acorn.lineBreak),
-    shebang: pattern_reader.starting_with(/#!/).until_after(acorn.lineBreak),
-    xml: pattern_reader.matching(/[\s\S]*?<(\/?)([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/),
-    single_quote: templatable.until(/['\\\n\r\u2028\u2029]/),
-    double_quote: templatable.until(/["\\\n\r\u2028\u2029]/),
-    template_text: templatable.until(/[`\\$]/),
-    template_expression: templatable.until(/[`}\\]/)
-  };
-
-};
-Tokenizer.prototype = new BaseTokenizer();
-
-Tokenizer.prototype._is_comment = function(current_token) {
-  return current_token.type === TOKEN.COMMENT || current_token.type === TOKEN.BLOCK_COMMENT || current_token.type === TOKEN.UNKNOWN;
-};
-
-Tokenizer.prototype._is_opening = function(current_token) {
-  return current_token.type === TOKEN.START_BLOCK || current_token.type === TOKEN.START_EXPR;
-};
-
-Tokenizer.prototype._is_closing = function(current_token, open_token) {
-  return (current_token.type === TOKEN.END_BLOCK || current_token.type === TOKEN.END_EXPR) &&
-    (open_token && (
-      (current_token.text === ']' && open_token.text === '[') ||
-      (current_token.text === ')' && open_token.text === '(') ||
-      (current_token.text === '}' && open_token.text === '{')));
-};
-
-Tokenizer.prototype._reset = function() {
-  in_html_comment = false;
-};
-
-Tokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false
-  var token = null;
-  this._readWhitespace();
-  var c = this._input.peek();
-
-  if (c === null) {
-    return this._create_token(TOKEN.EOF, '');
-  }
-
-  token = token || this._read_non_javascript(c);
-  token = token || this._read_string(c);
-  token = token || this._read_word(previous_token);
-  token = token || this._read_singles(c);
-  token = token || this._read_comment(c);
-  token = token || this._read_regexp(c, previous_token);
-  token = token || this._read_xml(c, previous_token);
-  token = token || this._read_punctuation();
-  token = token || this._create_token(TOKEN.UNKNOWN, this._input.next());
-
-  return token;
-};
-
-Tokenizer.prototype._read_word = function(previous_token) {
-  var resulting_string;
-  resulting_string = this.__patterns.identifier.read();
-  if (resulting_string !== '') {
-    resulting_string = resulting_string.replace(acorn.allLineBreaks, '\n');
-    if (!(previous_token.type === TOKEN.DOT ||
-        (previous_token.type === TOKEN.RESERVED && (previous_token.text === 'set' || previous_token.text === 'get'))) &&
-      reserved_word_pattern.test(resulting_string)) {
-      if (resulting_string === 'in' || resulting_string === 'of') { // hack for 'in' and 'of' operators
-        return this._create_token(TOKEN.OPERATOR, resulting_string);
-      }
-      return this._create_token(TOKEN.RESERVED, resulting_string);
-    }
-    return this._create_token(TOKEN.WORD, resulting_string);
-  }
-
-  resulting_string = this.__patterns.number.read();
-  if (resulting_string !== '') {
-    return this._create_token(TOKEN.WORD, resulting_string);
-  }
-};
-
-Tokenizer.prototype._read_singles = function(c) {
-  var token = null;
-  if (c === '(' || c === '[') {
-    token = this._create_token(TOKEN.START_EXPR, c);
-  } else if (c === ')' || c === ']') {
-    token = this._create_token(TOKEN.END_EXPR, c);
-  } else if (c === '{') {
-    token = this._create_token(TOKEN.START_BLOCK, c);
-  } else if (c === '}') {
-    token = this._create_token(TOKEN.END_BLOCK, c);
-  } else if (c === ';') {
-    token = this._create_token(TOKEN.SEMICOLON, c);
-  } else if (c === '.' && dot_pattern.test(this._input.peek(1))) {
-    token = this._create_token(TOKEN.DOT, c);
-  } else if (c === ',') {
-    token = this._create_token(TOKEN.COMMA, c);
-  }
-
-  if (token) {
-    this._input.next();
-  }
-  return token;
-};
-
-Tokenizer.prototype._read_punctuation = function() {
-  var resulting_string = this.__patterns.punct.read();
-
-  if (resulting_string !== '') {
-    if (resulting_string === '=') {
-      return this._create_token(TOKEN.EQUALS, resulting_string);
-    } else if (resulting_string === '?.') {
-      return this._create_token(TOKEN.DOT, resulting_string);
-    } else {
-      return this._create_token(TOKEN.OPERATOR, resulting_string);
-    }
-  }
-};
-
-Tokenizer.prototype._read_non_javascript = function(c) {
-  var resulting_string = '';
-
-  if (c === '#') {
-    if (this._is_first_token()) {
-      resulting_string = this.__patterns.shebang.read();
-
-      if (resulting_string) {
-        return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\n');
-      }
-    }
-
-    // handles extendscript #includes
-    resulting_string = this.__patterns.include.read();
-
-    if (resulting_string) {
-      return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\n');
-    }
-
-    c = this._input.next();
-
-    // Spidermonkey-specific sharp variables for circular references. Considered obsolete.
-    var sharp = '#';
-    if (this._input.hasNext() && this._input.testChar(digit)) {
-      do {
-        c = this._input.next();
-        sharp += c;
-      } while (this._input.hasNext() && c !== '#' && c !== '=');
-      if (c === '#') {
-        //
-      } else if (this._input.peek() === '[' && this._input.peek(1) === ']') {
-        sharp += '[]';
-        this._input.next();
-        this._input.next();
-      } else if (this._input.peek() === '{' && this._input.peek(1) === '}') {
-        sharp += '{}';
-        this._input.next();
-        this._input.next();
-      }
-      return this._create_token(TOKEN.WORD, sharp);
-    }
-
-    this._input.back();
-
-  } else if (c === '<' && this._is_first_token()) {
-    resulting_string = this.__patterns.html_comment_start.read();
-    if (resulting_string) {
-      while (this._input.hasNext() && !this._input.testChar(acorn.newline)) {
-        resulting_string += this._input.next();
-      }
-      in_html_comment = true;
-      return this._create_token(TOKEN.COMMENT, resulting_string);
-    }
-  } else if (in_html_comment && c === '-') {
-    resulting_string = this.__patterns.html_comment_end.read();
-    if (resulting_string) {
-      in_html_comment = false;
-      return this._create_token(TOKEN.COMMENT, resulting_string);
-    }
-  }
-
-  return null;
-};
-
-Tokenizer.prototype._read_comment = function(c) {
-  var token = null;
-  if (c === '/') {
-    var comment = '';
-    if (this._input.peek(1) === '*') {
-      // peek for comment /* ... */
-      comment = this.__patterns.block_comment.read();
-      var directives = directives_core.get_directives(comment);
-      if (directives && directives.ignore === 'start') {
-        comment += directives_core.readIgnored(this._input);
-      }
-      comment = comment.replace(acorn.allLineBreaks, '\n');
-      token = this._create_token(TOKEN.BLOCK_COMMENT, comment);
-      token.directives = directives;
-    } else if (this._input.peek(1) === '/') {
-      // peek for comment // ...
-      comment = this.__patterns.comment.read();
-      token = this._create_token(TOKEN.COMMENT, comment);
-    }
-  }
-  return token;
-};
-
-Tokenizer.prototype._read_string = function(c) {
-  if (c === '`' || c === "'" || c === '"') {
-    var resulting_string = this._input.next();
-    this.has_char_escapes = false;
-
-    if (c === '`') {
-      resulting_string += this._read_string_recursive('`', true, '${');
-    } else {
-      resulting_string += this._read_string_recursive(c);
-    }
-
-    if (this.has_char_escapes && this._options.unescape_strings) {
-      resulting_string = unescape_string(resulting_string);
-    }
-
-    if (this._input.peek() === c) {
-      resulting_string += this._input.next();
-    }
-
-    resulting_string = resulting_string.replace(acorn.allLineBreaks, '\n');
-
-    return this._create_token(TOKEN.STRING, resulting_string);
-  }
-
-  return null;
-};
-
-Tokenizer.prototype._allow_regexp_or_xml = function(previous_token) {
-  // regex and xml can only appear in specific locations during parsing
-  return (previous_token.type === TOKEN.RESERVED && in_array(previous_token.text, ['return', 'case', 'throw', 'else', 'do', 'typeof', 'yield'])) ||
-    (previous_token.type === TOKEN.END_EXPR && previous_token.text === ')' &&
-      previous_token.opened.previous.type === TOKEN.RESERVED && in_array(previous_token.opened.previous.text, ['if', 'while', 'for'])) ||
-    (in_array(previous_token.type, [TOKEN.COMMENT, TOKEN.START_EXPR, TOKEN.START_BLOCK, TOKEN.START,
-      TOKEN.END_BLOCK, TOKEN.OPERATOR, TOKEN.EQUALS, TOKEN.EOF, TOKEN.SEMICOLON, TOKEN.COMMA
-    ]));
-};
-
-Tokenizer.prototype._read_regexp = function(c, previous_token) {
-
-  if (c === '/' && this._allow_regexp_or_xml(previous_token)) {
-    // handle regexp
-    //
-    var resulting_string = this._input.next();
-    var esc = false;
-
-    var in_char_class = false;
-    while (this._input.hasNext() &&
-      ((esc || in_char_class || this._input.peek() !== c) &&
-        !this._input.testChar(acorn.newline))) {
-      resulting_string += this._input.peek();
-      if (!esc) {
-        esc = this._input.peek() === '\\';
-        if (this._input.peek() === '[') {
-          in_char_class = true;
-        } else if (this._input.peek() === ']') {
-          in_char_class = false;
-        }
-      } else {
-        esc = false;
-      }
-      this._input.next();
-    }
-
-    if (this._input.peek() === c) {
-      resulting_string += this._input.next();
-
-      // regexps may have modifiers /regexp/MOD , so fetch those, too
-      // Only [gim] are valid, but if the user puts in garbage, do what we can to take it.
-      resulting_string += this._input.read(acorn.identifier);
-    }
-    return this._create_token(TOKEN.STRING, resulting_string);
-  }
-  return null;
-};
-
-Tokenizer.prototype._read_xml = function(c, previous_token) {
-
-  if (this._options.e4x && c === "<" && this._allow_regexp_or_xml(previous_token)) {
-    var xmlStr = '';
-    var match = this.__patterns.xml.read_match();
-    // handle e4x xml literals
-    //
-    if (match) {
-      // Trim root tag to attempt to
-      var rootTag = match[2].replace(/^{\s+/, '{').replace(/\s+}$/, '}');
-      var isCurlyRoot = rootTag.indexOf('{') === 0;
-      var depth = 0;
-      while (match) {
-        var isEndTag = !!match[1];
-        var tagName = match[2];
-        var isSingletonTag = (!!match[match.length - 1]) || (tagName.slice(0, 8) === "![CDATA[");
-        if (!isSingletonTag &&
-          (tagName === rootTag || (isCurlyRoot && tagName.replace(/^{\s+/, '{').replace(/\s+}$/, '}')))) {
-          if (isEndTag) {
-            --depth;
-          } else {
-            ++depth;
-          }
-        }
-        xmlStr += match[0];
-        if (depth <= 0) {
-          break;
-        }
-        match = this.__patterns.xml.read_match();
-      }
-      // if we didn't close correctly, keep unformatted.
-      if (!match) {
-        xmlStr += this._input.match(/[\s\S]*/g)[0];
-      }
-      xmlStr = xmlStr.replace(acorn.allLineBreaks, '\n');
-      return this._create_token(TOKEN.STRING, xmlStr);
-    }
-  }
-
-  return null;
-};
-
-function unescape_string(s) {
-  // You think that a regex would work for this
-  // return s.replace(/\\x([0-9a-f]{2})/gi, function(match, val) {
-  //         return String.fromCharCode(parseInt(val, 16));
-  //     })
-  // However, dealing with '\xff', '\\xff', '\\\xff' makes this more fun.
-  var out = '',
-    escaped = 0;
-
-  var input_scan = new InputScanner(s);
-  var matched = null;
-
-  while (input_scan.hasNext()) {
-    // Keep any whitespace, non-slash characters
-    // also keep slash pairs.
-    matched = input_scan.match(/([\s]|[^\\]|\\\\)+/g);
-
-    if (matched) {
-      out += matched[0];
-    }
-
-    if (input_scan.peek() === '\\') {
-      input_scan.next();
-      if (input_scan.peek() === 'x') {
-        matched = input_scan.match(/x([0-9A-Fa-f]{2})/g);
-      } else if (input_scan.peek() === 'u') {
-        matched = input_scan.match(/u([0-9A-Fa-f]{4})/g);
-      } else {
-        out += '\\';
-        if (input_scan.hasNext()) {
-          out += input_scan.next();
-        }
-        continue;
-      }
-
-      // If there's some error decoding, return the original string
-      if (!matched) {
-        return s;
-      }
-
-      escaped = parseInt(matched[1], 16);
-
-      if (escaped > 0x7e && escaped <= 0xff && matched[0].indexOf('x') === 0) {
-        // we bail out on \x7f..\xff,
-        // leaving whole string escaped,
-        // as it's probably completely binary
-        return s;
-      } else if (escaped >= 0x00 && escaped < 0x20) {
-        // leave 0x00...0x1f escaped
-        out += '\\' + matched[0];
-        continue;
-      } else if (escaped === 0x22 || escaped === 0x27 || escaped === 0x5c) {
-        // single-quote, apostrophe, backslash - escape these
-        out += '\\' + String.fromCharCode(escaped);
-      } else {
-        out += String.fromCharCode(escaped);
-      }
-    }
-  }
-
-  return out;
-}
-
-// handle string
-//
-Tokenizer.prototype._read_string_recursive = function(delimiter, allow_unescaped_newlines, start_sub) {
-  var current_char;
-  var pattern;
-  if (delimiter === '\'') {
-    pattern = this.__patterns.single_quote;
-  } else if (delimiter === '"') {
-    pattern = this.__patterns.double_quote;
-  } else if (delimiter === '`') {
-    pattern = this.__patterns.template_text;
-  } else if (delimiter === '}') {
-    pattern = this.__patterns.template_expression;
-  }
-
-  var resulting_string = pattern.read();
-  var next = '';
-  while (this._input.hasNext()) {
-    next = this._input.next();
-    if (next === delimiter ||
-      (!allow_unescaped_newlines && acorn.newline.test(next))) {
-      this._input.back();
-      break;
-    } else if (next === '\\' && this._input.hasNext()) {
-      current_char = this._input.peek();
-
-      if (current_char === 'x' || current_char === 'u') {
-        this.has_char_escapes = true;
-      } else if (current_char === '\r' && this._input.peek(1) === '\n') {
-        this._input.next();
-      }
-      next += this._input.next();
-    } else if (start_sub) {
-      if (start_sub === '${' && next === '$' && this._input.peek() === '{') {
-        next += this._input.next();
-      }
-
-      if (start_sub === next) {
-        if (delimiter === '`') {
-          next += this._read_string_recursive('}', allow_unescaped_newlines, '`');
-        } else {
-          next += this._read_string_recursive('`', allow_unescaped_newlines, '${');
-        }
-        if (this._input.hasNext()) {
-          next += this._input.next();
-        }
-      }
-    }
-    next += pattern.read();
-    resulting_string += next;
-  }
-
-  return resulting_string;
-};
-
-module.exports.Tokenizer = Tokenizer;
-module.exports.TOKEN = TOKEN;
-module.exports.positionable_operators = positionable_operators.slice();
-module.exports.line_starters = line_starters.slice();
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');
-
-function InputScanner(input_string) {
-  this.__input = input_string || '';
-  this.__input_length = this.__input.length;
-  this.__position = 0;
-}
-
-InputScanner.prototype.restart = function() {
-  this.__position = 0;
-};
-
-InputScanner.prototype.back = function() {
-  if (this.__position > 0) {
-    this.__position -= 1;
-  }
-};
-
-InputScanner.prototype.hasNext = function() {
-  return this.__position < this.__input_length;
-};
-
-InputScanner.prototype.next = function() {
-  var val = null;
-  if (this.hasNext()) {
-    val = this.__input.charAt(this.__position);
-    this.__position += 1;
-  }
-  return val;
-};
-
-InputScanner.prototype.peek = function(index) {
-  var val = null;
-  index = index || 0;
-  index += this.__position;
-  if (index >= 0 && index < this.__input_length) {
-    val = this.__input.charAt(index);
-  }
-  return val;
-};
-
-// This is a JavaScript only helper function (not in python)
-// Javascript doesn't have a match method
-// and not all implementation support "sticky" flag.
-// If they do not support sticky then both this.match() and this.test() method
-// must get the match and check the index of the match.
-// If sticky is supported and set, this method will use it.
-// Otherwise it will check that global is set, and fall back to the slower method.
-InputScanner.prototype.__match = function(pattern, index) {
-  pattern.lastIndex = index;
-  var pattern_match = pattern.exec(this.__input);
-
-  if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {
-    if (pattern_match.index !== index) {
-      pattern_match = null;
-    }
-  }
-
-  return pattern_match;
-};
-
-InputScanner.prototype.test = function(pattern, index) {
-  index = index || 0;
-  index += this.__position;
-
-  if (index >= 0 && index < this.__input_length) {
-    return !!this.__match(pattern, index);
-  } else {
-    return false;
-  }
-};
-
-InputScanner.prototype.testChar = function(pattern, index) {
-  // test one character regex match
-  var val = this.peek(index);
-  pattern.lastIndex = 0;
-  return val !== null && pattern.test(val);
-};
-
-InputScanner.prototype.match = function(pattern) {
-  var pattern_match = this.__match(pattern, this.__position);
-  if (pattern_match) {
-    this.__position += pattern_match[0].length;
-  } else {
-    pattern_match = null;
-  }
-  return pattern_match;
-};
-
-InputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {
-  var val = '';
-  var match;
-  if (starting_pattern) {
-    match = this.match(starting_pattern);
-    if (match) {
-      val += match[0];
-    }
-  }
-  if (until_pattern && (match || !starting_pattern)) {
-    val += this.readUntil(until_pattern, until_after);
-  }
-  return val;
-};
-
-InputScanner.prototype.readUntil = function(pattern, until_after) {
-  var val = '';
-  var match_index = this.__position;
-  pattern.lastIndex = this.__position;
-  var pattern_match = pattern.exec(this.__input);
-  if (pattern_match) {
-    match_index = pattern_match.index;
-    if (until_after) {
-      match_index += pattern_match[0].length;
-    }
-  } else {
-    match_index = this.__input_length;
-  }
-
-  val = this.__input.substring(this.__position, match_index);
-  this.__position = match_index;
-  return val;
-};
-
-InputScanner.prototype.readUntilAfter = function(pattern) {
-  return this.readUntil(pattern, true);
-};
-
-InputScanner.prototype.get_regexp = function(pattern, match_from) {
-  var result = null;
-  var flags = 'g';
-  if (match_from && regexp_has_sticky) {
-    flags = 'y';
-  }
-  // strings are converted to regexp
-  if (typeof pattern === "string" && pattern !== '') {
-    // result = new RegExp(pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), flags);
-    result = new RegExp(pattern, flags);
-  } else if (pattern) {
-    result = new RegExp(pattern.source, flags);
-  }
-  return result;
-};
-
-InputScanner.prototype.get_literal_regexp = function(literal_string) {
-  return RegExp(literal_string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
-};
-
-/* css beautifier legacy helpers */
-InputScanner.prototype.peekUntilAfter = function(pattern) {
-  var start = this.__position;
-  var val = this.readUntilAfter(pattern);
-  this.__position = start;
-  return val;
-};
-
-InputScanner.prototype.lookBack = function(testVal) {
-  var start = this.__position - 1;
-  return start >= testVal.length && this.__input.substring(start - testVal.length, start)
-    .toLowerCase() === testVal;
-};
-
-module.exports.InputScanner = InputScanner;
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var InputScanner = __webpack_require__(8).InputScanner;
-var Token = __webpack_require__(3).Token;
-var TokenStream = __webpack_require__(10).TokenStream;
-var WhitespacePattern = __webpack_require__(11).WhitespacePattern;
-
-var TOKEN = {
-  START: 'TK_START',
-  RAW: 'TK_RAW',
-  EOF: 'TK_EOF'
-};
-
-var Tokenizer = function(input_string, options) {
-  this._input = new InputScanner(input_string);
-  this._options = options || {};
-  this.__tokens = null;
-
-  this._patterns = {};
-  this._patterns.whitespace = new WhitespacePattern(this._input);
-};
-
-Tokenizer.prototype.tokenize = function() {
-  this._input.restart();
-  this.__tokens = new TokenStream();
-
-  this._reset();
-
-  var current;
-  var previous = new Token(TOKEN.START, '');
-  var open_token = null;
-  var open_stack = [];
-  var comments = new TokenStream();
-
-  while (previous.type !== TOKEN.EOF) {
-    current = this._get_next_token(previous, open_token);
-    while (this._is_comment(current)) {
-      comments.add(current);
-      current = this._get_next_token(previous, open_token);
-    }
-
-    if (!comments.isEmpty()) {
-      current.comments_before = comments;
-      comments = new TokenStream();
-    }
-
-    current.parent = open_token;
-
-    if (this._is_opening(current)) {
-      open_stack.push(open_token);
-      open_token = current;
-    } else if (open_token && this._is_closing(current, open_token)) {
-      current.opened = open_token;
-      open_token.closed = current;
-      open_token = open_stack.pop();
-      current.parent = open_token;
-    }
-
-    current.previous = previous;
-    previous.next = current;
-
-    this.__tokens.add(current);
-    previous = current;
-  }
-
-  return this.__tokens;
-};
-
-
-Tokenizer.prototype._is_first_token = function() {
-  return this.__tokens.isEmpty();
-};
-
-Tokenizer.prototype._reset = function() {};
-
-Tokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false
-  this._readWhitespace();
-  var resulting_string = this._input.read(/.+/g);
-  if (resulting_string) {
-    return this._create_token(TOKEN.RAW, resulting_string);
-  } else {
-    return this._create_token(TOKEN.EOF, '');
-  }
-};
-
-Tokenizer.prototype._is_comment = function(current_token) { // jshint unused:false
-  return false;
-};
-
-Tokenizer.prototype._is_opening = function(current_token) { // jshint unused:false
-  return false;
-};
-
-Tokenizer.prototype._is_closing = function(current_token, open_token) { // jshint unused:false
-  return false;
-};
-
-Tokenizer.prototype._create_token = function(type, text) {
-  var token = new Token(type, text,
-    this._patterns.whitespace.newline_count,
-    this._patterns.whitespace.whitespace_before_token);
-  return token;
-};
-
-Tokenizer.prototype._readWhitespace = function() {
-  return this._patterns.whitespace.read();
-};
-
-
-
-module.exports.Tokenizer = Tokenizer;
-module.exports.TOKEN = TOKEN;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-function TokenStream(parent_token) {
-  // private
-  this.__tokens = [];
-  this.__tokens_length = this.__tokens.length;
-  this.__position = 0;
-  this.__parent_token = parent_token;
-}
-
-TokenStream.prototype.restart = function() {
-  this.__position = 0;
-};
-
-TokenStream.prototype.isEmpty = function() {
-  return this.__tokens_length === 0;
-};
-
-TokenStream.prototype.hasNext = function() {
-  return this.__position < this.__tokens_length;
-};
-
-TokenStream.prototype.next = function() {
-  var val = null;
-  if (this.hasNext()) {
-    val = this.__tokens[this.__position];
-    this.__position += 1;
-  }
-  return val;
-};
-
-TokenStream.prototype.peek = function(index) {
-  var val = null;
-  index = index || 0;
-  index += this.__position;
-  if (index >= 0 && index < this.__tokens_length) {
-    val = this.__tokens[index];
-  }
-  return val;
-};
-
-TokenStream.prototype.add = function(token) {
-  if (this.__parent_token) {
-    token.parent = this.__parent_token;
-  }
-  this.__tokens.push(token);
-  this.__tokens_length += 1;
-};
-
-module.exports.TokenStream = TokenStream;
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var Pattern = __webpack_require__(12).Pattern;
-
-function WhitespacePattern(input_scanner, parent) {
-  Pattern.call(this, input_scanner, parent);
-  if (parent) {
-    this._line_regexp = this._input.get_regexp(parent._line_regexp);
-  } else {
-    this.__set_whitespace_patterns('', '');
-  }
-
-  this.newline_count = 0;
-  this.whitespace_before_token = '';
-}
-WhitespacePattern.prototype = new Pattern();
-
-WhitespacePattern.prototype.__set_whitespace_patterns = function(whitespace_chars, newline_chars) {
-  whitespace_chars += '\\t ';
-  newline_chars += '\\n\\r';
-
-  this._match_pattern = this._input.get_regexp(
-    '[' + whitespace_chars + newline_chars + ']+', true);
-  this._newline_regexp = this._input.get_regexp(
-    '\\r\\n|[' + newline_chars + ']');
-};
-
-WhitespacePattern.prototype.read = function() {
-  this.newline_count = 0;
-  this.whitespace_before_token = '';
-
-  var resulting_string = this._input.read(this._match_pattern);
-  if (resulting_string === ' ') {
-    this.whitespace_before_token = ' ';
-  } else if (resulting_string) {
-    var matches = this.__split(this._newline_regexp, resulting_string);
-    this.newline_count = matches.length - 1;
-    this.whitespace_before_token = matches[this.newline_count];
-  }
-
-  return resulting_string;
-};
-
-WhitespacePattern.prototype.matching = function(whitespace_chars, newline_chars) {
-  var result = this._create();
-  result.__set_whitespace_patterns(whitespace_chars, newline_chars);
-  result._update();
-  return result;
-};
-
-WhitespacePattern.prototype._create = function() {
-  return new WhitespacePattern(this._input, this);
-};
-
-WhitespacePattern.prototype.__split = function(regexp, input_string) {
-  regexp.lastIndex = 0;
-  var start_index = 0;
-  var result = [];
-  var next_match = regexp.exec(input_string);
-  while (next_match) {
-    result.push(input_string.substring(start_index, next_match.index));
-    start_index = next_match.index + next_match[0].length;
-    next_match = regexp.exec(input_string);
-  }
-
-  if (start_index < input_string.length) {
-    result.push(input_string.substring(start_index, input_string.length));
-  } else {
-    result.push('');
-  }
-
-  return result;
-};
-
-
-
-module.exports.WhitespacePattern = WhitespacePattern;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-function Pattern(input_scanner, parent) {
-  this._input = input_scanner;
-  this._starting_pattern = null;
-  this._match_pattern = null;
-  this._until_pattern = null;
-  this._until_after = false;
-
-  if (parent) {
-    this._starting_pattern = this._input.get_regexp(parent._starting_pattern, true);
-    this._match_pattern = this._input.get_regexp(parent._match_pattern, true);
-    this._until_pattern = this._input.get_regexp(parent._until_pattern);
-    this._until_after = parent._until_after;
-  }
-}
-
-Pattern.prototype.read = function() {
-  var result = this._input.read(this._starting_pattern);
-  if (!this._starting_pattern || result) {
-    result += this._input.read(this._match_pattern, this._until_pattern, this._until_after);
-  }
-  return result;
-};
-
-Pattern.prototype.read_match = function() {
-  return this._input.match(this._match_pattern);
-};
-
-Pattern.prototype.until_after = function(pattern) {
-  var result = this._create();
-  result._until_after = true;
-  result._until_pattern = this._input.get_regexp(pattern);
-  result._update();
-  return result;
-};
-
-Pattern.prototype.until = function(pattern) {
-  var result = this._create();
-  result._until_after = false;
-  result._until_pattern = this._input.get_regexp(pattern);
-  result._update();
-  return result;
-};
-
-Pattern.prototype.starting_with = function(pattern) {
-  var result = this._create();
-  result._starting_pattern = this._input.get_regexp(pattern, true);
-  result._update();
-  return result;
-};
-
-Pattern.prototype.matching = function(pattern) {
-  var result = this._create();
-  result._match_pattern = this._input.get_regexp(pattern, true);
-  result._update();
-  return result;
-};
-
-Pattern.prototype._create = function() {
-  return new Pattern(this._input, this);
-};
-
-Pattern.prototype._update = function() {};
-
-module.exports.Pattern = Pattern;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-function Directives(start_block_pattern, end_block_pattern) {
-  start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;
-  end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;
-  this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \w+[:]\w+)+ /.source + end_block_pattern, 'g');
-  this.__directive_pattern = / (\w+)[:](\w+)/g;
-
-  this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\sbeautify\signore:end\s/.source + end_block_pattern, 'g');
-}
-
-Directives.prototype.get_directives = function(text) {
-  if (!text.match(this.__directives_block_pattern)) {
-    return null;
-  }
-
-  var directives = {};
-  this.__directive_pattern.lastIndex = 0;
-  var directive_match = this.__directive_pattern.exec(text);
-
-  while (directive_match) {
-    directives[directive_match[1]] = directive_match[2];
-    directive_match = this.__directive_pattern.exec(text);
-  }
-
-  return directives;
-};
-
-Directives.prototype.readIgnored = function(input) {
-  return input.readUntilAfter(this.__directives_end_ignore_pattern);
-};
-
-
-module.exports.Directives = Directives;
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  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.
-*/
-
-
-
-var Pattern = __webpack_require__(12).Pattern;
-
-
-var template_names = {
-  django: false,
-  erb: false,
-  handlebars: false,
-  php: false
-};
-
-// This lets templates appear anywhere we would do a readUntil
-// The cost is higher but it is pay to play.
-function TemplatablePattern(input_scanner, parent) {
-  Pattern.call(this, input_scanner, parent);
-  this.__template_pattern = null;
-  this._disabled = Object.assign({}, template_names);
-  this._excluded = Object.assign({}, template_names);
-
-  if (parent) {
-    this.__template_pattern = this._input.get_regexp(parent.__template_pattern);
-    this._excluded = Object.assign(this._excluded, parent._excluded);
-    this._disabled = Object.assign(this._disabled, parent._disabled);
-  }
-  var pattern = new Pattern(input_scanner);
-  this.__patterns = {
-    handlebars_comment: pattern.starting_with(/{{!--/).until_after(/--}}/),
-    handlebars_unescaped: pattern.starting_with(/{{{/).until_after(/}}}/),
-    handlebars: pattern.starting_with(/{{/).until_after(/}}/),
-    php: pattern.starting_with(/<\?(?:[=]|php)/).until_after(/\?>/),
-    erb: pattern.starting_with(/<%[^%]/).until_after(/[^%]%>/),
-    // django coflicts with handlebars a bit.
-    django: pattern.starting_with(/{%/).until_after(/%}/),
-    django_value: pattern.starting_with(/{{/).until_after(/}}/),
-    django_comment: pattern.starting_with(/{#/).until_after(/#}/)
-  };
-}
-TemplatablePattern.prototype = new Pattern();
-
-TemplatablePattern.prototype._create = function() {
-  return new TemplatablePattern(this._input, this);
-};
-
-TemplatablePattern.prototype._update = function() {
-  this.__set_templated_pattern();
-};
-
-TemplatablePattern.prototype.disable = function(language) {
-  var result = this._create();
-  result._disabled[language] = true;
-  result._update();
-  return result;
-};
-
-TemplatablePattern.prototype.read_options = function(options) {
-  var result = this._create();
-  for (var language in template_names) {
-    result._disabled[language] = options.templating.indexOf(language) === -1;
-  }
-  result._update();
-  return result;
-};
-
-TemplatablePattern.prototype.exclude = function(language) {
-  var result = this._create();
-  result._excluded[language] = true;
-  result._update();
-  return result;
-};
-
-TemplatablePattern.prototype.read = function() {
-  var result = '';
-  if (this._match_pattern) {
-    result = this._input.read(this._starting_pattern);
-  } else {
-    result = this._input.read(this._starting_pattern, this.__template_pattern);
-  }
-  var next = this._read_template();
-  while (next) {
-    if (this._match_pattern) {
-      next += this._input.read(this._match_pattern);
-    } else {
-      next += this._input.readUntil(this.__template_pattern);
-    }
-    result += next;
-    next = this._read_template();
-  }
-
-  if (this._until_after) {
-    result += this._input.readUntilAfter(this._until_pattern);
-  }
-  return result;
-};
-
-TemplatablePattern.prototype.__set_templated_pattern = function() {
-  var items = [];
-
-  if (!this._disabled.php) {
-    items.push(this.__patterns.php._starting_pattern.source);
-  }
-  if (!this._disabled.handlebars) {
-    items.push(this.__patterns.handlebars._starting_pattern.source);
-  }
-  if (!this._disabled.erb) {
-    items.push(this.__patterns.erb._starting_pattern.source);
-  }
-  if (!this._disabled.django) {
-    items.push(this.__patterns.django._starting_pattern.source);
-    items.push(this.__patterns.django_value._starting_pattern.source);
-    items.push(this.__patterns.django_comment._starting_pattern.source);
-  }
-
-  if (this._until_pattern) {
-    items.push(this._until_pattern.source);
-  }
-  this.__template_pattern = this._input.get_regexp('(?:' + items.join('|') + ')');
-};
-
-TemplatablePattern.prototype._read_template = function() {
-  var resulting_string = '';
-  var c = this._input.peek();
-  if (c === '<') {
-    var peek1 = this._input.peek(1);
-    //if we're in a comment, do something special
-    // We treat all comments as literals, even more than preformatted tags
-    // we just look for the appropriate close tag
-    if (!this._disabled.php && !this._excluded.php && peek1 === '?') {
-      resulting_string = resulting_string ||
-        this.__patterns.php.read();
-    }
-    if (!this._disabled.erb && !this._excluded.erb && peek1 === '%') {
-      resulting_string = resulting_string ||
-        this.__patterns.erb.read();
-    }
-  } else if (c === '{') {
-    if (!this._disabled.handlebars && !this._excluded.handlebars) {
-      resulting_string = resulting_string ||
-        this.__patterns.handlebars_comment.read();
-      resulting_string = resulting_string ||
-        this.__patterns.handlebars_unescaped.read();
-      resulting_string = resulting_string ||
-        this.__patterns.handlebars.read();
-    }
-    if (!this._disabled.django) {
-      // django coflicts with handlebars a bit.
-      if (!this._excluded.django && !this._excluded.handlebars) {
-        resulting_string = resulting_string ||
-          this.__patterns.django_value.read();
-      }
-      if (!this._excluded.django) {
-        resulting_string = resulting_string ||
-          this.__patterns.django_comment.read();
-        resulting_string = resulting_string ||
-          this.__patterns.django.read();
-      }
-    }
-  }
-  return resulting_string;
-};
-
-
-module.exports.TemplatablePattern = TemplatablePattern;
-
-
-/***/ })
-/******/ ]);
-var js_beautify = legacy_beautify_js;
-/* Footer */
-if (typeof define === "function" && define.amd) {
-    // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )
-    define([], function() {
-        return { js_beautify: js_beautify };
-    });
-} else if (typeof exports !== "undefined") {
-    // Add support for CommonJS. Just put this file somewhere on your require.paths
-    // and you will be able to `var js_beautify = require("beautify").js_beautify`.
-    exports.js_beautify = js_beautify;
-} else if (typeof window !== "undefined") {
-    // If we're running a web page and don't have either of the above, add our one global
-    window.js_beautify = js_beautify;
-} else if (typeof global !== "undefined") {
-    // If we don't even have window, try global.
-    global.js_beautify = js_beautify;
-}
-
-}());
-
diff --git a/assets/js/plugins/cloudant.pagingcollection.js b/assets/js/plugins/cloudant.pagingcollection.js
deleted file mode 100644
index 0a63ffe..0000000
--- a/assets/js/plugins/cloudant.pagingcollection.js
+++ /dev/null
@@ -1,200 +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.
-
-import _ from 'lodash';
-import $ from 'jquery';
-import Backbone from "backbone";
-import app from '../../../app/app';
-
-//PagingCollection
-//----------------
-
-// A PagingCollection knows how to build appropriate requests to the
-// CouchDB-like server and how to fetch. The Collection will always contain a
-// single page of documents.
-
-export const PagingCollection = Backbone.Collection.extend({
-
-  // initialize parameters and page size
-  constructor: function() {
-    Backbone.Collection.apply(this, arguments);
-    this.configure.apply(this, arguments);
-  },
-
-  configure: function(collections, options) {
-    var querystring = _.result(this, "url").split("?")[1] || "";
-    this.paging = _.defaults((options.paging || {}), {
-      defaultParams: _.defaults({}, options.params, this._parseQueryString(querystring)),
-      hasNext: false,
-      hasPrevious: false,
-      params: {},
-      pageSize: 20,
-      direction: undefined
-    });
-
-    this.paging.params = _.clone(this.paging.defaultParams);
-    this.updateUrlQuery(this.paging.defaultParams);
-  },
-
-  calculateParams: function(currentParams, skipIncrement, limitIncrement) {
-
-    var params = _.clone(currentParams);
-    params.skip = (parseInt(currentParams.skip, 10) || 0) + skipIncrement;
-
-    // guard against hard limits
-    if (this.paging.defaultParams.limit) {
-      params.limit = Math.min(this.paging.defaultParams.limit, params.limit);
-    }
-    // request an extra row so we know that there are more results
-    params.limit = limitIncrement + 1;
-    // prevent illegal skip values
-    params.skip = Math.max(params.skip, 0);
-
-    return params;
-  },
-
-  pageSizeReset: function(pageSize, opts) {
-    var options = _.defaults((opts || {}), {fetch: true});
-    this.paging.direction = undefined;
-    this.paging.pageSize = pageSize;
-    this.paging.params = this.paging.defaultParams;
-    this.paging.params.limit = pageSize;
-    this.updateUrlQuery(this.paging.params);
-    if (options.fetch) {
-      return this.fetch();
-    }
-  },
-
-  _parseQueryString: function(uri) {
-    var queryString = decodeURI(uri).split(/&/);
-
-    return _.reduce(queryString, function (parsedQuery, item) {
-        var nameValue = item.split(/=/);
-        if (nameValue.length === 2) {
-          parsedQuery[nameValue[0]] = nameValue[1];
-        }
-
-        return parsedQuery;
-    }, {});
-  },
-
-  _iterate: function(offset, opts) {
-    var options = _.defaults((opts || {}), {fetch: true});
-
-    this.paging.params = this.calculateParams(this.paging.params, offset, this.paging.pageSize);
-
-    // Fetch the next page of documents
-    this.updateUrlQuery(this.paging.params);
-    if (options.fetch) {
-      return this.fetch({reset: true});
-    }
-  },
-
-  // `next` is called with the number of items for the next page.
-  // It returns the fetch promise.
-  next: function(options) {
-    this.paging.direction = "next";
-    return this._iterate(this.paging.pageSize, options);
-  },
-
-  // `previous` is called with the number of items for the previous page.
-  // It returns the fetch promise.
-  previous: function(options) {
-    this.paging.direction = "previous";
-    return this._iterate(0 - this.paging.pageSize, options);
-  },
-
-  shouldStringify: function (val) {
-    try {
-      JSON.parse(val);
-      return false;
-    } catch (e) {
-      return true;
-    }
-  },
-
-  // Encodes the parameters so that couchdb will understand them
-  // and then sets the url with the new url.
-  updateUrlQuery: function (params) {
-    var url = _.result(this, "url").split("?")[0];
-
-    _.each(['startkey', 'endkey', 'key'], (key) => {
-      if (_.has(params, key) && this.shouldStringify(params[key])) {
-        params[key] = JSON.stringify(params[key]);
-      }
-    });
-
-    this.url = url + '?' + app.utils.queryParams(params);
-  },
-
-  fetch: function () {
-    // if this is a fetch for the first time, fetch one extra to see if there is a next
-    if (!this.paging.direction && this.paging.params.limit > 0) {
-      this.paging.direction = 'fetch';
-      this.paging.params.limit = this.paging.params.limit + 1;
-      this.updateUrlQuery(this.paging.params);
-    }
-
-    return Backbone.Collection.prototype.fetch.apply(this, arguments);
-  },
-
-  parse: function (resp) {
-    var rows = resp.rows;
-
-    this.paging.hasNext = this.paging.hasPrevious = false;
-
-    this.viewMeta = {
-      total_rows: resp.total_rows,
-      offset: resp.offset,
-      update_seq: resp.update_seq
-    };
-
-    if (this.paging.params.skip > 0) {
-      this.paging.hasPrevious = true;
-    }
-
-    if (rows.length === this.paging.pageSize + 1) {
-      this.paging.hasNext = true;
-
-      // remove the next page marker result
-      rows.pop();
-      this.viewMeta.total_rows = this.viewMeta.total_rows - 1;
-    }
-    return rows;
-  },
-
-  hasNext: function() {
-    return this.paging.hasNext;
-  },
-
-  hasPrevious: function() {
-    return this.paging.hasPrevious;
-  }
-});
-
-export default PagingCollection;
-
-
-//   if (exports) {
-//     // Overload the Backbone.ajax method, this allows PagingCollection to be able to
-//     // work in node.js
-//     exports.setAjax = function (ajax) {
-//       Backbone.ajax = ajax;
-//     };
-
-//     exports.PagingCollection = PagingCollection;
-//   }
-
-//   return PagingCollection;
-// }));
-
-
diff --git a/assets/js/plugins/prettify.js b/assets/js/plugins/prettify.js
deleted file mode 100644
index eef5ad7..0000000
--- a/assets/js/plugins/prettify.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
-(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
-[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
-f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
-(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
-{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
-t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
-"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
-l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
-q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
-q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
-"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
-a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
-for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
-m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
-a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
-j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
-"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
-H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
-J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
-I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
-["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
-/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
-["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
-hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
-!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
-250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
-PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
diff --git a/assets/less/animations.less b/assets/less/animations.less
deleted file mode 100644
index 0728dc5..0000000
--- a/assets/less/animations.less
+++ /dev/null
@@ -1,79 +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.
-
-.keyframes (@name, @fromRules, @toRules) {
-    @-webkit-keyframes ~'@{name}' { 0% { @fromRules(); } 100% { @toRules(); } }
-       @-moz-keyframes ~'@{name}' { 0% { @fromRules(); } 100% { @toRules(); } }
-            @keyframes ~'@{name}' { 0% { @fromRules(); } 100% { @toRules(); } }
-}
-
-.animation(@options) {
-  -webkit-animation: @options;
-  -moz-animation: @options;
-  animation: @options;
-}
-
-.fade {
-  transition: opacity .25s ease-in-out;
-  -moz-transition: opacity .25s ease-in-out;
-  -webkit-transition: opacity .25s ease-in-out;
-}
-
-.fadeIn {
-  opacity: 1;
-}
-
-.fadeOut {
-  opacity: 0;
-}
-
-@-webkit-keyframes errorBlinkBG {
-  from { background: @dangerRed; }
-  to { background: white; }
-}
-@keyframes errorBlinkBG {
-  from { background: @dangerRed; }
-  to { background: white; }
-}
-
-/* a generic slide-up/down effect that looks smooth for items with unknown heights */
-.keyframes(slideDown, {
-  opacity: 0;
-  max-height: 0;
-},
-{
-  opacity: 1;
-  max-height: 1000px;
-});
-
-.keyframes(slideUp, {
-  max-height: 1000px;
-  opacity: 1;
-},
-{
-  max-height: 0;
-  opacity: 0;
-});
-
-.highlight {
-  -webkit-animation: highlight-element 2.5s 1;
-  -moz-animation: highlight-element 2.5s 1;
-}
-
-@-webkit-keyframes highlight-element {
-  0% { background-color: @highlightEffectColor; }
-  100% { background-color: #f1f1f1; }
-}
-@-moz-keyframes highlight-element {
-  0% { background-color: @highlightEffectColor; }
-  100% { background-color: #f1f1f1; }
-}
diff --git a/assets/less/bootstrap/accordion.less b/assets/less/bootstrap/accordion.less
deleted file mode 100644
index d63523b..0000000
--- a/assets/less/bootstrap/accordion.less
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Accordion
-// --------------------------------------------------
-
-
-// Parent container
-.accordion {
-  margin-bottom: @baseLineHeight;
-}
-
-// Group == heading + body
-.accordion-group {
-  margin-bottom: 2px;
-  border: 1px solid #e5e5e5;
-  .border-radius(@baseBorderRadius);
-}
-.accordion-heading {
-  border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
-  display: block;
-  padding: 8px 15px;
-}
-
-// General toggle styles
-.accordion-toggle {
-  cursor: pointer;
-}
-
-// Inner needs the styles because you can't animate properly with any styles on the element
-.accordion-inner {
-  padding: 9px 15px;
-  border-top: 1px solid #e5e5e5;
-}
diff --git a/assets/less/bootstrap/alerts.less b/assets/less/bootstrap/alerts.less
deleted file mode 100644
index 0116b19..0000000
--- a/assets/less/bootstrap/alerts.less
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Alerts
-// --------------------------------------------------
-
-
-// Base styles
-// -------------------------
-
-.alert {
-  padding: 8px 35px 8px 14px;
-  margin-bottom: @baseLineHeight;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-  background-color: @warningBackground;
-  border: 1px solid @warningBorder;
-  .border-radius(@baseBorderRadius);
-}
-.alert,
-.alert h4 {
-  // Specified for the h4 to prevent conflicts of changing @headingsColor
-  color: @warningText;
-}
-.alert h4 {
-  margin: 0;
-}
-
-// Adjust close link position
-.alert .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  line-height: @baseLineHeight;
-}
-
-
-// Alternate styles
-// -------------------------
-
-.alert-success {
-  background-color: @successBackground;
-  border-color: @successBorder;
-  color: @successText;
-}
-.alert-success h4 {
-  color: @successText;
-}
-.alert-danger,
-.alert-error {
-  background-color: @errorBackground;
-  border-color: @errorBorder;
-  color: @errorText;
-}
-.alert-danger h4,
-.alert-error h4 {
-  color: @errorText;
-}
-.alert-info {
-  background-color: @infoBackground;
-  border-color: @infoBorder;
-  color: @infoText;
-}
-.alert-info h4 {
-  color: @infoText;
-}
-
-
-// Block alerts
-// -------------------------
-
-.alert-block {
-  padding-top: 14px;
-  padding-bottom: 14px;
-}
-.alert-block > p,
-.alert-block > ul {
-  margin-bottom: 0;
-}
-.alert-block p + p {
-  margin-top: 5px;
-}
diff --git a/assets/less/bootstrap/bootstrap.less b/assets/less/bootstrap/bootstrap.less
deleted file mode 100644
index 572fc38..0000000
--- a/assets/less/bootstrap/bootstrap.less
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
- * Bootstrap v2.3.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-// Core variables and mixins
-@import "mixins.less";
-
-// CSS Reset
-@import "reset.less";
-
-// Grid system and page structure
-@import "scaffolding.less";
-@import "grid.less";
-@import "layouts.less";
-
-// Base CSS
-@import "type.less";
-@import "code.less";
-@import "forms.less";
-@import "tables.less";
-
-// Components: common
-@import "font-awesome/font-awesome.less";
-@import "dropdowns.less";
-@import "wells.less";
-@import "component-animations.less";
-@import "close.less";
-
-// Components: Buttons & Alerts
-@import "buttons.less";
-@import "button-groups.less";
-@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
-
-// Components: Nav
-@import "navs.less";
-@import "navbar.less";
-@import "breadcrumbs.less";
-@import "pagination.less";
-@import "pager.less";
-
-// Components: Popovers
-@import "modals.less";
-@import "tooltip.less";
-@import "popovers.less";
-
-// Components: Misc
-@import "thumbnails.less";
-@import "media.less";
-@import "labels-badges.less";
-@import "progress-bars.less";
-@import "accordion.less";
-@import "carousel.less";
-@import "hero-unit.less";
-
-// Utility classes
-@import "utilities.less"; // Has to be last to override when necessary
diff --git a/assets/less/bootstrap/breadcrumbs.less b/assets/less/bootstrap/breadcrumbs.less
deleted file mode 100644
index f753df6..0000000
--- a/assets/less/bootstrap/breadcrumbs.less
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Breadcrumbs
-// --------------------------------------------------
-
-
-.breadcrumb {
-  padding: 8px 15px;
-  margin: 0 0 @baseLineHeight;
-  list-style: none;
-  background-color: #f5f5f5;
-  .border-radius(@baseBorderRadius);
-  > li {
-    display: inline-block;
-    .ie7-inline-block();
-    text-shadow: 0 1px 0 @white;
-    > .divider {
-      padding: 0 5px;
-      color: #ccc;
-    }
-  }
-  > .active {
-    color: @grayLight;
-  }
-}
diff --git a/assets/less/bootstrap/button-groups.less b/assets/less/bootstrap/button-groups.less
deleted file mode 100644
index 2f9dd6f..0000000
--- a/assets/less/bootstrap/button-groups.less
+++ /dev/null
@@ -1,222 +0,0 @@
-//
-// Button groups
-// --------------------------------------------------
-
-// Make the div behave like a button
-.btn-group {
-  position: relative;
-  display: inline-block;
-  .ie7-inline-block();
-  font-size: 0; // remove as part 1 of font-size inline-block hack
-  vertical-align: middle; // match .btn alignment given font-size hack above
-  white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page)
-  .ie7-restore-left-whitespace();
-}
-
-// Space out series of button groups
-.btn-group + .btn-group {
-  margin-left: 5px;
-}
-
-// Optional: Group multiple button groups together for a toolbar
-.btn-toolbar {
-  font-size: 0; // Hack to remove whitespace that results from using inline-block
-  margin-top: @baseLineHeight / 2;
-  margin-bottom: @baseLineHeight / 2;
-  > .btn + .btn,
-  > .btn-group + .btn,
-  > .btn + .btn-group {
-    margin-left: 5px;
-  }
-}
-
-// Float them, remove border radius, then re-add to first and last elements
-.btn-group > .btn {
-  position: relative;
-  .border-radius(0);
-}
-.btn-group > .btn + .btn {
-  margin-left: -1px;
-}
-.btn-group > .btn,
-.btn-group > .dropdown-menu,
-.btn-group > .popover {
-  font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack
-}
-
-// Reset fonts for other sizes
-.btn-group > .btn-mini {
-  font-size: @fontSizeMini;
-}
-.btn-group > .btn-small {
-  font-size: @fontSizeSmall;
-}
-.btn-group > .btn-large {
-  font-size: @fontSizeLarge;
-}
-
-// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
-.btn-group > .btn:first-child {
-  margin-left: 0;
-  .border-top-left-radius(@baseBorderRadius);
-  .border-bottom-left-radius(@baseBorderRadius);
-}
-// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
-  .border-top-right-radius(@baseBorderRadius);
-  .border-bottom-right-radius(@baseBorderRadius);
-}
-// Reset corners for large buttons
-.btn-group > .btn.large:first-child {
-  margin-left: 0;
-  .border-top-left-radius(@borderRadiusLarge);
-  .border-bottom-left-radius(@borderRadiusLarge);
-}
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
-  .border-top-right-radius(@borderRadiusLarge);
-  .border-bottom-right-radius(@borderRadiusLarge);
-}
-
-// On hover/focus/active, bring the proper btn to front
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active {
-  z-index: 2;
-}
-
-// On active and open, don't show outline
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-
-// Split button dropdowns
-// ----------------------
-
-// Give the line between buttons some depth
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-  .box-shadow(
-    ~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"
-  );
-  *padding-top: 5px;
-  *padding-bottom: 5px;
-}
-.btn-group > .btn-mini + .dropdown-toggle {
-  padding-left: 5px;
-  padding-right: 5px;
-  *padding-top: 2px;
-  *padding-bottom: 2px;
-}
-.btn-group > .btn-small + .dropdown-toggle {
-  *padding-top: 5px;
-  *padding-bottom: 4px;
-}
-.btn-group > .btn-large + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px;
-  *padding-top: 7px;
-  *padding-bottom: 7px;
-}
-
-.btn-group.open {
-  // The clickable button for toggling the menu
-  // Remove the gradient and set the same inset shadow as the :active state
-  .dropdown-toggle {
-    background-image: none;
-    .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)");
-  }
-
-  // Keep the hover's background when dropdown is open
-  .btn.dropdown-toggle {
-    background-color: @btnBackgroundHighlight;
-  }
-  .btn-primary.dropdown-toggle {
-    background-color: @btnPrimaryBackgroundHighlight;
-  }
-  .btn-warning.dropdown-toggle {
-    background-color: @btnWarningBackgroundHighlight;
-  }
-  .btn-danger.dropdown-toggle {
-    background-color: @btnDangerBackgroundHighlight;
-  }
-  .btn-success.dropdown-toggle {
-    background-color: @btnSuccessBackgroundHighlight;
-  }
-  .btn-secondary.dropdown-toggle {
-    background-color: @btnInfoBackgroundHighlight;
-  }
-  .btn-inverse.dropdown-toggle {
-    background-color: @btnInverseBackgroundHighlight;
-  }
-}
-
-// Reposition the caret
-.btn .caret {
-  margin-top: 8px;
-  margin-left: 0;
-}
-// Carets in other button sizes
-.btn-large .caret {
-  margin-top: 6px;
-}
-.btn-large .caret {
-  border-left-width: 5px;
-  border-right-width: 5px;
-  border-top-width: 5px;
-}
-.btn-mini .caret,
-.btn-small .caret {
-  margin-top: 8px;
-}
-// Upside down carets for .dropup
-.dropup .btn-large .caret {
-  border-bottom-width: 5px;
-}
-
-// Account for other colors
-.btn-primary,
-.btn-warning,
-.btn-danger,
-.btn-secondary,
-.btn-success,
-.btn-inverse {
-  .caret {
-    border-top-color: @white;
-    border-bottom-color: @white;
-  }
-}
-
-// Vertical button groups
-// ----------------------
-
-.btn-group-vertical {
-  display: inline-block; // makes buttons only take up the width they need
-  .ie7-inline-block();
-}
-.btn-group-vertical > .btn {
-  display: block;
-  float: none;
-  max-width: 100%;
-  .border-radius(0);
-}
-.btn-group-vertical > .btn + .btn {
-  margin-left: 0;
-  margin-top: -1px;
-}
-.btn-group-vertical > .btn:first-child {
-  .border-radius(@baseBorderRadius @baseBorderRadius 0 0);
-}
-.btn-group-vertical > .btn:last-child {
-  .border-radius(0 0 @baseBorderRadius @baseBorderRadius);
-}
-.btn-group-vertical > .btn-large:first-child {
-  .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0);
-}
-.btn-group-vertical > .btn-large:last-child {
-  .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge);
-}
diff --git a/assets/less/bootstrap/buttons.less b/assets/less/bootstrap/buttons.less
deleted file mode 100644
index 85d417c..0000000
--- a/assets/less/bootstrap/buttons.less
+++ /dev/null
@@ -1,228 +0,0 @@
-//
-// Buttons
-// --------------------------------------------------
-
-
-// Base styles
-// --------------------------------------------------
-
-// Core
-.btn {
-  display: inline-block;
-  .ie7-inline-block();
-  padding: 4px 12px;
-  margin-bottom: 0; // For input.btn
-  font-size: @baseFontSize;
-  line-height: @baseLineHeight;
-  text-align: center;
-  vertical-align: middle;
-  cursor: pointer;
-  .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75));
-  border: 1px solid @btnBorder;
-  *border: 0; // Remove the border to prevent IE7's black border on input:focus
-  border-bottom-color: darken(@btnBorder, 10%);
-  .border-radius(@baseBorderRadius);
-  .ie7-restore-left-whitespace(); // Give IE7 some love
-  .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
-
-  // Hover/focus state
-  &:hover,
-  &:focus {
-    color: @grayDark;
-    text-decoration: none;
-    background-position: 0 -15px;
-
-    // transition is only when going to hover/focus, otherwise the background
-    // behind the gradient (there for IE<=9 fallback) gets mismatched
-    .transition(background-position .1s linear);
-  }
-
-  // Focus state for keyboard and accessibility
-  &:focus {
-    .tab-focus();
-  }
-
-  // Active state
-  &.active,
-  &:active {
-    background-image: none;
-    outline: 0;
-    .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)");
-  }
-
-  // Disabled state
-  &.disabled,
-  &[disabled] {
-    cursor: default;
-    background-image: none;
-    .opacity(65);
-    .box-shadow(none);
-  }
-
-}
-
-
-
-// Button Sizes
-// --------------------------------------------------
-
-// Large
-.btn-large {
-  padding: @paddingLarge;
-  font-size: @fontSizeLarge;
-  .border-radius(@borderRadiusLarge);
-}
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
-  margin-top: 4px;
-}
-
-// Small
-.btn-small {
-  padding: @paddingSmall;
-  font-size: @fontSizeSmall;
-  .border-radius(@borderRadiusSmall);
-}
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
-  margin-top: -1px;
-}
-
-// Mini
-.btn-mini {
-  padding: @paddingMini;
-  font-size: @fontSizeMini;
-  .border-radius(@borderRadiusSmall);
-}
-
-
-// Block button
-// -------------------------
-
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-left: 0;
-  padding-right: 0;
-  .box-sizing(border-box);
-}
-
-// Vertically space out multiple block buttons
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-
-// Specificity overrides
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
-  &.btn-block {
-    width: 100%;
-  }
-}
-
-
-
-// Alternate buttons
-// --------------------------------------------------
-
-// Provide *some* extra contrast for those who can get it
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-secondary.active,
-.btn-inverse.active {
-  color: rgba(255,255,255,.75);
-}
-
-// Set the backgrounds
-// -------------------------
-.btn-primary {
-  .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight);
-}
-// Warning appears are orange
-.btn-warning {
-  .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight);
-}
-// Danger and error appear as red
-.btn-danger {
-  .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight);
-}
-// Success appears as green
-.btn-success {
-  .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight);
-}
-// Info appears as a neutral blue
-.btn-secondary {
-  .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight);
-}
-// Inverse appears as dark gray
-.btn-inverse {
-  .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight);
-}
-
-
-// Cross-browser Jank
-// --------------------------------------------------
-
-button.btn,
-input[type="submit"].btn {
-
-  // Firefox 3.6 only I believe
-  &::-moz-focus-inner {
-    padding: 0;
-    border: 0;
-  }
-
-  // IE7 has some default padding on button controls
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-
-  &.btn-large {
-    *padding-top: 7px;
-    *padding-bottom: 7px;
-  }
-  &.btn-small {
-    *padding-top: 3px;
-    *padding-bottom: 3px;
-  }
-  &.btn-mini {
-    *padding-top: 1px;
-    *padding-bottom: 1px;
-  }
-}
-
-
-// Link buttons
-// --------------------------------------------------
-
-// Make a button look and behave like a link
-.btn-link,
-.btn-link:active,
-.btn-link[disabled] {
-  background-color: transparent;
-  background-image: none;
-  .box-shadow(none);
-}
-.btn-link {
-  border-color: transparent;
-  cursor: pointer;
-  color: @linkColor;
-  .border-radius(0);
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: @linkColorHover;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-.btn-link[disabled]:focus {
-  color: @grayDark;
-  text-decoration: none;
-}
diff --git a/assets/less/bootstrap/carousel.less b/assets/less/bootstrap/carousel.less
deleted file mode 100644
index 55bc050..0000000
--- a/assets/less/bootstrap/carousel.less
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// Carousel
-// --------------------------------------------------
-
-
-.carousel {
-  position: relative;
-  margin-bottom: @baseLineHeight;
-  line-height: 1;
-}
-
-.carousel-inner {
-  overflow: hidden;
-  width: 100%;
-  position: relative;
-}
-
-.carousel-inner {
-
-  > .item {
-    display: none;
-    position: relative;
-    .transition(.6s ease-in-out left);
-
-    // Account for jankitude on images
-    > img,
-    > a > img {
-      display: block;
-      line-height: 1;
-    }
-  }
-
-  > .active,
-  > .next,
-  > .prev { display: block; }
-
-  > .active {
-    left: 0;
-  }
-
-  > .next,
-  > .prev {
-    position: absolute;
-    top: 0;
-    width: 100%;
-  }
-
-  > .next {
-    left: 100%;
-  }
-  > .prev {
-    left: -100%;
-  }
-  > .next.left,
-  > .prev.right {
-    left: 0;
-  }
-
-  > .active.left {
-    left: -100%;
-  }
-  > .active.right {
-    left: 100%;
-  }
-
-}
-
-// Left/right controls for nav
-// ---------------------------
-
-.carousel-control {
-  position: absolute;
-  top: 40%;
-  left: 15px;
-  width: 40px;
-  height: 40px;
-  margin-top: -20px;
-  font-size: 60px;
-  font-weight: 100;
-  line-height: 30px;
-  color: @white;
-  text-align: center;
-  background: @grayDarker;
-  border: 3px solid @white;
-  .border-radius(23px);
-  .opacity(50);
-
-  // we can't have this transition here
-  // because webkit cancels the carousel
-  // animation if you trip this while
-  // in the middle of another animation
-  // ;_;
-  // .transition(opacity .2s linear);
-
-  // Reposition the right one
-  &.right {
-    left: auto;
-    right: 15px;
-  }
-
-  // Hover/focus state
-  &:hover,
-  &:focus {
-    color: @white;
-    text-decoration: none;
-    .opacity(90);
-  }
-}
-
-// Carousel indicator pips
-// -----------------------------
-.carousel-indicators {
-  position: absolute;
-  top: 15px;
-  right: 15px;
-  z-index: 5;
-  margin: 0;
-  list-style: none;
-
-  li {
-    display: block;
-    float: left;
-    width: 10px;
-    height: 10px;
-    margin-left: 5px;
-    text-indent: -999px;
-    background-color: #ccc;
-    background-color: rgba(255,255,255,.25);
-    border-radius: 5px;
-  }
-  .active {
-    background-color: #fff;
-  }
-}
-
-// Caption for text below images
-// -----------------------------
-
-.carousel-caption {
-  position: absolute;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  padding: 15px;
-  background: @grayDark;
-  background: rgba(0,0,0,.75);
-}
-.carousel-caption h4,
-.carousel-caption p {
-  color: @white;
-  line-height: @baseLineHeight;
-}
-.carousel-caption h4 {
-  margin: 0 0 5px;
-}
-.carousel-caption p {
-  margin-bottom: 0;
-}
diff --git a/assets/less/bootstrap/close.less b/assets/less/bootstrap/close.less
deleted file mode 100644
index d3693d3..0000000
--- a/assets/less/bootstrap/close.less
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Close icons
-// --------------------------------------------------
-
-
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: @baseLineHeight;
-  color: #B9B9B9;
-  text-shadow: 0 1px 0 rgba(255,255,255,1);
-  &:hover,
-  &:focus {
-    color: @hoverHighlight;
-    text-decoration: none;
-    cursor: pointer
-  }
-}
-
-// Additional properties for button version
-// iOS requires the button element instead of an anchor tag.
-// If you want the anchor version, it requires `href="#"`.
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
diff --git a/assets/less/bootstrap/code.less b/assets/less/bootstrap/code.less
deleted file mode 100644
index 266a926..0000000
--- a/assets/less/bootstrap/code.less
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Code (inline and blocK)
-// --------------------------------------------------
-
-
-// Inline and block code styles
-code,
-pre {
-  padding: 0 3px 2px;
-  #font > #family > .monospace;
-  font-size: @baseFontSize - 2;
-  color: @grayDark;
-  .border-radius(3px);
-}
-
-// Inline code
-code {
-  padding: 2px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-  white-space: nowrap;
-}
-
-// Blocks of code
-pre {
-  display: block;
-  padding: (@baseLineHeight - 1) / 2;
-  margin: 0 0 @baseLineHeight / 2;
-  font-size: @baseFontSize - 1; // 14px to 13px
-  line-height: @baseLineHeight;
-  word-break: break-all;
-  word-wrap: break-word;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc; // fallback for IE7-8
-  border: 1px solid rgba(0,0,0,.15);
-  .border-radius(@baseBorderRadius);
-
-  // Make prettyprint styles more spaced out for readability
-  &.prettyprint {
-    margin-bottom: @baseLineHeight;
-  }
-
-  // Account for some code outputs that place code tags in pre tags
-  code {
-    padding: 0;
-    color: inherit;
-    white-space: pre;
-    white-space: pre-wrap;
-    background-color: transparent;
-    border: 0;
-  }
-}
-
-// Enable scrollable blocks of code
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
\ No newline at end of file
diff --git a/assets/less/bootstrap/component-animations.less b/assets/less/bootstrap/component-animations.less
deleted file mode 100644
index d614263..0000000
--- a/assets/less/bootstrap/component-animations.less
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-// Component animations
-// --------------------------------------------------
-
-
-.fade {
-  opacity: 0;
-  .transition(opacity .15s linear);
-  &.in {
-    opacity: 1;
-  }
-}
-
-.collapse {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  .transition(height .35s ease);
-  &.in {
-    height: auto;
-  }
-}
diff --git a/assets/less/bootstrap/dropdowns.less b/assets/less/bootstrap/dropdowns.less
deleted file mode 100644
index 0984bb1..0000000
--- a/assets/less/bootstrap/dropdowns.less
+++ /dev/null
@@ -1,274 +0,0 @@
-//
-// Dropdown menus
-// --------------------------------------------------
-
-
-// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns
-.dropup,
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle {
-  // The caret makes the toggle a bit too tall in IE7
-  *margin-bottom: -3px;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
-
-// Dropdown arrow/caret
-// --------------------
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  vertical-align: top;
-  border-top:   4px solid @black;
-  border-right: 4px solid transparent;
-  border-left:  4px solid transparent;
-  content: "";
-}
-
-// Place the caret
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-
-// The dropdown menu (ul)
-// ----------------------
-.dropdown-menu {
-
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: @zindexDropdown;
-  display: none; // none by default, but block on "open" of the menu
-  float: left;
-  min-width: 160px;
-  margin: 2px 0 0; // override default ul
-  list-style: none;
-  background-color: @brandDark1;
-  color: @navIconColor;
-  border: 1px solid #ccc; // Fallback for IE7-8
-  border: 1px solid @dropdownBorder;
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
-
-  // Aligns the dropdown menu to right
-  &.pull-right {
-    right: 0;
-    left: auto;
-  }
-  li.header-label{
-    background-color: @brandDark2;
-    color: #FFFFFF;
-    padding: 3px 20px;
-    font-size: 13px;
-  }
-  &.arrow {
-    &:before{
-      content: "";
-      display: block;
-      position: absolute;
-      border-style: solid;
-      top: -20px;
-      right: 10%;
-      width: 0;
-      height: 0;
-      margin-left: -10px;
-      border-left: 10px solid transparent;
-      border-right: 10px solid transparent;
-      border-bottom: 10px solid #2b2f33;
-      border-top: 10px solid transparent;
-    }
-  }
-  // Dividers (basically an hr) within the dropdown
-  .divider {
-    .nav-divider(@dropdownDividerTop, @dropdownDividerBottom);
-  }
-
-  // Links within the dropdown menu
-  > li > a {
-    &.icon:before{
-      padding-right: 5px;
-    }
-    font-size: 12px;
-    display: block;
-    padding: 3px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: @baseLineHeight;
-    color: @dropdownLinkColor;
-    white-space: nowrap;
-    border-bottom: 1px solid #1A1A1A;
-  }
-}
-
-// Hover/Focus state
-// -----------
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
-  text-decoration: none;
-  color: #fff;
-  //#gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
-}
-
-// Active state
-// ------------
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: @dropdownLinkColorActive;
-  text-decoration: none;
-  outline: 0;
-  #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%));
-}
-
-// Disabled state
-// --------------
-// Gray out text and ensure the hover/focus state remains gray
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: @grayLight;
-}
-// Nuke hover/focus effects
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none; // Remove CSS gradient
-  .reset-filter();
-  cursor: default;
-}
-
-// Open state for the dropdown
-// ---------------------------
-.open {
-  // IE7's z-index only goes to the nearest positioned ancestor, which would
-  // make the menu appear below buttons that appeared later on the page
-  *z-index: @zindexDropdown;
-
-  & > .dropdown-menu {
-    display: block;
-  }
-}
-
-// Backdrop to catch body clicks on mobile, etc.
-// ---------------------------
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: @zindexDropdown - 10;
-}
-
-// Right aligned dropdowns
-// ---------------------------
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-// ------------------------------------------------------
-// Just add .dropup after the standard .dropdown class and you're set, bro.
-// TODO: abstract this so that the navbar fixed styles are not placed here?
-.dropup,
-.navbar-fixed-bottom .dropdown {
-  // Reverse the caret
-  .caret {
-    border-top: 0;
-    border-bottom: 4px solid @black;
-    content: "";
-  }
-  // Different positioning for bottom up menu
-  .dropdown-menu {
-    top: auto;
-    bottom: 100%;
-    margin-bottom: 1px;
-  }
-}
-
-// Sub menus
-// ---------------------------
-.dropdown-submenu {
-  position: relative;
-}
-// Default dropdowns
-.dropdown-submenu > .dropdown-menu {
-  top: 0;
-  left: 100%;
-  margin-top: -6px;
-  margin-left: -1px;
-  .border-radius(0 6px 6px 6px);
-}
-.dropdown-submenu:hover > .dropdown-menu {
-  display: block;
-}
-
-// Dropups
-.dropup .dropdown-submenu > .dropdown-menu {
-  top: auto;
-  bottom: 0;
-  margin-top: 0;
-  margin-bottom: -2px;
-  .border-radius(5px 5px 5px 0);
-}
-
-// Caret to indicate there is a submenu
-.dropdown-submenu > a:after {
-  display: block;
-  content: " ";
-  float: right;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-  border-width: 5px 0 5px 5px;
-  border-left-color: darken(@dropdownBackground, 20%);
-  margin-top: 5px;
-  margin-right: -10px;
-}
-.dropdown-submenu:hover > a:after {
-  border-left-color: @dropdownLinkColorHover;
-}
-
-// Left aligned submenus
-.dropdown-submenu.pull-left {
-  // Undo the float
-  // Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere.
-  float: none;
-
-  // Positioning the submenu
-  > .dropdown-menu {
-    left: -100%;
-    margin-left: 10px;
-    .border-radius(6px 0 6px 6px);
-  }
-}
-
-// Tweak nav headers
-// -----------------
-// Increase padding from 15px to 20px on sides
-.dropdown .dropdown-menu .nav-header {
-  padding-left: 20px;
-  padding-right: 20px;
-}
-
-// Typeahead
-// ---------
-.typeahead {
-  z-index: 1051;
-  margin-top: 2px; // give it some space to breathe
-  .border-radius(@baseBorderRadius);
-}
diff --git a/assets/less/bootstrap/font-awesome/bootstrap.less b/assets/less/bootstrap/font-awesome/bootstrap.less
deleted file mode 100644
index a2c9604..0000000
--- a/assets/less/bootstrap/font-awesome/bootstrap.less
+++ /dev/null
@@ -1,84 +0,0 @@
-/* BOOTSTRAP SPECIFIC CLASSES
- * -------------------------- */
-
-/* Bootstrap 2.0 sprites.less reset */
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline;
-  width: auto;
-  height: auto;
-  line-height: normal;
-  vertical-align: baseline;
-  background-image: none;
-  background-position: 0% 0%;
-  background-repeat: repeat;
-  margin-top: 0;
-}
-
-/* more sprites.less reset */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"] {
-  background-image: none;
-}
-
-
-/* keeps Bootstrap styles with and without icons the same */
-.btn, .nav {
-  [class^="icon-"],
-  [class*=" icon-"] {
-//    display: inline;
-    &.icon-large { line-height: .9em; }
-    &.icon-spin { display: inline-block; }
-  }
-}
-.nav-tabs, .nav-pills {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &, &.icon-large { line-height: .9em; }
-  }
-}
-.btn {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.pull-left, &.pull-right {
-      &.icon-2x { margin-top: .18em; }
-    }
-    &.icon-spin.icon-large { line-height: .8em; }
-  }
-}
-.btn.btn-small {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.pull-left, &.pull-right {
-      &.icon-2x { margin-top: .25em; }
-    }
-  }
-}
-.btn.btn-large {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    margin-top: 0; // overrides bootstrap default
-    &.pull-left, &.pull-right {
-      &.icon-2x { margin-top: .05em; }
-    }
-    &.pull-left.icon-2x { margin-right: .2em; }
-    &.pull-right.icon-2x { margin-left: .2em; }
-  }
-}
-
-/* Fixes alignment in nav lists */
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  line-height: inherit;
-}
diff --git a/assets/less/bootstrap/font-awesome/core.less b/assets/less/bootstrap/font-awesome/core.less
deleted file mode 100644
index 1ef7e22..0000000
--- a/assets/less/bootstrap/font-awesome/core.less
+++ /dev/null
@@ -1,129 +0,0 @@
-/* FONT AWESOME CORE
- * -------------------------- */
-
-[class^="icon-"],
-[class*=" icon-"] {
-  .icon-FontAwesome();
-}
-
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
-  text-decoration: inherit;
-  display: inline-block;
-  speak: none;
-}
-
-/* makes the font 33% larger relative to the icon container */
-.icon-large:before {
-  vertical-align: -10%;
-  font-size: 4/3em;
-}
-
-/* makes sure icons active on rollover in links */
-a {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    display: inline;
-  }
-}
-
-/* increased font size for icon-large */
-[class^="icon-"],
-[class*=" icon-"] {
-  &.icon-fixed-width {
-    display: inline-block;
-    width: 16/14em;
-    text-align: right;
-    padding-right: 4/14em;
-    &.icon-large {
-      width: 20/14em;
-    }
-  }
-}
-
-.icons-ul {
-  margin-left: @icons-li-width;
-  list-style-type: none;
-
-  > li { position: relative; }
-
-  .icon-li {
-    position: absolute;
-    left: -@icons-li-width;
-    width: @icons-li-width;
-    text-align: center;
-    line-height: inherit;
-  }
-}
-
-// allows usage of the hide class directly on font awesome icons
-[class^="icon-"],
-[class*=" icon-"] {
-  &.hide {
-    display: none;
-  }
-}
-
-.icon-muted { color: @iconMuted; }
-.icon-light { color: @iconLight; }
-.icon-dark { color: @iconDark; }
-
-// Icon Borders
-// -------------------------
-
-.icon-border {
-  border: solid 1px @borderColor;
-  padding: .2em .25em .15em;
-  .border-radius(3px);
-}
-
-// Icon Sizes
-// -------------------------
-
-.icon-2x {
-  font-size: 2em;
-  &.icon-border {
-    border-width: 2px;
-    .border-radius(4px);
-  }
-}
-.icon-3x {
-  font-size: 3em;
-  &.icon-border {
-    border-width: 3px;
-    .border-radius(5px);
-  }
-}
-.icon-4x {
-  font-size: 4em;
-  &.icon-border {
-    border-width: 4px;
-    .border-radius(6px);
-  }
-}
-
-.icon-5x {
-  font-size: 5em;
-  &.icon-border {
-    border-width: 5px;
-    .border-radius(7px);
-  }
-}
-
-
-// Floats & Margins
-// -------------------------
-
-// Quick floats
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-[class^="icon-"],
-[class*=" icon-"] {
-  &.pull-left {
-    margin-right: .3em;
-  }
-  &.pull-right {
-    margin-left: .3em;
-  }
-}
diff --git a/assets/less/bootstrap/font-awesome/extras.less b/assets/less/bootstrap/font-awesome/extras.less
deleted file mode 100644
index c93c260..0000000
--- a/assets/less/bootstrap/font-awesome/extras.less
+++ /dev/null
@@ -1,93 +0,0 @@
-/* EXTRAS
- * -------------------------- */
-
-/* Stacked and layered icon */
-.icon-stack();
-
-/* Animated rotating icon */
-.icon-spin {
-  display: inline-block;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  -webkit-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-
-/* Prevent stack and spinners from being taken inline when inside a link */
-a .icon-stack,
-a .icon-spin {
-  display: inline-block;
-  text-decoration: none;
-}
-
-@-moz-keyframes spin {
-  0% { -moz-transform: rotate(0deg); }
-  100% { -moz-transform: rotate(359deg); }
-}
-@-webkit-keyframes spin {
-  0% { -webkit-transform: rotate(0deg); }
-  100% { -webkit-transform: rotate(359deg); }
-}
-@-o-keyframes spin {
-  0% { -o-transform: rotate(0deg); }
-  100% { -o-transform: rotate(359deg); }
-}
-@-ms-keyframes spin {
-  0% { -ms-transform: rotate(0deg); }
-  100% { -ms-transform: rotate(359deg); }
-}
-@keyframes spin {
-  0% { transform: rotate(0deg); }
-  100% { transform: rotate(359deg); }
-}
-
-/* Icon rotations and mirroring */
-.icon-rotate-90:before {
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-
-.icon-rotate-180:before {
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-
-.icon-rotate-270:before {
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-
-.icon-flip-horizontal:before {
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-
-.icon-flip-vertical:before {
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-
-/* ensure rotation occurs inside anchor tags */
-a {
-  .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical {
-    &:before { display: inline-block; }
-  }
-}
diff --git a/assets/less/bootstrap/font-awesome/font-awesome-ie7.less b/assets/less/bootstrap/font-awesome/font-awesome-ie7.less
deleted file mode 100644
index 6675c49..0000000
--- a/assets/less/bootstrap/font-awesome/font-awesome-ie7.less
+++ /dev/null
@@ -1,1953 +0,0 @@
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-
-.icon-large {
-  font-size: 4/3em;
-  margin-top: -4px;
-  padding-top: 3px;
-  margin-bottom: -4px;
-  padding-bottom: 3px;
-  vertical-align: middle;
-}
-
-.nav {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    vertical-align: inherit;
-    margin-top: -4px;
-    padding-top: 3px;
-    margin-bottom: -4px;
-    padding-bottom: 3px;
-    &.icon-large {
-      vertical-align: -25%;
-    }
-  }
-}
-
-.nav-pills, .nav-tabs {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.icon-large {
-      line-height: .75em;
-      margin-top: -7px;
-      padding-top: 5px;
-      margin-bottom: -5px;
-      padding-bottom: 4px;
-    }
-  }
-}
-
-.btn {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.pull-left, &.pull-right { vertical-align: inherit; }
-    &.icon-large {
-      margin-top: -.5em;
-    }
-  }
-}
-
-a [class^="icon-"],
-a [class*=" icon-"] {
-  cursor: pointer;
-}
-
-.ie7icon(@inner) { *zoom: ~"expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '@{inner}')"; }
-
-
-.icon-glass {
-  .ie7icon('&#xf000;');
-}
-
-
-.icon-music {
-  .ie7icon('&#xf001;');
-}
-
-
-.icon-search {
-  .ie7icon('&#xf002;');
-}
-
-
-.icon-envelope-alt {
-  .ie7icon('&#xf003;');
-}
-
-
-.icon-heart {
-  .ie7icon('&#xf004;');
-}
-
-
-.icon-star {
-  .ie7icon('&#xf005;');
-}
-
-
-.icon-star-empty {
-  .ie7icon('&#xf006;');
-}
-
-
-.icon-user {
-  .ie7icon('&#xf007;');
-}
-
-
-.icon-film {
-  .ie7icon('&#xf008;');
-}
-
-
-.icon-th-large {
-  .ie7icon('&#xf009;');
-}
-
-
-.icon-th {
-  .ie7icon('&#xf00a;');
-}
-
-
-.icon-th-list {
-  .ie7icon('&#xf00b;');
-}
-
-
-.icon-ok {
-  .ie7icon('&#xf00c;');
-}
-
-
-.icon-remove {
-  .ie7icon('&#xf00d;');
-}
-
-
-.icon-zoom-in {
-  .ie7icon('&#xf00e;');
-}
-
-
-.icon-zoom-out {
-  .ie7icon('&#xf010;');
-}
-
-
-.icon-off {
-  .ie7icon('&#xf011;');
-}
-
-.icon-power-off {
-  .ie7icon('&#xf011;');
-}
-
-
-.icon-signal {
-  .ie7icon('&#xf012;');
-}
-
-
-.icon-cog {
-  .ie7icon('&#xf013;');
-}
-
-.icon-gear {
-  .ie7icon('&#xf013;');
-}
-
-
-.icon-trash {
-  .ie7icon('&#xf014;');
-}
-
-
-.icon-home {
-  .ie7icon('&#xf015;');
-}
-
-
-.icon-file-alt {
-  .ie7icon('&#xf016;');
-}
-
-
-.icon-time {
-  .ie7icon('&#xf017;');
-}
-
-
-.icon-road {
-  .ie7icon('&#xf018;');
-}
-
-
-.icon-download-alt {
-  .ie7icon('&#xf019;');
-}
-
-
-.icon-download {
-  .ie7icon('&#xf01a;');
-}
-
-
-.icon-upload {
-  .ie7icon('&#xf01b;');
-}
-
-
-.icon-inbox {
-  .ie7icon('&#xf01c;');
-}
-
-
-.icon-play-circle {
-  .ie7icon('&#xf01d;');
-}
-
-
-.icon-repeat {
-  .ie7icon('&#xf01e;');
-}
-
-.icon-rotate-right {
-  .ie7icon('&#xf01e;');
-}
-
-
-.icon-refresh {
-  .ie7icon('&#xf021;');
-}
-
-
-.icon-list-alt {
-  .ie7icon('&#xf022;');
-}
-
-
-.icon-lock {
-  .ie7icon('&#xf023;');
-}
-
-
-.icon-flag {
-  .ie7icon('&#xf024;');
-}
-
-
-.icon-headphones {
-  .ie7icon('&#xf025;');
-}
-
-
-.icon-volume-off {
-  .ie7icon('&#xf026;');
-}
-
-
-.icon-volume-down {
-  .ie7icon('&#xf027;');
-}
-
-
-.icon-volume-up {
-  .ie7icon('&#xf028;');
-}
-
-
-.icon-qrcode {
-  .ie7icon('&#xf029;');
-}
-
-
-.icon-barcode {
-  .ie7icon('&#xf02a;');
-}
-
-
-.icon-tag {
-  .ie7icon('&#xf02b;');
-}
-
-
-.icon-tags {
-  .ie7icon('&#xf02c;');
-}
-
-
-.icon-book {
-  .ie7icon('&#xf02d;');
-}
-
-
-.icon-bookmark {
-  .ie7icon('&#xf02e;');
-}
-
-
-.icon-print {
-  .ie7icon('&#xf02f;');
-}
-
-
-.icon-camera {
-  .ie7icon('&#xf030;');
-}
-
-
-.icon-font {
-  .ie7icon('&#xf031;');
-}
-
-
-.icon-bold {
-  .ie7icon('&#xf032;');
-}
-
-
-.icon-italic {
-  .ie7icon('&#xf033;');
-}
-
-
-.icon-text-height {
-  .ie7icon('&#xf034;');
-}
-
-
-.icon-text-width {
-  .ie7icon('&#xf035;');
-}
-
-
-.icon-align-left {
-  .ie7icon('&#xf036;');
-}
-
-
-.icon-align-center {
-  .ie7icon('&#xf037;');
-}
-
-
-.icon-align-right {
-  .ie7icon('&#xf038;');
-}
-
-
-.icon-align-justify {
-  .ie7icon('&#xf039;');
-}
-
-
-.icon-list {
-  .ie7icon('&#xf03a;');
-}
-
-
-.icon-indent-left {
-  .ie7icon('&#xf03b;');
-}
-
-
-.icon-indent-right {
-  .ie7icon('&#xf03c;');
-}
-
-
-.icon-facetime-video {
-  .ie7icon('&#xf03d;');
-}
-
-
-.icon-picture {
-  .ie7icon('&#xf03e;');
-}
-
-
-.icon-pencil {
-  .ie7icon('&#xf040;');
-}
-
-
-.icon-map-marker {
-  .ie7icon('&#xf041;');
-}
-
-
-.icon-adjust {
-  .ie7icon('&#xf042;');
-}
-
-
-.icon-tint {
-  .ie7icon('&#xf043;');
-}
-
-
-.icon-edit {
-  .ie7icon('&#xf044;');
-}
-
-
-.icon-share {
-  .ie7icon('&#xf045;');
-}
-
-
-.icon-check {
-  .ie7icon('&#xf046;');
-}
-
-
-.icon-move {
-  .ie7icon('&#xf047;');
-}
-
-
-.icon-step-backward {
-  .ie7icon('&#xf048;');
-}
-
-
-.icon-fast-backward {
-  .ie7icon('&#xf049;');
-}
-
-
-.icon-backward {
-  .ie7icon('&#xf04a;');
-}
-
-
-.icon-play {
-  .ie7icon('&#xf04b;');
-}
-
-
-.icon-pause {
-  .ie7icon('&#xf04c;');
-}
-
-
-.icon-stop {
-  .ie7icon('&#xf04d;');
-}
-
-
-.icon-forward {
-  .ie7icon('&#xf04e;');
-}
-
-
-.icon-fast-forward {
-  .ie7icon('&#xf050;');
-}
-
-
-.icon-step-forward {
-  .ie7icon('&#xf051;');
-}
-
-
-.icon-eject {
-  .ie7icon('&#xf052;');
-}
-
-
-.icon-chevron-left {
-  .ie7icon('&#xf053;');
-}
-
-
-.icon-chevron-right {
-  .ie7icon('&#xf054;');
-}
-
-
-.icon-plus-sign {
-  .ie7icon('&#xf055;');
-}
-
-
-.icon-minus-sign {
-  .ie7icon('&#xf056;');
-}
-
-
-.icon-remove-sign {
-  .ie7icon('&#xf057;');
-}
-
-
-.icon-ok-sign {
-  .ie7icon('&#xf058;');
-}
-
-
-.icon-question-sign {
-  .ie7icon('&#xf059;');
-}
-
-
-.icon-info-sign {
-  .ie7icon('&#xf05a;');
-}
-
-
-.icon-screenshot {
-  .ie7icon('&#xf05b;');
-}
-
-
-.icon-remove-circle {
-  .ie7icon('&#xf05c;');
-}
-
-
-.icon-ok-circle {
-  .ie7icon('&#xf05d;');
-}
-
-
-.icon-ban-circle {
-  .ie7icon('&#xf05e;');
-}
-
-
-.icon-arrow-left {
-  .ie7icon('&#xf060;');
-}
-
-
-.icon-arrow-right {
-  .ie7icon('&#xf061;');
-}
-
-
-.icon-arrow-up {
-  .ie7icon('&#xf062;');
-}
-
-
-.icon-arrow-down {
-  .ie7icon('&#xf063;');
-}
-
-
-.icon-share-alt {
-  .ie7icon('&#xf064;');
-}
-
-.icon-mail-forward {
-  .ie7icon('&#xf064;');
-}
-
-
-.icon-resize-full {
-  .ie7icon('&#xf065;');
-}
-
-
-.icon-resize-small {
-  .ie7icon('&#xf066;');
-}
-
-
-.icon-plus {
-  .ie7icon('&#xf067;');
-}
-
-
-.icon-minus {
-  .ie7icon('&#xf068;');
-}
-
-
-.icon-asterisk {
-  .ie7icon('&#xf069;');
-}
-
-
-.icon-exclamation-sign {
-  .ie7icon('&#xf06a;');
-}
-
-
-.icon-gift {
-  .ie7icon('&#xf06b;');
-}
-
-
-.icon-leaf {
-  .ie7icon('&#xf06c;');
-}
-
-
-.icon-fire {
-  .ie7icon('&#xf06d;');
-}
-
-
-.icon-eye-open {
-  .ie7icon('&#xf06e;');
-}
-
-
-.icon-eye-close {
-  .ie7icon('&#xf070;');
-}
-
-
-.icon-warning-sign {
-  .ie7icon('&#xf071;');
-}
-
-
-.icon-plane {
-  .ie7icon('&#xf072;');
-}
-
-
-.icon-calendar {
-  .ie7icon('&#xf073;');
-}
-
-
-.icon-random {
-  .ie7icon('&#xf074;');
-}
-
-
-.icon-comment {
-  .ie7icon('&#xf075;');
-}
-
-
-.icon-magnet {
-  .ie7icon('&#xf076;');
-}
-
-
-.icon-chevron-up {
-  .ie7icon('&#xf077;');
-}
-
-
-.icon-chevron-down {
-  .ie7icon('&#xf078;');
-}
-
-
-.icon-retweet {
-  .ie7icon('&#xf079;');
-}
-
-
-.icon-shopping-cart {
-  .ie7icon('&#xf07a;');
-}
-
-
-.icon-folder-close {
-  .ie7icon('&#xf07b;');
-}
-
-
-.icon-folder-open {
-  .ie7icon('&#xf07c;');
-}
-
-
-.icon-resize-vertical {
-  .ie7icon('&#xf07d;');
-}
-
-
-.icon-resize-horizontal {
-  .ie7icon('&#xf07e;');
-}
-
-
-.icon-bar-chart {
-  .ie7icon('&#xf080;');
-}
-
-
-.icon-twitter-sign {
-  .ie7icon('&#xf081;');
-}
-
-
-.icon-facebook-sign {
-  .ie7icon('&#xf082;');
-}
-
-
-.icon-camera-retro {
-  .ie7icon('&#xf083;');
-}
-
-
-.icon-key {
-  .ie7icon('&#xf084;');
-}
-
-
-.icon-cogs {
-  .ie7icon('&#xf085;');
-}
-
-.icon-gears {
-  .ie7icon('&#xf085;');
-}
-
-
-.icon-comments {
-  .ie7icon('&#xf086;');
-}
-
-
-.icon-thumbs-up-alt {
-  .ie7icon('&#xf087;');
-}
-
-
-.icon-thumbs-down-alt {
-  .ie7icon('&#xf088;');
-}
-
-
-.icon-star-half {
-  .ie7icon('&#xf089;');
-}
-
-
-.icon-heart-empty {
-  .ie7icon('&#xf08a;');
-}
-
-
-.icon-signout {
-  .ie7icon('&#xf08b;');
-}
-
-
-.icon-linkedin-sign {
-  .ie7icon('&#xf08c;');
-}
-
-
-.icon-pushpin {
-  .ie7icon('&#xf08d;');
-}
-
-
-.icon-external-link {
-  .ie7icon('&#xf08e;');
-}
-
-
-.icon-signin {
-  .ie7icon('&#xf090;');
-}
-
-
-.icon-trophy {
-  .ie7icon('&#xf091;');
-}
-
-
-.icon-github-sign {
-  .ie7icon('&#xf092;');
-}
-
-
-.icon-upload-alt {
-  .ie7icon('&#xf093;');
-}
-
-
-.icon-lemon {
-  .ie7icon('&#xf094;');
-}
-
-
-.icon-phone {
-  .ie7icon('&#xf095;');
-}
-
-
-.icon-check-empty {
-  .ie7icon('&#xf096;');
-}
-
-.icon-unchecked {
-  .ie7icon('&#xf096;');
-}
-
-
-.icon-bookmark-empty {
-  .ie7icon('&#xf097;');
-}
-
-
-.icon-phone-sign {
-  .ie7icon('&#xf098;');
-}
-
-
-.icon-twitter {
-  .ie7icon('&#xf099;');
-}
-
-
-.icon-facebook {
-  .ie7icon('&#xf09a;');
-}
-
-
-.icon-github {
-  .ie7icon('&#xf09b;');
-}
-
-
-.icon-unlock {
-  .ie7icon('&#xf09c;');
-}
-
-
-.icon-credit-card {
-  .ie7icon('&#xf09d;');
-}
-
-
-.icon-rss {
-  .ie7icon('&#xf09e;');
-}
-
-
-.icon-hdd {
-  .ie7icon('&#xf0a0;');
-}
-
-
-.icon-bullhorn {
-  .ie7icon('&#xf0a1;');
-}
-
-
-.icon-bell {
-  .ie7icon('&#xf0a2;');
-}
-
-
-.icon-certificate {
-  .ie7icon('&#xf0a3;');
-}
-
-
-.icon-hand-right {
-  .ie7icon('&#xf0a4;');
-}
-
-
-.icon-hand-left {
-  .ie7icon('&#xf0a5;');
-}
-
-
-.icon-hand-up {
-  .ie7icon('&#xf0a6;');
-}
-
-
-.icon-hand-down {
-  .ie7icon('&#xf0a7;');
-}
-
-
-.icon-circle-arrow-left {
-  .ie7icon('&#xf0a8;');
-}
-
-
-.icon-circle-arrow-right {
-  .ie7icon('&#xf0a9;');
-}
-
-
-.icon-circle-arrow-up {
-  .ie7icon('&#xf0aa;');
-}
-
-
-.icon-circle-arrow-down {
-  .ie7icon('&#xf0ab;');
-}
-
-
-.icon-globe {
-  .ie7icon('&#xf0ac;');
-}
-
-
-.icon-wrench {
-  .ie7icon('&#xf0ad;');
-}
-
-
-.icon-tasks {
-  .ie7icon('&#xf0ae;');
-}
-
-
-.icon-filter {
-  .ie7icon('&#xf0b0;');
-}
-
-
-.icon-briefcase {
-  .ie7icon('&#xf0b1;');
-}
-
-
-.icon-fullscreen {
-  .ie7icon('&#xf0b2;');
-}
-
-
-.icon-group {
-  .ie7icon('&#xf0c0;');
-}
-
-
-.icon-link {
-  .ie7icon('&#xf0c1;');
-}
-
-
-.icon-cloud {
-  .ie7icon('&#xf0c2;');
-}
-
-
-.icon-beaker {
-  .ie7icon('&#xf0c3;');
-}
-
-
-.icon-cut {
-  .ie7icon('&#xf0c4;');
-}
-
-
-.icon-copy {
-  .ie7icon('&#xf0c5;');
-}
-
-
-.icon-paper-clip {
-  .ie7icon('&#xf0c6;');
-}
-
-.icon-paperclip {
-  .ie7icon('&#xf0c6;');
-}
-
-
-.icon-save {
-  .ie7icon('&#xf0c7;');
-}
-
-
-.icon-sign-blank {
-  .ie7icon('&#xf0c8;');
-}
-
-
-.icon-reorder {
-  .ie7icon('&#xf0c9;');
-}
-
-
-.icon-list-ul {
-  .ie7icon('&#xf0ca;');
-}
-
-
-.icon-list-ol {
-  .ie7icon('&#xf0cb;');
-}
-
-
-.icon-strikethrough {
-  .ie7icon('&#xf0cc;');
-}
-
-
-.icon-underline {
-  .ie7icon('&#xf0cd;');
-}
-
-
-.icon-table {
-  .ie7icon('&#xf0ce;');
-}
-
-
-.icon-magic {
-  .ie7icon('&#xf0d0;');
-}
-
-
-.icon-truck {
-  .ie7icon('&#xf0d1;');
-}
-
-
-.icon-pinterest {
-  .ie7icon('&#xf0d2;');
-}
-
-
-.icon-pinterest-sign {
-  .ie7icon('&#xf0d3;');
-}
-
-
-.icon-google-plus-sign {
-  .ie7icon('&#xf0d4;');
-}
-
-
-.icon-google-plus {
-  .ie7icon('&#xf0d5;');
-}
-
-
-.icon-money {
-  .ie7icon('&#xf0d6;');
-}
-
-
-.icon-caret-down {
-  .ie7icon('&#xf0d7;');
-}
-
-
-.icon-caret-up {
-  .ie7icon('&#xf0d8;');
-}
-
-
-.icon-caret-left {
-  .ie7icon('&#xf0d9;');
-}
-
-
-.icon-caret-right {
-  .ie7icon('&#xf0da;');
-}
-
-
-.icon-columns {
-  .ie7icon('&#xf0db;');
-}
-
-
-.icon-sort {
-  .ie7icon('&#xf0dc;');
-}
-
-
-.icon-sort-down {
-  .ie7icon('&#xf0dd;');
-}
-
-
-.icon-sort-up {
-  .ie7icon('&#xf0de;');
-}
-
-
-.icon-envelope {
-  .ie7icon('&#xf0e0;');
-}
-
-
-.icon-linkedin {
-  .ie7icon('&#xf0e1;');
-}
-
-
-.icon-undo {
-  .ie7icon('&#xf0e2;');
-}
-
-.icon-rotate-left {
-  .ie7icon('&#xf0e2;');
-}
-
-
-.icon-legal {
-  .ie7icon('&#xf0e3;');
-}
-
-
-.icon-dashboard {
-  .ie7icon('&#xf0e4;');
-}
-
-
-.icon-comment-alt {
-  .ie7icon('&#xf0e5;');
-}
-
-
-.icon-comments-alt {
-  .ie7icon('&#xf0e6;');
-}
-
-
-.icon-bolt {
-  .ie7icon('&#xf0e7;');
-}
-
-
-.icon-sitemap {
-  .ie7icon('&#xf0e8;');
-}
-
-
-.icon-umbrella {
-  .ie7icon('&#xf0e9;');
-}
-
-
-.icon-paste {
-  .ie7icon('&#xf0ea;');
-}
-
-
-.icon-lightbulb {
-  .ie7icon('&#xf0eb;');
-}
-
-
-.icon-exchange {
-  .ie7icon('&#xf0ec;');
-}
-
-
-.icon-cloud-download {
-  .ie7icon('&#xf0ed;');
-}
-
-
-.icon-cloud-upload {
-  .ie7icon('&#xf0ee;');
-}
-
-
-.icon-user-md {
-  .ie7icon('&#xf0f0;');
-}
-
-
-.icon-stethoscope {
-  .ie7icon('&#xf0f1;');
-}
-
-
-.icon-suitcase {
-  .ie7icon('&#xf0f2;');
-}
-
-
-.icon-bell-alt {
-  .ie7icon('&#xf0f3;');
-}
-
-
-.icon-coffee {
-  .ie7icon('&#xf0f4;');
-}
-
-
-.icon-food {
-  .ie7icon('&#xf0f5;');
-}
-
-
-.icon-file-text-alt {
-  .ie7icon('&#xf0f6;');
-}
-
-
-.icon-building {
-  .ie7icon('&#xf0f7;');
-}
-
-
-.icon-hospital {
-  .ie7icon('&#xf0f8;');
-}
-
-
-.icon-ambulance {
-  .ie7icon('&#xf0f9;');
-}
-
-
-.icon-medkit {
-  .ie7icon('&#xf0fa;');
-}
-
-
-.icon-fighter-jet {
-  .ie7icon('&#xf0fb;');
-}
-
-
-.icon-beer {
-  .ie7icon('&#xf0fc;');
-}
-
-
-.icon-h-sign {
-  .ie7icon('&#xf0fd;');
-}
-
-
-.icon-plus-sign-alt {
-  .ie7icon('&#xf0fe;');
-}
-
-
-.icon-double-angle-left {
-  .ie7icon('&#xf100;');
-}
-
-
-.icon-double-angle-right {
-  .ie7icon('&#xf101;');
-}
-
-
-.icon-double-angle-up {
-  .ie7icon('&#xf102;');
-}
-
-
-.icon-double-angle-down {
-  .ie7icon('&#xf103;');
-}
-
-
-.icon-angle-left {
-  .ie7icon('&#xf104;');
-}
-
-
-.icon-angle-right {
-  .ie7icon('&#xf105;');
-}
-
-
-.icon-angle-up {
-  .ie7icon('&#xf106;');
-}
-
-
-.icon-angle-down {
-  .ie7icon('&#xf107;');
-}
-
-
-.icon-desktop {
-  .ie7icon('&#xf108;');
-}
-
-
-.icon-laptop {
-  .ie7icon('&#xf109;');
-}
-
-
-.icon-tablet {
-  .ie7icon('&#xf10a;');
-}
-
-
-.icon-mobile-phone {
-  .ie7icon('&#xf10b;');
-}
-
-
-.icon-circle-blank {
-  .ie7icon('&#xf10c;');
-}
-
-
-.icon-quote-left {
-  .ie7icon('&#xf10d;');
-}
-
-
-.icon-quote-right {
-  .ie7icon('&#xf10e;');
-}
-
-
-.icon-spinner {
-  .ie7icon('&#xf110;');
-}
-
-
-.icon-circle {
-  .ie7icon('&#xf111;');
-}
-
-
-.icon-reply {
-  .ie7icon('&#xf112;');
-}
-
-.icon-mail-reply {
-  .ie7icon('&#xf112;');
-}
-
-
-.icon-github-alt {
-  .ie7icon('&#xf113;');
-}
-
-
-.icon-folder-close-alt {
-  .ie7icon('&#xf114;');
-}
-
-
-.icon-folder-open-alt {
-  .ie7icon('&#xf115;');
-}
-
-
-.icon-expand-alt {
-  .ie7icon('&#xf116;');
-}
-
-
-.icon-collapse-alt {
-  .ie7icon('&#xf117;');
-}
-
-
-.icon-smile {
-  .ie7icon('&#xf118;');
-}
-
-
-.icon-frown {
-  .ie7icon('&#xf119;');
-}
-
-
-.icon-meh {
-  .ie7icon('&#xf11a;');
-}
-
-
-.icon-gamepad {
-  .ie7icon('&#xf11b;');
-}
-
-
-.icon-keyboard {
-  .ie7icon('&#xf11c;');
-}
-
-
-.icon-flag-alt {
-  .ie7icon('&#xf11d;');
-}
-
-
-.icon-flag-checkered {
-  .ie7icon('&#xf11e;');
-}
-
-
-.icon-terminal {
-  .ie7icon('&#xf120;');
-}
-
-
-.icon-code {
-  .ie7icon('&#xf121;');
-}
-
-
-.icon-reply-all {
-  .ie7icon('&#xf122;');
-}
-
-
-.icon-mail-reply-all {
-  .ie7icon('&#xf122;');
-}
-
-
-.icon-star-half-empty {
-  .ie7icon('&#xf123;');
-}
-
-.icon-star-half-full {
-  .ie7icon('&#xf123;');
-}
-
-
-.icon-location-arrow {
-  .ie7icon('&#xf124;');
-}
-
-
-.icon-crop {
-  .ie7icon('&#xf125;');
-}
-
-
-.icon-code-fork {
-  .ie7icon('&#xf126;');
-}
-
-
-.icon-unlink {
-  .ie7icon('&#xf127;');
-}
-
-
-.icon-question {
-  .ie7icon('&#xf128;');
-}
-
-
-.icon-info {
-  .ie7icon('&#xf129;');
-}
-
-
-.icon-exclamation {
-  .ie7icon('&#xf12a;');
-}
-
-
-.icon-superscript {
-  .ie7icon('&#xf12b;');
-}
-
-
-.icon-subscript {
-  .ie7icon('&#xf12c;');
-}
-
-
-.icon-eraser {
-  .ie7icon('&#xf12d;');
-}
-
-
-.icon-puzzle-piece {
-  .ie7icon('&#xf12e;');
-}
-
-
-.icon-microphone {
-  .ie7icon('&#xf130;');
-}
-
-
-.icon-microphone-off {
-  .ie7icon('&#xf131;');
-}
-
-
-.icon-shield {
-  .ie7icon('&#xf132;');
-}
-
-
-.icon-calendar-empty {
-  .ie7icon('&#xf133;');
-}
-
-
-.icon-fire-extinguisher {
-  .ie7icon('&#xf134;');
-}
-
-
-.icon-rocket {
-  .ie7icon('&#xf135;');
-}
-
-
-.icon-maxcdn {
-  .ie7icon('&#xf136;');
-}
-
-
-.icon-chevron-sign-left {
-  .ie7icon('&#xf137;');
-}
-
-
-.icon-chevron-sign-right {
-  .ie7icon('&#xf138;');
-}
-
-
-.icon-chevron-sign-up {
-  .ie7icon('&#xf139;');
-}
-
-
-.icon-chevron-sign-down {
-  .ie7icon('&#xf13a;');
-}
-
-
-.icon-html5 {
-  .ie7icon('&#xf13b;');
-}
-
-
-.icon-css3 {
-  .ie7icon('&#xf13c;');
-}
-
-
-.icon-anchor {
-  .ie7icon('&#xf13d;');
-}
-
-
-.icon-unlock-alt {
-  .ie7icon('&#xf13e;');
-}
-
-
-.icon-bullseye {
-  .ie7icon('&#xf140;');
-}
-
-
-.icon-ellipsis-horizontal {
-  .ie7icon('&#xf141;');
-}
-
-
-.icon-ellipsis-vertical {
-  .ie7icon('&#xf142;');
-}
-
-
-.icon-rss-sign {
-  .ie7icon('&#xf143;');
-}
-
-
-.icon-play-sign {
-  .ie7icon('&#xf144;');
-}
-
-
-.icon-ticket {
-  .ie7icon('&#xf145;');
-}
-
-
-.icon-minus-sign-alt {
-  .ie7icon('&#xf146;');
-}
-
-
-.icon-check-minus {
-  .ie7icon('&#xf147;');
-}
-
-
-.icon-level-up {
-  .ie7icon('&#xf148;');
-}
-
-
-.icon-level-down {
-  .ie7icon('&#xf149;');
-}
-
-
-.icon-check-sign {
-  .ie7icon('&#xf14a;');
-}
-
-
-.icon-edit-sign {
-  .ie7icon('&#xf14b;');
-}
-
-
-.icon-external-link-sign {
-  .ie7icon('&#xf14c;');
-}
-
-
-.icon-share-sign {
-  .ie7icon('&#xf14d;');
-}
-
-
-.icon-compass {
-  .ie7icon('&#xf14e;');
-}
-
-
-.icon-collapse {
-  .ie7icon('&#xf150;');
-}
-
-
-.icon-collapse-top {
-  .ie7icon('&#xf151;');
-}
-
-
-.icon-expand {
-  .ie7icon('&#xf152;');
-}
-
-
-.icon-eur {
-  .ie7icon('&#xf153;');
-}
-
-.icon-euro {
-  .ie7icon('&#xf153;');
-}
-
-
-.icon-gbp {
-  .ie7icon('&#xf154;');
-}
-
-
-.icon-usd {
-  .ie7icon('&#xf155;');
-}
-
-.icon-dollar {
-  .ie7icon('&#xf155;');
-}
-
-
-.icon-inr {
-  .ie7icon('&#xf156;');
-}
-
-.icon-rupee {
-  .ie7icon('&#xf156;');
-}
-
-
-.icon-jpy {
-  .ie7icon('&#xf157;');
-}
-
-.icon-yen {
-  .ie7icon('&#xf157;');
-}
-
-
-.icon-cny {
-  .ie7icon('&#xf158;');
-}
-
-.icon-renminbi {
-  .ie7icon('&#xf158;');
-}
-
-
-.icon-krw {
-  .ie7icon('&#xf159;');
-}
-
-.icon-won {
-  .ie7icon('&#xf159;');
-}
-
-
-.icon-btc {
-  .ie7icon('&#xf15a;');
-}
-
-.icon-bitcoin {
-  .ie7icon('&#xf15a;');
-}
-
-
-.icon-file {
-  .ie7icon('&#xf15b;');
-}
-
-
-.icon-file-text {
-  .ie7icon('&#xf15c;');
-}
-
-
-.icon-sort-by-alphabet {
-  .ie7icon('&#xf15d;');
-}
-
-
-.icon-sort-by-alphabet-alt {
-  .ie7icon('&#xf15e;');
-}
-
-
-.icon-sort-by-attributes {
-  .ie7icon('&#xf160;');
-}
-
-
-.icon-sort-by-attributes-alt {
-  .ie7icon('&#xf161;');
-}
-
-
-.icon-sort-by-order {
-  .ie7icon('&#xf162;');
-}
-
-
-.icon-sort-by-order-alt {
-  .ie7icon('&#xf163;');
-}
-
-
-.icon-thumbs-up {
-  .ie7icon('&#xf164;');
-}
-
-
-.icon-thumbs-down {
-  .ie7icon('&#xf165;');
-}
-
-
-.icon-youtube-sign {
-  .ie7icon('&#xf166;');
-}
-
-
-.icon-youtube {
-  .ie7icon('&#xf167;');
-}
-
-
-.icon-xing {
-  .ie7icon('&#xf168;');
-}
-
-
-.icon-xing-sign {
-  .ie7icon('&#xf169;');
-}
-
-
-.icon-youtube-play {
-  .ie7icon('&#xf16a;');
-}
-
-
-.icon-dropbox {
-  .ie7icon('&#xf16b;');
-}
-
-
-.icon-stackexchange {
-  .ie7icon('&#xf16c;');
-}
-
-
-.icon-instagram {
-  .ie7icon('&#xf16d;');
-}
-
-
-.icon-flickr {
-  .ie7icon('&#xf16e;');
-}
-
-
-.icon-adn {
-  .ie7icon('&#xf170;');
-}
-
-
-.icon-bitbucket {
-  .ie7icon('&#xf171;');
-}
-
-
-.icon-bitbucket-sign {
-  .ie7icon('&#xf172;');
-}
-
-
-.icon-tumblr {
-  .ie7icon('&#xf173;');
-}
-
-
-.icon-tumblr-sign {
-  .ie7icon('&#xf174;');
-}
-
-
-.icon-long-arrow-down {
-  .ie7icon('&#xf175;');
-}
-
-
-.icon-long-arrow-up {
-  .ie7icon('&#xf176;');
-}
-
-
-.icon-long-arrow-left {
-  .ie7icon('&#xf177;');
-}
-
-
-.icon-long-arrow-right {
-  .ie7icon('&#xf178;');
-}
-
-
-.icon-apple {
-  .ie7icon('&#xf179;');
-}
-
-
-.icon-windows {
-  .ie7icon('&#xf17a;');
-}
-
-
-.icon-android {
-  .ie7icon('&#xf17b;');
-}
-
-
-.icon-linux {
-  .ie7icon('&#xf17c;');
-}
-
-
-.icon-dribbble {
-  .ie7icon('&#xf17d;');
-}
-
-
-.icon-skype {
-  .ie7icon('&#xf17e;');
-}
-
-
-.icon-foursquare {
-  .ie7icon('&#xf180;');
-}
-
-
-.icon-trello {
-  .ie7icon('&#xf181;');
-}
-
-
-.icon-female {
-  .ie7icon('&#xf182;');
-}
-
-
-.icon-male {
-  .ie7icon('&#xf183;');
-}
-
-
-.icon-gittip {
-  .ie7icon('&#xf184;');
-}
-
-
-.icon-sun {
-  .ie7icon('&#xf185;');
-}
-
-
-.icon-moon {
-  .ie7icon('&#xf186;');
-}
-
-
-.icon-archive {
-  .ie7icon('&#xf187;');
-}
-
-
-.icon-bug {
-  .ie7icon('&#xf188;');
-}
-
-
-.icon-vk {
-  .ie7icon('&#xf189;');
-}
-
-
-.icon-weibo {
-  .ie7icon('&#xf18a;');
-}
-
-
-.icon-renren {
-  .ie7icon('&#xf18b;');
-}
-
-
diff --git a/assets/less/bootstrap/font-awesome/font-awesome.less b/assets/less/bootstrap/font-awesome/font-awesome.less
deleted file mode 100644
index 0f45461..0000000
--- a/assets/less/bootstrap/font-awesome/font-awesome.less
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-
-@import "variables.less";
-@import "mixins.less";
-@import "path.less";
-@import "core.less";
-@import "bootstrap.less";
-@import "extras.less";
-@import "icons.less";
diff --git a/assets/less/bootstrap/font-awesome/icons.less b/assets/less/bootstrap/font-awesome/icons.less
deleted file mode 100644
index 476d201..0000000
--- a/assets/less/bootstrap/font-awesome/icons.less
+++ /dev/null
@@ -1,381 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-
-.icon-glass:before { content: @glass; }
-.icon-music:before { content: @music; }
-.icon-search:before { content: @search; }
-.icon-envelope-alt:before { content: @envelope-alt; }
-.icon-heart:before { content: @heart; }
-.icon-star:before { content: @star; }
-.icon-star-empty:before { content: @star-empty; }
-.icon-user:before { content: @user; }
-.icon-film:before { content: @film; }
-.icon-th-large:before { content: @th-large; }
-.icon-th:before { content: @th; }
-.icon-th-list:before { content: @th-list; }
-.icon-ok:before { content: @ok; }
-.icon-remove:before { content: @remove; }
-.icon-zoom-in:before { content: @zoom-in; }
-.icon-zoom-out:before { content: @zoom-out; }
-.icon-power-off:before,
-.icon-off:before { content: @off; }
-.icon-signal:before { content: @signal; }
-.icon-gear:before,
-.icon-cog:before { content: @cog; }
-.icon-trash:before { content: @trash; }
-.icon-home:before { content: @home; }
-.icon-file-alt:before { content: @file-alt; }
-.icon-time:before { content: @time; }
-.icon-road:before { content: @road; }
-.icon-download-alt:before { content: @download-alt; }
-.icon-download:before { content: @download; }
-.icon-upload:before { content: @upload; }
-.icon-inbox:before { content: @inbox; }
-.icon-play-circle:before { content: @play-circle; }
-.icon-rotate-right:before,
-.icon-repeat:before { content: @repeat; }
-.icon-refresh:before { content: @refresh; }
-.icon-list-alt:before { content: @list-alt; }
-.icon-lock:before { content: @lock; }
-.icon-flag:before { content: @flag; }
-.icon-headphones:before { content: @headphones; }
-.icon-volume-off:before { content: @volume-off; }
-.icon-volume-down:before { content: @volume-down; }
-.icon-volume-up:before { content: @volume-up; }
-.icon-qrcode:before { content: @qrcode; }
-.icon-barcode:before { content: @barcode; }
-.icon-tag:before { content: @tag; }
-.icon-tags:before { content: @tags; }
-.icon-book:before { content: @book; }
-.icon-bookmark:before { content: @bookmark; }
-.icon-print:before { content: @print; }
-.icon-camera:before { content: @camera; }
-.icon-font:before { content: @font; }
-.icon-bold:before { content: @bold; }
-.icon-italic:before { content: @italic; }
-.icon-text-height:before { content: @text-height; }
-.icon-text-width:before { content: @text-width; }
-.icon-align-left:before { content: @align-left; }
-.icon-align-center:before { content: @align-center; }
-.icon-align-right:before { content: @align-right; }
-.icon-align-justify:before { content: @align-justify; }
-.icon-list:before { content: @list; }
-.icon-indent-left:before { content: @indent-left; }
-.icon-indent-right:before { content: @indent-right; }
-.icon-facetime-video:before { content: @facetime-video; }
-.icon-picture:before { content: @picture; }
-.icon-pencil:before { content: @pencil; }
-.icon-map-marker:before { content: @map-marker; }
-.icon-adjust:before { content: @adjust; }
-.icon-tint:before { content: @tint; }
-.icon-edit:before { content: @edit; }
-.icon-share:before { content: @share; }
-.icon-check:before { content: @check; }
-.icon-move:before { content: @move; }
-.icon-step-backward:before { content: @step-backward; }
-.icon-fast-backward:before { content: @fast-backward; }
-.icon-backward:before { content: @backward; }
-.icon-play:before { content: @play; }
-.icon-pause:before { content: @pause; }
-.icon-stop:before { content: @stop; }
-.icon-forward:before { content: @forward; }
-.icon-fast-forward:before { content: @fast-forward; }
-.icon-step-forward:before { content: @step-forward; }
-.icon-eject:before { content: @eject; }
-.icon-chevron-left:before { content: @chevron-left; }
-.icon-chevron-right:before { content: @chevron-right; }
-.icon-plus-sign:before { content: @plus-sign; }
-.icon-minus-sign:before { content: @minus-sign; }
-.icon-remove-sign:before { content: @remove-sign; }
-.icon-ok-sign:before { content: @ok-sign; }
-.icon-question-sign:before { content: @question-sign; }
-.icon-info-sign:before { content: @info-sign; }
-.icon-screenshot:before { content: @screenshot; }
-.icon-remove-circle:before { content: @remove-circle; }
-.icon-ok-circle:before { content: @ok-circle; }
-.icon-ban-circle:before { content: @ban-circle; }
-.icon-arrow-left:before { content: @arrow-left; }
-.icon-arrow-right:before { content: @arrow-right; }
-.icon-arrow-up:before { content: @arrow-up; }
-.icon-arrow-down:before { content: @arrow-down; }
-.icon-mail-forward:before,
-.icon-share-alt:before { content: @share-alt; }
-.icon-resize-full:before { content: @resize-full; }
-.icon-resize-small:before { content: @resize-small; }
-.icon-plus:before { content: @plus; }
-.icon-minus:before { content: @minus; }
-.icon-asterisk:before { content: @asterisk; }
-.icon-exclamation-sign:before { content: @exclamation-sign; }
-.icon-gift:before { content: @gift; }
-.icon-leaf:before { content: @leaf; }
-.icon-fire:before { content: @fire; }
-.icon-eye-open:before { content: @eye-open; }
-.icon-eye-close:before { content: @eye-close; }
-.icon-warning-sign:before { content: @warning-sign; }
-.icon-plane:before { content: @plane; }
-.icon-calendar:before { content: @calendar; }
-.icon-random:before { content: @random; }
-.icon-comment:before { content: @comment; }
-.icon-magnet:before { content: @magnet; }
-.icon-chevron-up:before { content: @chevron-up; }
-.icon-chevron-down:before { content: @chevron-down; }
-.icon-retweet:before { content: @retweet; }
-.icon-shopping-cart:before { content: @shopping-cart; }
-.icon-folder-close:before { content: @folder-close; }
-.icon-folder-open:before { content: @folder-open; }
-.icon-resize-vertical:before { content: @resize-vertical; }
-.icon-resize-horizontal:before { content: @resize-horizontal; }
-.icon-bar-chart:before { content: @bar-chart; }
-.icon-twitter-sign:before { content: @twitter-sign; }
-.icon-facebook-sign:before { content: @facebook-sign; }
-.icon-camera-retro:before { content: @camera-retro; }
-.icon-key:before { content: @key; }
-.icon-gears:before,
-.icon-cogs:before { content: @cogs; }
-.icon-comments:before { content: @comments; }
-.icon-thumbs-up-alt:before { content: @thumbs-up-alt; }
-.icon-thumbs-down-alt:before { content: @thumbs-down-alt; }
-.icon-star-half:before { content: @star-half; }
-.icon-heart-empty:before { content: @heart-empty; }
-.icon-signout:before { content: @signout; }
-.icon-linkedin-sign:before { content: @linkedin-sign; }
-.icon-pushpin:before { content: @pushpin; }
-.icon-external-link:before { content: @external-link; }
-.icon-signin:before { content: @signin; }
-.icon-trophy:before { content: @trophy; }
-.icon-github-sign:before { content: @github-sign; }
-.icon-upload-alt:before { content: @upload-alt; }
-.icon-lemon:before { content: @lemon; }
-.icon-phone:before { content: @phone; }
-.icon-unchecked:before,
-.icon-check-empty:before { content: @check-empty; }
-.icon-bookmark-empty:before { content: @bookmark-empty; }
-.icon-phone-sign:before { content: @phone-sign; }
-.icon-twitter:before { content: @twitter; }
-.icon-facebook:before { content: @facebook; }
-.icon-github:before { content: @github; }
-.icon-unlock:before { content: @unlock; }
-.icon-credit-card:before { content: @credit-card; }
-.icon-rss:before { content: @rss; }
-.icon-hdd:before { content: @hdd; }
-.icon-bullhorn:before { content: @bullhorn; }
-.icon-bell:before { content: @bell; }
-.icon-certificate:before { content: @certificate; }
-.icon-hand-right:before { content: @hand-right; }
-.icon-hand-left:before { content: @hand-left; }
-.icon-hand-up:before { content: @hand-up; }
-.icon-hand-down:before { content: @hand-down; }
-.icon-circle-arrow-left:before { content: @circle-arrow-left; }
-.icon-circle-arrow-right:before { content: @circle-arrow-right; }
-.icon-circle-arrow-up:before { content: @circle-arrow-up; }
-.icon-circle-arrow-down:before { content: @circle-arrow-down; }
-.icon-globe:before { content: @globe; }
-.icon-wrench:before { content: @wrench; }
-.icon-tasks:before { content: @tasks; }
-.icon-filter:before { content: @filter; }
-.icon-briefcase:before { content: @briefcase; }
-.icon-fullscreen:before { content: @fullscreen; }
-.icon-group:before { content: @group; }
-.icon-link:before { content: @link; }
-.icon-cloud:before { content: @cloud; }
-.icon-beaker:before { content: @beaker; }
-.icon-cut:before { content: @cut; }
-.icon-copy:before { content: @copy; }
-.icon-paperclip:before,
-.icon-paper-clip:before { content: @paper-clip; }
-.icon-save:before { content: @save; }
-.icon-sign-blank:before { content: @sign-blank; }
-.icon-reorder:before { content: @reorder; }
-.icon-list-ul:before { content: @list-ul; }
-.icon-list-ol:before { content: @list-ol; }
-.icon-strikethrough:before { content: @strikethrough; }
-.icon-underline:before { content: @underline; }
-.icon-table:before { content: @table; }
-.icon-magic:before { content: @magic; }
-.icon-truck:before { content: @truck; }
-.icon-pinterest:before { content: @pinterest; }
-.icon-pinterest-sign:before { content: @pinterest-sign; }
-.icon-google-plus-sign:before { content: @google-plus-sign; }
-.icon-google-plus:before { content: @google-plus; }
-.icon-money:before { content: @money; }
-.icon-caret-down:before { content: @caret-down; }
-.icon-caret-up:before { content: @caret-up; }
-.icon-caret-left:before { content: @caret-left; }
-.icon-caret-right:before { content: @caret-right; }
-.icon-columns:before { content: @columns; }
-.icon-sort:before { content: @sort; }
-.icon-sort-down:before { content: @sort-down; }
-.icon-sort-up:before { content: @sort-up; }
-.icon-envelope:before { content: @envelope; }
-.icon-linkedin:before { content: @linkedin; }
-.icon-rotate-left:before,
-.icon-undo:before { content: @undo; }
-.icon-legal:before { content: @legal; }
-.icon-dashboard:before { content: @dashboard; }
-.icon-comment-alt:before { content: @comment-alt; }
-.icon-comments-alt:before { content: @comments-alt; }
-.icon-bolt:before { content: @bolt; }
-.icon-sitemap:before { content: @sitemap; }
-.icon-umbrella:before { content: @umbrella; }
-.icon-paste:before { content: @paste; }
-.icon-lightbulb:before { content: @lightbulb; }
-.icon-exchange:before { content: @exchange; }
-.icon-cloud-download:before { content: @cloud-download; }
-.icon-cloud-upload:before { content: @cloud-upload; }
-.icon-user-md:before { content: @user-md; }
-.icon-stethoscope:before { content: @stethoscope; }
-.icon-suitcase:before { content: @suitcase; }
-.icon-bell-alt:before { content: @bell-alt; }
-.icon-coffee:before { content: @coffee; }
-.icon-food:before { content: @food; }
-.icon-file-text-alt:before { content: @file-text-alt; }
-.icon-building:before { content: @building; }
-.icon-hospital:before { content: @hospital; }
-.icon-ambulance:before { content: @ambulance; }
-.icon-medkit:before { content: @medkit; }
-.icon-fighter-jet:before { content: @fighter-jet; }
-.icon-beer:before { content: @beer; }
-.icon-h-sign:before { content: @h-sign; }
-.icon-plus-sign-alt:before { content: @plus-sign-alt; }
-.icon-double-angle-left:before { content: @double-angle-left; }
-.icon-double-angle-right:before { content: @double-angle-right; }
-.icon-double-angle-up:before { content: @double-angle-up; }
-.icon-double-angle-down:before { content: @double-angle-down; }
-.icon-angle-left:before { content: @angle-left; }
-.icon-angle-right:before { content: @angle-right; }
-.icon-angle-up:before { content: @angle-up; }
-.icon-angle-down:before { content: @angle-down; }
-.icon-desktop:before { content: @desktop; }
-.icon-laptop:before { content: @laptop; }
-.icon-tablet:before { content: @tablet; }
-.icon-mobile-phone:before { content: @mobile-phone; }
-.icon-circle-blank:before { content: @circle-blank; }
-.icon-quote-left:before { content: @quote-left; }
-.icon-quote-right:before { content: @quote-right; }
-.icon-spinner:before { content: @spinner; }
-.icon-circle:before { content: @circle; }
-.icon-mail-reply:before,
-.icon-reply:before { content: @reply; }
-.icon-github-alt:before { content: @github-alt; }
-.icon-folder-close-alt:before { content: @folder-close-alt; }
-.icon-folder-open-alt:before { content: @folder-open-alt; }
-.icon-expand-alt:before { content: @expand-alt; }
-.icon-collapse-alt:before { content: @collapse-alt; }
-.icon-smile:before { content: @smile; }
-.icon-frown:before { content: @frown; }
-.icon-meh:before { content: @meh; }
-.icon-gamepad:before { content: @gamepad; }
-.icon-keyboard:before { content: @keyboard; }
-.icon-flag-alt:before { content: @flag-alt; }
-.icon-flag-checkered:before { content: @flag-checkered; }
-.icon-terminal:before { content: @terminal; }
-.icon-code:before { content: @code; }
-.icon-reply-all:before { content: @reply-all; }
-.icon-mail-reply-all:before { content: @mail-reply-all; }
-.icon-star-half-full:before,
-.icon-star-half-empty:before { content: @star-half-empty; }
-.icon-location-arrow:before { content: @location-arrow; }
-.icon-crop:before { content: @crop; }
-.icon-code-fork:before { content: @code-fork; }
-.icon-unlink:before { content: @unlink; }
-.icon-question:before { content: @question; }
-.icon-info:before { content: @info; }
-.icon-exclamation:before { content: @exclamation; }
-.icon-superscript:before { content: @superscript; }
-.icon-subscript:before { content: @subscript; }
-.icon-eraser:before { content: @eraser; }
-.icon-puzzle-piece:before { content: @puzzle-piece; }
-.icon-microphone:before { content: @microphone; }
-.icon-microphone-off:before { content: @microphone-off; }
-.icon-shield:before { content: @shield; }
-.icon-calendar-empty:before { content: @calendar-empty; }
-.icon-fire-extinguisher:before { content: @fire-extinguisher; }
-.icon-rocket:before { content: @rocket; }
-.icon-maxcdn:before { content: @maxcdn; }
-.icon-chevron-sign-left:before { content: @chevron-sign-left; }
-.icon-chevron-sign-right:before { content: @chevron-sign-right; }
-.icon-chevron-sign-up:before { content: @chevron-sign-up; }
-.icon-chevron-sign-down:before { content: @chevron-sign-down; }
-.icon-html5:before { content: @html5; }
-.icon-css3:before { content: @css3; }
-.icon-anchor:before { content: @anchor; }
-.icon-unlock-alt:before { content: @unlock-alt; }
-.icon-bullseye:before { content: @bullseye; }
-.icon-ellipsis-horizontal:before { content: @ellipsis-horizontal; }
-.icon-ellipsis-vertical:before { content: @ellipsis-vertical; }
-.icon-rss-sign:before { content: @rss-sign; }
-.icon-play-sign:before { content: @play-sign; }
-.icon-ticket:before { content: @ticket; }
-.icon-minus-sign-alt:before { content: @minus-sign-alt; }
-.icon-check-minus:before { content: @check-minus; }
-.icon-level-up:before { content: @level-up; }
-.icon-level-down:before { content: @level-down; }
-.icon-check-sign:before { content: @check-sign; }
-.icon-edit-sign:before { content: @edit-sign; }
-.icon-external-link-sign:before { content: @external-link-sign; }
-.icon-share-sign:before { content: @share-sign; }
-.icon-compass:before { content: @compass; }
-.icon-collapse:before { content: @collapse; }
-.icon-collapse-top:before { content: @collapse-top; }
-.icon-expand:before { content: @expand; }
-.icon-euro:before,
-.icon-eur:before { content: @eur; }
-.icon-gbp:before { content: @gbp; }
-.icon-dollar:before,
-.icon-usd:before { content: @usd; }
-.icon-rupee:before,
-.icon-inr:before { content: @inr; }
-.icon-yen:before,
-.icon-jpy:before { content: @jpy; }
-.icon-renminbi:before,
-.icon-cny:before { content: @cny; }
-.icon-won:before,
-.icon-krw:before { content: @krw; }
-.icon-bitcoin:before,
-.icon-btc:before { content: @btc; }
-.icon-file:before { content: @file; }
-.icon-file-text:before { content: @file-text; }
-.icon-sort-by-alphabet:before { content: @sort-by-alphabet; }
-.icon-sort-by-alphabet-alt:before { content: @sort-by-alphabet-alt; }
-.icon-sort-by-attributes:before { content: @sort-by-attributes; }
-.icon-sort-by-attributes-alt:before { content: @sort-by-attributes-alt; }
-.icon-sort-by-order:before { content: @sort-by-order; }
-.icon-sort-by-order-alt:before { content: @sort-by-order-alt; }
-.icon-thumbs-up:before { content: @thumbs-up; }
-.icon-thumbs-down:before { content: @thumbs-down; }
-.icon-youtube-sign:before { content: @youtube-sign; }
-.icon-youtube:before { content: @youtube; }
-.icon-xing:before { content: @xing; }
-.icon-xing-sign:before { content: @xing-sign; }
-.icon-youtube-play:before { content: @youtube-play; }
-.icon-dropbox:before { content: @dropbox; }
-.icon-stackexchange:before { content: @stackexchange; }
-.icon-instagram:before { content: @instagram; }
-.icon-flickr:before { content: @flickr; }
-.icon-adn:before { content: @adn; }
-.icon-bitbucket:before { content: @bitbucket; }
-.icon-bitbucket-sign:before { content: @bitbucket-sign; }
-.icon-tumblr:before { content: @tumblr; }
-.icon-tumblr-sign:before { content: @tumblr-sign; }
-.icon-long-arrow-down:before { content: @long-arrow-down; }
-.icon-long-arrow-up:before { content: @long-arrow-up; }
-.icon-long-arrow-left:before { content: @long-arrow-left; }
-.icon-long-arrow-right:before { content: @long-arrow-right; }
-.icon-apple:before { content: @apple; }
-.icon-windows:before { content: @windows; }
-.icon-android:before { content: @android; }
-.icon-linux:before { content: @linux; }
-.icon-dribbble:before { content: @dribbble; }
-.icon-skype:before { content: @skype; }
-.icon-foursquare:before { content: @foursquare; }
-.icon-trello:before { content: @trello; }
-.icon-female:before { content: @female; }
-.icon-male:before { content: @male; }
-.icon-gittip:before { content: @gittip; }
-.icon-sun:before { content: @sun; }
-.icon-moon:before { content: @moon; }
-.icon-archive:before { content: @archive; }
-.icon-bug:before { content: @bug; }
-.icon-vk:before { content: @vk; }
-.icon-weibo:before { content: @weibo; }
-.icon-renren:before { content: @renren; }
diff --git a/assets/less/bootstrap/font-awesome/mixins.less b/assets/less/bootstrap/font-awesome/mixins.less
deleted file mode 100644
index f7fdda5..0000000
--- a/assets/less/bootstrap/font-awesome/mixins.less
+++ /dev/null
@@ -1,48 +0,0 @@
-// Mixins
-// --------------------------
-
-.icon(@icon) {
-  .icon-FontAwesome();
-  content: @icon;
-}
-
-.icon-FontAwesome() {
-  font-family: FontAwesome;
-  font-weight: normal;
-  font-style: normal;
-  text-decoration: inherit;
-  -webkit-font-smoothing: antialiased;
-  *margin-right: .3em; // fixes ie7 issues
-}
-
-.border-radius(@radius) {
-  -webkit-border-radius: @radius;
-  -moz-border-radius: @radius;
-  border-radius: @radius;
-}
-
-.icon-stack(@width: 2em, @height: 2em, @top-font-size: 1em, @base-font-size: 2em) {
-  .icon-stack {
-    position: relative;
-    display: inline-block;
-    width: @width;
-    height: @height;
-    line-height: @width;
-    vertical-align: -35%;
-    [class^="icon-"],
-    [class*=" icon-"] {
-      display: block;
-      text-align: center;
-      position: absolute;
-      width: 100%;
-      height: 100%;
-      font-size: @top-font-size;
-      line-height: inherit;
-      *line-height: @height;
-    }
-    .icon-stack-base {
-      font-size: @base-font-size;
-      *line-height: @height / @base-font-size;
-    }
-  }
-}
diff --git a/assets/less/bootstrap/font-awesome/path.less b/assets/less/bootstrap/font-awesome/path.less
deleted file mode 100644
index 8ccef8c..0000000
--- a/assets/less/bootstrap/font-awesome/path.less
+++ /dev/null
@@ -1,14 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=@{FontAwesomeVersion}');
-  src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=@{FontAwesomeVersion}') format('embedded-opentype'),
-    url('@{FontAwesomePath}/fontawesome-webfont.woff?v=@{FontAwesomeVersion}') format('woff'),
-    url('@{FontAwesomePath}/fontawesome-webfont.ttf?v=@{FontAwesomeVersion}') format('truetype'),
-    url('@{FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=@{FontAwesomeVersion}') format('svg');
-//  src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts
-  font-weight: normal;
-  font-style: normal;
-}
diff --git a/assets/less/bootstrap/font-awesome/variables.less b/assets/less/bootstrap/font-awesome/variables.less
deleted file mode 100644
index 53d9ed4..0000000
--- a/assets/less/bootstrap/font-awesome/variables.less
+++ /dev/null
@@ -1,734 +0,0 @@
-// Variables
-// --------------------------
-
-@FontAwesomePath:    "../../../fonts";
-//@FontAwesomePath:    "//netdna.bootstrapcdn.com/font-awesome/3.2.1/font"; // for referencing Bootstrap CDN font files directly
-@FontAwesomeVersion: "3.2.1";
-@borderColor:        #eee;
-@iconMuted:          #eee;
-@iconLight:          #fff;
-@iconDark:           #333;
-@icons-li-width:     30/14em;
-
-
-  @glass: "\f000";
-
-  @music: "\f001";
-
-  @search: "\f002";
-
-  @envelope-alt: "\f003";
-
-  @heart: "\f004";
-
-  @star: "\f005";
-
-  @star-empty: "\f006";
-
-  @user: "\f007";
-
-  @film: "\f008";
-
-  @th-large: "\f009";
-
-  @th: "\f00a";
-
-  @th-list: "\f00b";
-
-  @ok: "\f00c";
-
-  @remove: "\f00d";
-
-  @zoom-in: "\f00e";
-
-  @zoom-out: "\f010";
-
-  @off: "\f011";
-
-  @signal: "\f012";
-
-  @cog: "\f013";
-
-  @trash: "\f014";
-
-  @home: "\f015";
-
-  @file-alt: "\f016";
-
-  @time: "\f017";
-
-  @road: "\f018";
-
-  @download-alt: "\f019";
-
-  @download: "\f01a";
-
-  @upload: "\f01b";
-
-  @inbox: "\f01c";
-
-  @play-circle: "\f01d";
-
-  @repeat: "\f01e";
-
-  @refresh: "\f021";
-
-  @list-alt: "\f022";
-
-  @lock: "\f023";
-
-  @flag: "\f024";
-
-  @headphones: "\f025";
-
-  @volume-off: "\f026";
-
-  @volume-down: "\f027";
-
-  @volume-up: "\f028";
-
-  @qrcode: "\f029";
-
-  @barcode: "\f02a";
-
-  @tag: "\f02b";
-
-  @tags: "\f02c";
-
-  @book: "\f02d";
-
-  @bookmark: "\f02e";
-
-  @print: "\f02f";
-
-  @camera: "\f030";
-
-  @font: "\f031";
-
-  @bold: "\f032";
-
-  @italic: "\f033";
-
-  @text-height: "\f034";
-
-  @text-width: "\f035";
-
-  @align-left: "\f036";
-
-  @align-center: "\f037";
-
-  @align-right: "\f038";
-
-  @align-justify: "\f039";
-
-  @list: "\f03a";
-
-  @indent-left: "\f03b";
-
-  @indent-right: "\f03c";
-
-  @facetime-video: "\f03d";
-
-  @picture: "\f03e";
-
-  @pencil: "\f040";
-
-  @map-marker: "\f041";
-
-  @adjust: "\f042";
-
-  @tint: "\f043";
-
-  @edit: "\f044";
-
-  @share: "\f045";
-
-  @check: "\f046";
-
-  @move: "\f047";
-
-  @step-backward: "\f048";
-
-  @fast-backward: "\f049";
-
-  @backward: "\f04a";
-
-  @play: "\f04b";
-
-  @pause: "\f04c";
-
-  @stop: "\f04d";
-
-  @forward: "\f04e";
-
-  @fast-forward: "\f050";
-
-  @step-forward: "\f051";
-
-  @eject: "\f052";
-
-  @chevron-left: "\f053";
-
-  @chevron-right: "\f054";
-
-  @plus-sign: "\f055";
-
-  @minus-sign: "\f056";
-
-  @remove-sign: "\f057";
-
-  @ok-sign: "\f058";
-
-  @question-sign: "\f059";
-
-  @info-sign: "\f05a";
-
-  @screenshot: "\f05b";
-
-  @remove-circle: "\f05c";
-
-  @ok-circle: "\f05d";
-
-  @ban-circle: "\f05e";
-
-  @arrow-left: "\f060";
-
-  @arrow-right: "\f061";
-
-  @arrow-up: "\f062";
-
-  @arrow-down: "\f063";
-
-  @share-alt: "\f064";
-
-  @resize-full: "\f065";
-
-  @resize-small: "\f066";
-
-  @plus: "\f067";
-
-  @minus: "\f068";
-
-  @asterisk: "\f069";
-
-  @exclamation-sign: "\f06a";
-
-  @gift: "\f06b";
-
-  @leaf: "\f06c";
-
-  @fire: "\f06d";
-
-  @eye-open: "\f06e";
-
-  @eye-close: "\f070";
-
-  @warning-sign: "\f071";
-
-  @plane: "\f072";
-
-  @calendar: "\f073";
-
-  @random: "\f074";
-
-  @comment: "\f075";
-
-  @magnet: "\f076";
-
-  @chevron-up: "\f077";
-
-  @chevron-down: "\f078";
-
-  @retweet: "\f079";
-
-  @shopping-cart: "\f07a";
-
-  @folder-close: "\f07b";
-
-  @folder-open: "\f07c";
-
-  @resize-vertical: "\f07d";
-
-  @resize-horizontal: "\f07e";
-
-  @bar-chart: "\f080";
-
-  @twitter-sign: "\f081";
-
-  @facebook-sign: "\f082";
-
-  @camera-retro: "\f083";
-
-  @key: "\f084";
-
-  @cogs: "\f085";
-
-  @comments: "\f086";
-
-  @thumbs-up-alt: "\f087";
-
-  @thumbs-down-alt: "\f088";
-
-  @star-half: "\f089";
-
-  @heart-empty: "\f08a";
-
-  @signout: "\f08b";
-
-  @linkedin-sign: "\f08c";
-
-  @pushpin: "\f08d";
-
-  @external-link: "\f08e";
-
-  @signin: "\f090";
-
-  @trophy: "\f091";
-
-  @github-sign: "\f092";
-
-  @upload-alt: "\f093";
-
-  @lemon: "\f094";
-
-  @phone: "\f095";
-
-  @check-empty: "\f096";
-
-  @bookmark-empty: "\f097";
-
-  @phone-sign: "\f098";
-
-  @twitter: "\f099";
-
-  @facebook: "\f09a";
-
-  @github: "\f09b";
-
-  @unlock: "\f09c";
-
-  @credit-card: "\f09d";
-
-  @rss: "\f09e";
-
-  @hdd: "\f0a0";
-
-  @bullhorn: "\f0a1";
-
-  @bell: "\f0a2";
-
-  @certificate: "\f0a3";
-
-  @hand-right: "\f0a4";
-
-  @hand-left: "\f0a5";
-
-  @hand-up: "\f0a6";
-
-  @hand-down: "\f0a7";
-
-  @circle-arrow-left: "\f0a8";
-
-  @circle-arrow-right: "\f0a9";
-
-  @circle-arrow-up: "\f0aa";
-
-  @circle-arrow-down: "\f0ab";
-
-  @globe: "\f0ac";
-
-  @wrench: "\f0ad";
-
-  @tasks: "\f0ae";
-
-  @filter: "\f0b0";
-
-  @briefcase: "\f0b1";
-
-  @fullscreen: "\f0b2";
-
-  @group: "\f0c0";
-
-  @link: "\f0c1";
-
-  @cloud: "\f0c2";
-
-  @beaker: "\f0c3";
-
-  @cut: "\f0c4";
-
-  @copy: "\f0c5";
-
-  @paper-clip: "\f0c6";
-
-  @save: "\f0c7";
-
-  @sign-blank: "\f0c8";
-
-  @reorder: "\f0c9";
-
-  @list-ul: "\f0ca";
-
-  @list-ol: "\f0cb";
-
-  @strikethrough: "\f0cc";
-
-  @underline: "\f0cd";
-
-  @table: "\f0ce";
-
-  @magic: "\f0d0";
-
-  @truck: "\f0d1";
-
-  @pinterest: "\f0d2";
-
-  @pinterest-sign: "\f0d3";
-
-  @google-plus-sign: "\f0d4";
-
-  @google-plus: "\f0d5";
-
-  @money: "\f0d6";
-
-  @caret-down: "\f0d7";
-
-  @caret-up: "\f0d8";
-
-  @caret-left: "\f0d9";
-
-  @caret-right: "\f0da";
-
-  @columns: "\f0db";
-
-  @sort: "\f0dc";
-
-  @sort-down: "\f0dd";
-
-  @sort-up: "\f0de";
-
-  @envelope: "\f0e0";
-
-  @linkedin: "\f0e1";
-
-  @undo: "\f0e2";
-
-  @legal: "\f0e3";
-
-  @dashboard: "\f0e4";
-
-  @comment-alt: "\f0e5";
-
-  @comments-alt: "\f0e6";
-
-  @bolt: "\f0e7";
-
-  @sitemap: "\f0e8";
-
-  @umbrella: "\f0e9";
-
-  @paste: "\f0ea";
-
-  @lightbulb: "\f0eb";
-
-  @exchange: "\f0ec";
-
-  @cloud-download: "\f0ed";
-
-  @cloud-upload: "\f0ee";
-
-  @user-md: "\f0f0";
-
-  @stethoscope: "\f0f1";
-
-  @suitcase: "\f0f2";
-
-  @bell-alt: "\f0f3";
-
-  @coffee: "\f0f4";
-
-  @food: "\f0f5";
-
-  @file-text-alt: "\f0f6";
-
-  @building: "\f0f7";
-
-  @hospital: "\f0f8";
-
-  @ambulance: "\f0f9";
-
-  @medkit: "\f0fa";
-
-  @fighter-jet: "\f0fb";
-
-  @beer: "\f0fc";
-
-  @h-sign: "\f0fd";
-
-  @plus-sign-alt: "\f0fe";
-
-  @double-angle-left: "\f100";
-
-  @double-angle-right: "\f101";
-
-  @double-angle-up: "\f102";
-
-  @double-angle-down: "\f103";
-
-  @angle-left: "\f104";
-
-  @angle-right: "\f105";
-
-  @angle-up: "\f106";
-
-  @angle-down: "\f107";
-
-  @desktop: "\f108";
-
-  @laptop: "\f109";
-
-  @tablet: "\f10a";
-
-  @mobile-phone: "\f10b";
-
-  @circle-blank: "\f10c";
-
-  @quote-left: "\f10d";
-
-  @quote-right: "\f10e";
-
-  @spinner: "\f110";
-
-  @circle: "\f111";
-
-  @reply: "\f112";
-
-  @github-alt: "\f113";
-
-  @folder-close-alt: "\f114";
-
-  @folder-open-alt: "\f115";
-
-  @expand-alt: "\f116";
-
-  @collapse-alt: "\f117";
-
-  @smile: "\f118";
-
-  @frown: "\f119";
-
-  @meh: "\f11a";
-
-  @gamepad: "\f11b";
-
-  @keyboard: "\f11c";
-
-  @flag-alt: "\f11d";
-
-  @flag-checkered: "\f11e";
-
-  @terminal: "\f120";
-
-  @code: "\f121";
-
-  @reply-all: "\f122";
-
-  @mail-reply-all: "\f122";
-
-  @star-half-empty: "\f123";
-
-  @location-arrow: "\f124";
-
-  @crop: "\f125";
-
-  @code-fork: "\f126";
-
-  @unlink: "\f127";
-
-  @question: "\f128";
-
-  @info: "\f129";
-
-  @exclamation: "\f12a";
-
-  @superscript: "\f12b";
-
-  @subscript: "\f12c";
-
-  @eraser: "\f12d";
-
-  @puzzle-piece: "\f12e";
-
-  @microphone: "\f130";
-
-  @microphone-off: "\f131";
-
-  @shield: "\f132";
-
-  @calendar-empty: "\f133";
-
-  @fire-extinguisher: "\f134";
-
-  @rocket: "\f135";
-
-  @maxcdn: "\f136";
-
-  @chevron-sign-left: "\f137";
-
-  @chevron-sign-right: "\f138";
-
-  @chevron-sign-up: "\f139";
-
-  @chevron-sign-down: "\f13a";
-
-  @html5: "\f13b";
-
-  @css3: "\f13c";
-
-  @anchor: "\f13d";
-
-  @unlock-alt: "\f13e";
-
-  @bullseye: "\f140";
-
-  @ellipsis-horizontal: "\f141";
-
-  @ellipsis-vertical: "\f142";
-
-  @rss-sign: "\f143";
-
-  @play-sign: "\f144";
-
-  @ticket: "\f145";
-
-  @minus-sign-alt: "\f146";
-
-  @check-minus: "\f147";
-
-  @level-up: "\f148";
-
-  @level-down: "\f149";
-
-  @check-sign: "\f14a";
-
-  @edit-sign: "\f14b";
-
-  @external-link-sign: "\f14c";
-
-  @share-sign: "\f14d";
-
-  @compass: "\f14e";
-
-  @collapse: "\f150";
-
-  @collapse-top: "\f151";
-
-  @expand: "\f152";
-
-  @eur: "\f153";
-
-  @gbp: "\f154";
-
-  @usd: "\f155";
-
-  @inr: "\f156";
-
-  @jpy: "\f157";
-
-  @cny: "\f158";
-
-  @krw: "\f159";
-
-  @btc: "\f15a";
-
-  @file: "\f15b";
-
-  @file-text: "\f15c";
-
-  @sort-by-alphabet: "\f15d";
-
-  @sort-by-alphabet-alt: "\f15e";
-
-  @sort-by-attributes: "\f160";
-
-  @sort-by-attributes-alt: "\f161";
-
-  @sort-by-order: "\f162";
-
-  @sort-by-order-alt: "\f163";
-
-  @thumbs-up: "\f164";
-
-  @thumbs-down: "\f165";
-
-  @youtube-sign: "\f166";
-
-  @youtube: "\f167";
-
-  @xing: "\f168";
-
-  @xing-sign: "\f169";
-
-  @youtube-play: "\f16a";
-
-  @dropbox: "\f16b";
-
-  @stackexchange: "\f16c";
-
-  @instagram: "\f16d";
-
-  @flickr: "\f16e";
-
-  @adn: "\f170";
-
-  @bitbucket: "\f171";
-
-  @bitbucket-sign: "\f172";
-
-  @tumblr: "\f173";
-
-  @tumblr-sign: "\f174";
-
-  @long-arrow-down: "\f175";
-
-  @long-arrow-up: "\f176";
-
-  @long-arrow-left: "\f177";
-
-  @long-arrow-right: "\f178";
-
-  @apple: "\f179";
-
-  @windows: "\f17a";
-
-  @android: "\f17b";
-
-  @linux: "\f17c";
-
-  @dribbble: "\f17d";
-
-  @skype: "\f17e";
-
-  @foursquare: "\f180";
-
-  @trello: "\f181";
-
-  @female: "\f182";
-
-  @male: "\f183";
-
-  @gittip: "\f184";
-
-  @sun: "\f185";
-
-  @moon: "\f186";
-
-  @archive: "\f187";
-
-  @bug: "\f188";
-
-  @vk: "\f189";
-
-  @weibo: "\f18a";
-
-  @renren: "\f18b";
diff --git a/assets/less/bootstrap/forms.less b/assets/less/bootstrap/forms.less
deleted file mode 100644
index 10b4751..0000000
--- a/assets/less/bootstrap/forms.less
+++ /dev/null
@@ -1,690 +0,0 @@
-//
-// Forms
-// --------------------------------------------------
-
-
-// GENERAL STYLES
-// --------------
-
-// Make all forms have space below them
-form {
-  margin: 0 0 @baseLineHeight;
-}
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-// Groups of fields with labels on top (legends)
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: @baseLineHeight;
-  font-size: @baseFontSize * 1.5;
-  line-height: @baseLineHeight * 2;
-  color: @grayDark;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-
-  // Small
-  small {
-    font-size: @baseLineHeight * .75;
-    color: @grayLight;
-  }
-}
-
-// Set font for forms
-label,
-input,
-button,
-select,
-textarea {
-  #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here
-}
-input,
-button,
-select,
-textarea {
-  font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element)
-}
-
-// Identify controls by their labels
-label {
-  display: block;
-  margin-bottom: 5px;
-}
-
-// Form controls
-// -------------------------
-
-// Shared size and type resets
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  display: inline-block;
-  height: @baseLineHeight;
-  padding: 4px 6px;
-  margin-bottom: @baseLineHeight / 2;
-  font-size: @baseFontSize;
-  line-height: @baseLineHeight;
-  color: @gray;
-  .border-radius(@inputBorderRadius);
-  vertical-align: middle;
-}
-
-// Reset appearance properties for textual inputs and textarea
-// Declare width for legacy (can't be on input[type=*] selectors or it's too specific)
-input,
-textarea,
-.uneditable-input {
-  width: 206px; // plus 12px padding and 2px border
-}
-// Reset height since textareas have rows
-textarea {
-  height: auto;
-}
-// Everything else
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  background-color: @inputBackground;
-  border: 1px solid @inputBorder;
-  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
-  .transition(~"border linear .2s, box-shadow linear .2s");
-
-  // Focus state
-  &:focus {
-    border-color: rgba(82,168,236,.8);
-    outline: 0;
-    outline: thin dotted \9; /* IE6-9 */
-    .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
-  }
-}
-
-// Position radios and checkboxes better
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  *margin-top: 0; /* IE7 */
-  margin-top: 1px \9; /* IE8-9 */
-  line-height: normal;
-}
-
-// Reset width of input images, buttons, radios, checkboxes
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
-  width: auto; // Override of generic input selector
-}
-
-// Set the height of select and file controls to match text inputs
-select,
-input[type="file"] {
-  height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */
-  *margin-top: 4px; /* For IE7, add top margin to align select with labels */
-  line-height: @inputHeight;
-}
-
-// Make select elements obey height by applying a border
-select {
-  width: 220px; // default input width + 10px of padding that doesn't get applied
-  border: 1px solid @inputBorder;
-  background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color
-}
-
-// Make multiple select elements height not fixed
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-// Focus for select, file, radio, and checkbox
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  .tab-focus();
-}
-
-
-// Uneditable inputs
-// -------------------------
-
-// Make uneditable inputs look inactive
-.uneditable-input,
-.uneditable-textarea {
-  color: @grayLight;
-  background-color: darken(@inputBackground, 1%);
-  border-color: @inputBorder;
-  .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
-  cursor: not-allowed;
-}
-
-// For text that needs to appear as an input but should not be an input
-.uneditable-input {
-  overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
-  white-space: nowrap;
-}
-
-// Make uneditable textareas behave like a textarea
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-
-
-// Placeholder
-// -------------------------
-
-// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
-input,
-textarea {
-  .placeholder();
-}
-
-
-// CHECKBOXES & RADIOS
-// -------------------
-
-// Indent the labels to position radios/checkboxes as hanging
-.radio,
-.checkbox {
-  min-height: @baseLineHeight; // clear the floating input if there is no label text
-  padding-left: 20px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-
-// Move the options list down to align with labels
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
-  padding-top: 5px; // has to be padding because margin collaspes
-}
-
-// Radios and checkboxes on same line
-// TODO v3: Convert .inline to .control-inline
-.radio.inline,
-.checkbox.inline {
-  display: inline-block;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px; // space out consecutive inline controls
-}
-
-
-
-// INPUT SIZES
-// -----------
-
-// General classes for quick sizes
-.input-mini       { width: 60px; }
-.input-small      { width: 90px; }
-.input-medium     { width: 150px; }
-.input-large      { width: 210px; }
-.input-xlarge     { width: 270px; }
-.input-xxlarge    { width: 530px; }
-
-// Grid style input sizes
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-// Redeclare since the fluid row class is more specific
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
-  float: none;
-  margin-left: 0;
-}
-// Ensure input-prepend/append never wraps
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
-  display: inline-block;
-}
-
-
-
-// GRID SIZING FOR INPUTS
-// ----------------------
-
-// Grid sizes
-#grid > .input(@gridColumnWidth, @gridGutterWidth);
-
-// Control row for multiple inputs per line
-.controls-row {
-  .clearfix(); // Clear the float from controls
-}
-
-// Float to collapse white-space for proper grid alignment
-.controls-row [class*="span"],
-// Redeclare the fluid grid collapse since we undo the float for inputs
-.row-fluid .controls-row [class*="span"] {
-  float: left;
-}
-// Explicity set top padding on all checkboxes/radios, not just first-child
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
-  padding-top: 5px;
-}
-
-
-
-
-// DISABLED STATE
-// --------------
-
-// Disabled and read-only inputs
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  cursor: not-allowed;
-  background-color: @inputDisabledBackground;
-}
-// Explicitly reset the colors here
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
-  background-color: transparent;
-}
-
-
-
-
-// FORM FIELD FEEDBACK STATES
-// --------------------------
-
-// Warning
-.control-group.warning {
-  .formFieldState(@warningText, @warningText, @warningBackground);
-}
-// Error
-.control-group.error {
-  .formFieldState(@errorText, @errorText, @errorBackground);
-}
-// Success
-.control-group.success {
-  .formFieldState(@successText, @successText, @successBackground);
-}
-// Success
-.control-group.info {
-  .formFieldState(@infoText, @infoText, @infoBackground);
-}
-
-// HTML5 invalid states
-// Shares styles with the .control-group.error above
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-  &:focus {
-    border-color: darken(#ee5f5b, 10%);
-    @shadow: 0 0 6px lighten(#ee5f5b, 20%);
-    .box-shadow(@shadow);
-  }
-}
-
-
-
-// FORM ACTIONS
-// ------------
-
-.form-actions {
-  padding: (@baseLineHeight - 1) 20px @baseLineHeight;
-  margin-top: @baseLineHeight;
-  margin-bottom: @baseLineHeight;
-  background-color: @formActionsBackground;
-  border-top: 1px solid #e5e5e5;
-  .clearfix(); // Adding clearfix to allow for .pull-right button containers
-}
-
-
-
-// HELP TEXT
-// ---------
-
-.help-block,
-.help-inline {
-  color: lighten(@textColor, 15%); // lighten the text some for contrast
-}
-
-.help-block {
-  display: block; // account for any element using help-block
-  margin-bottom: @baseLineHeight / 2;
-}
-
-.help-inline {
-  display: inline-block;
-  .ie7-inline-block();
-  vertical-align: middle;
-  padding-left: 5px;
-}
-
-
-
-// INPUT GROUPS
-// ------------
-
-// Allow us to put symbols and text within the input field for a cleaner look
-.input-append,
-.input-prepend {
-  display: inline-block;
-  margin-bottom: @baseLineHeight / 2;
-  vertical-align: middle;
-  font-size: 0; // white space collapse hack
-  white-space: nowrap; // Prevent span and input from separating
-
-  // Reset the white space collapse hack
-  input,
-  select,
-  .uneditable-input,
-  .dropdown-menu,
-  .popover {
-    font-size: @baseFontSize;
-  }
-
-  input,
-  select,
-  .uneditable-input {
-    position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness
-    margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms
-    *margin-left: 0;
-    vertical-align: top;
-    .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-    // Make input on top when focused so blue border and shadow always show
-    &:focus {
-      z-index: 2;
-    }
-  }
-  .add-on {
-    display: inline-block;
-    width: auto;
-    height: @baseLineHeight;
-    min-width: 16px;
-    padding: 4px 5px;
-    font-size: @baseFontSize;
-    font-weight: normal;
-    line-height: @baseLineHeight;
-    text-align: center;
-    text-shadow: 0 1px 0 @white;
-    background-color: @grayLighter;
-    border: 1px solid #ccc;
-  }
-  .add-on,
-  .btn,
-  .btn-group > .dropdown-toggle {
-    vertical-align: top;
-    .border-radius(0);
-  }
-  .active {
-    background-color: lighten(@green, 30);
-    border-color: @green;
-  }
-}
-
-.input-prepend {
-  .add-on,
-  .btn {
-    margin-right: -1px;
-  }
-  .add-on:first-child,
-  .btn:first-child {
-    // FYI, `.btn:first-child` accounts for a button group that's prepended
-    .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
-  }
-}
-
-.input-append {
-  input,
-  select,
-  .uneditable-input {
-    .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
-    + .btn-group .btn:last-child {
-      .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-    }
-  }
-  .add-on,
-  .btn,
-  .btn-group {
-    margin-left: -1px;
-  }
-  .add-on:last-child,
-  .btn:last-child,
-  .btn-group:last-child > .dropdown-toggle {
-    .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-  }
-}
-
-// Remove all border-radius for inputs with both prepend and append
-.input-prepend.input-append {
-  input,
-  select,
-  .uneditable-input {
-    .border-radius(0);
-    + .btn-group .btn {
-      .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-    }
-  }
-  .add-on:first-child,
-  .btn:first-child {
-    margin-right: -1px;
-    .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
-  }
-  .add-on:last-child,
-  .btn:last-child {
-    margin-left: -1px;
-    .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-  }
-  .btn-group:first-child {
-    margin-left: 0;
-  }
-}
-
-
-
-
-// SEARCH FORM
-// -----------
-
-input.search-query {
-  padding-right: 14px;
-  padding-right: 4px \9;
-  padding-left: 14px;
-  padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
-  margin-bottom: 0; // Remove the default margin on all inputs
-  .border-radius(15px);
-}
-
-/* Allow for input prepend/append in search forms */
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
-  .border-radius(0); // Override due to specificity
-}
-.form-search .input-append .search-query {
-  .border-radius(14px 0 0 14px);
-}
-.form-search .input-append .btn {
-  .border-radius(0 14px 14px 0);
-}
-.form-search .input-prepend .search-query {
-  .border-radius(0 14px 14px 0);
-}
-.form-search .input-prepend .btn {
-  .border-radius(14px 0 0 14px);
-}
-
-
-
-
-// HORIZONTAL & VERTICAL FORMS
-// ---------------------------
-
-// Common properties
-// -----------------
-
-.form-search,
-.form-inline,
-.form-horizontal {
-  input,
-  textarea,
-  select,
-  .help-inline,
-  .uneditable-input,
-  .input-prepend,
-  .input-append {
-    display: inline-block;
-    .ie7-inline-block();
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  // Re-hide hidden elements due to specificity
-  .hide {
-    display: none;
-  }
-}
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
-  display: inline-block;
-}
-// Remove margin for input-prepend/-append
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  margin-bottom: 0;
-}
-// Inline checkbox/radio labels (remove padding on left)
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
-  padding-left: 0;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-// Remove float and margin, set to inline-block
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-right: 3px;
-  margin-left: 0;
-}
-
-
-// Margin to space out fieldsets
-.control-group {
-  margin-bottom: @baseLineHeight / 2;
-}
-
-// Legend collapses margin, so next element is responsible for spacing
-legend + .control-group {
-  margin-top: @baseLineHeight;
-  -webkit-margin-top-collapse: separate;
-}
-
-// Horizontal-specific styles
-// --------------------------
-
-.form-horizontal {
-  // Increase spacing between groups
-  .control-group {
-    margin-bottom: @baseLineHeight;
-    .clearfix();
-  }
-  // Float the labels left
-  .control-label {
-    float: left;
-    width: @horizontalComponentOffset - 20;
-    padding-top: 5px;
-    text-align: right;
-  }
-  // Move over all input controls and content
-  .controls {
-    // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend
-    // don't inherit the margin of the parent, in this case .controls
-    *display: inline-block;
-    *padding-left: 20px;
-    margin-left: @horizontalComponentOffset;
-    *margin-left: 0;
-    &:first-child {
-      *padding-left: @horizontalComponentOffset;
-    }
-  }
-  // Remove bottom margin on block level help text since that's accounted for on .control-group
-  .help-block {
-    margin-bottom: 0;
-  }
-  // And apply it only to .help-block instances that follow a form control
-  input,
-  select,
-  textarea,
-  .uneditable-input,
-  .input-prepend,
-  .input-append {
-    + .help-block {
-      margin-top: @baseLineHeight / 2;
-    }
-  }
-  // Move over buttons in .form-actions to align with .controls
-  .form-actions {
-    padding-left: @horizontalComponentOffset;
-  }
-}
diff --git a/assets/less/bootstrap/grid.less b/assets/less/bootstrap/grid.less
deleted file mode 100644
index 750d203..0000000
--- a/assets/less/bootstrap/grid.less
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Grid system
-// --------------------------------------------------
-
-
-// Fixed (940px)
-#grid > .core(@gridColumnWidth, @gridGutterWidth);
-
-// Fluid (940px)
-#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
-
-// Reset utility classes due to specificity
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
-  display: none;
-}
-
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
-  float: right;
-}
diff --git a/assets/less/bootstrap/hero-unit.less b/assets/less/bootstrap/hero-unit.less
deleted file mode 100644
index 763d86a..0000000
--- a/assets/less/bootstrap/hero-unit.less
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Hero unit
-// --------------------------------------------------
-
-
-.hero-unit {
-  padding: 60px;
-  margin-bottom: 30px;
-  font-size: 18px;
-  font-weight: 200;
-  line-height: @baseLineHeight * 1.5;
-  color: @heroUnitLeadColor;
-  background-color: @heroUnitBackground;
-  .border-radius(6px);
-  h1 {
-    margin-bottom: 0;
-    font-size: 60px;
-    line-height: 1;
-    color: @heroUnitHeadingColor;
-    letter-spacing: -1px;
-  }
-  li {
-    line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less
-  }
-}
diff --git a/assets/less/bootstrap/labels-badges.less b/assets/less/bootstrap/labels-badges.less
deleted file mode 100644
index 054a6ae..0000000
--- a/assets/less/bootstrap/labels-badges.less
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// Labels and badges
-// --------------------------------------------------
-
-
-// Base classes
-.label,
-.badge {
-  display: inline-block;
-  padding: 2px 4px;
-  font-size: @baseFontSize * .846;
-  font-weight: bold;
-  line-height: 14px; // ensure proper line-height if floated
-  color: @white;
-  vertical-align: baseline;
-  white-space: nowrap;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-  background-color: @grayLight;
-}
-// Set unique padding and border-radii
-.label {
-  .border-radius(3px);
-}
-.badge {
-  padding-left: 9px;
-  padding-right: 9px;
-  .border-radius(9px);
-}
-
-// Empty labels/badges collapse
-.label,
-.badge {
-  &:empty {
-    display: none;
-  }
-}
-
-// Hover/focus state, but only for links
-a {
-  &.label:hover,
-  &.label:focus,
-  &.badge:hover,
-  &.badge:focus {
-    color: @white;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
-
-// Colors
-// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute)
-.label,
-.badge {
-  // Important (red)
-  &-important         { background-color: @errorText; }
-  &-important[href]   { background-color: darken(@errorText, 10%); }
-  // Warnings (orange)
-  &-warning           { background-color: @dangerRed; }
-  &-warning[href]     { background-color: darken(@dangerRed, 10%); }
-  // Success (green)
-  &-success           { background-color: @successText; }
-  &-success[href]     { background-color: darken(@successText, 10%); }
-  // Info (turquoise)
-  &-info              { background-color: @infoText; }
-  &-info[href]        { background-color: darken(@infoText, 10%); }
-  // Inverse (black)
-  &-inverse           { background-color: @grayDark; }
-  &-inverse[href]     { background-color: darken(@grayDark, 10%); }
-}
-
-// Quick fix for labels/badges in buttons
-.btn {
-  .label,
-  .badge {
-    position: relative;
-    top: -1px;
-  }
-}
-.btn-mini {
-  .label,
-  .badge {
-    top: 0;
-  }
-}
diff --git a/assets/less/bootstrap/layouts.less b/assets/less/bootstrap/layouts.less
deleted file mode 100644
index 24a2062..0000000
--- a/assets/less/bootstrap/layouts.less
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Layouts
-// --------------------------------------------------
-
-
-// Container (centered, fixed-width layouts)
-.container {
-  .container-fixed();
-}
-
-// Fluid layouts (left aligned, with sidebar, min- & max-width content)
-.container-fluid {
-  padding-right: @gridGutterWidth;
-  padding-left: @gridGutterWidth;
-  .clearfix();
-}
\ No newline at end of file
diff --git a/assets/less/bootstrap/media.less b/assets/less/bootstrap/media.less
deleted file mode 100644
index e461e44..0000000
--- a/assets/less/bootstrap/media.less
+++ /dev/null
@@ -1,55 +0,0 @@
-// Media objects
-// Source: http://stubbornella.org/content/?p=497
-// --------------------------------------------------
-
-
-// Common styles
-// -------------------------
-
-// Clear the floats
-.media,
-.media-body {
-  overflow: hidden;
-  *overflow: visible;
-  zoom: 1;
-}
-
-// Proper spacing between instances of .media
-.media,
-.media .media {
-  margin-top: 15px;
-}
-.media:first-child {
-  margin-top: 0;
-}
-
-// For images and videos, set to block
-.media-object {
-  display: block;
-}
-
-// Reset margins on headings for tighter default spacing
-.media-heading {
-  margin: 0 0 5px;
-}
-
-
-// Media image alignment
-// -------------------------
-
-.media > .pull-left {
-  margin-right: 10px;
-}
-.media > .pull-right {
-  margin-left: 10px;
-}
-
-
-// Media list variation
-// -------------------------
-
-// Undo default ul/ol styles
-.media-list {
-  margin-left: 0;
-  list-style: none;
-}
diff --git a/assets/less/bootstrap/mixins.less b/assets/less/bootstrap/mixins.less
deleted file mode 100644
index 92034a0..0000000
--- a/assets/less/bootstrap/mixins.less
+++ /dev/null
@@ -1,716 +0,0 @@
-//
-// Mixins
-// --------------------------------------------------
-
-
-// UTILITY MIXINS
-// --------------------------------------------------
-
-// Clearfix
-// --------
-// For clearing floats like a boss h5bp.com/q
-.clearfix {
-  *zoom: 1;
-  &:before,
-  &:after {
-    display: table;
-    content: "";
-    // Fixes Opera/contenteditable bug:
-    // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
-    line-height: 0;
-  }
-  &:after {
-    clear: both;
-  }
-}
-
-// Webkit-style focus
-// ------------------
-.tab-focus() {
-  // Default
-  outline: thin dotted #333;
-  // Webkit
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-// Center-align a block level element
-// ----------------------------------
-.center-block() {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-// IE7 inline-block
-// ----------------
-.ie7-inline-block() {
-  *display: inline; /* IE7 inline-block hack */
-  *zoom: 1;
-}
-
-// IE7 likes to collapse whitespace on either side of the inline-block elements.
-// Ems because we're attempting to match the width of a space character. Left
-// version is for form buttons, which typically come after other elements, and
-// right version is for icons, which come before. Applying both is ok, but it will
-// mean that space between those elements will be .6em (~2 space characters) in IE7,
-// instead of the 1 space in other browsers.
-.ie7-restore-left-whitespace() {
-  *margin-left: .3em;
-
-  &:first-child {
-    *margin-left: 0;
-  }
-}
-
-.ie7-restore-right-whitespace() {
-  *margin-right: .3em;
-}
-
-// Sizing shortcuts
-// -------------------------
-.size(@height, @width) {
-  width: @width;
-  height: @height;
-}
-.square(@size) {
-  .size(@size, @size);
-}
-
-// Placeholder text
-// -------------------------
-.placeholder(@color: @placeholderText) {
-  &:-moz-placeholder {
-    color: @color;
-  }
-  &:-ms-input-placeholder {
-    color: @color;
-  }
-  &::-webkit-input-placeholder {
-    color: @color;
-  }
-}
-
-// Text overflow
-// -------------------------
-// Requires inline-block or block for proper styling
-.text-overflow() {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-// CSS image replacement
-// -------------------------
-// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-
-// FONTS
-// --------------------------------------------------
-
-#font {
-  #family {
-    .serif() {
-      font-family: @serifFontFamily;
-    }
-    .sans-serif() {
-      font-family: @sansFontFamily;
-    }
-    .monospace() {
-      font-family: @monoFontFamily;
-    }
-  }
-  .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    font-size: @size;
-    font-weight: @weight;
-    line-height: @lineHeight;
-  }
-  .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    #font > #family > .serif;
-    #font > .shorthand(@size, @weight, @lineHeight);
-  }
-  .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    #font > #family > .sans-serif;
-    #font > .shorthand(@size, @weight, @lineHeight);
-  }
-  .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    #font > #family > .monospace;
-    #font > .shorthand(@size, @weight, @lineHeight);
-  }
-}
-
-
-// FORMS
-// --------------------------------------------------
-
-// Block level inputs
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
-  .box-sizing(border-box); // Makes inputs behave like true block-level elements
-}
-
-
-
-// Mixin for form field states
-.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
-  // Set the text color
-  .control-label,
-  .help-block,
-  .help-inline {
-    color: @textColor;
-  }
-  // Style inputs accordingly
-  .checkbox,
-  .radio,
-  input,
-  select,
-  textarea {
-    color: @textColor;
-  }
-  input,
-  select,
-  textarea {
-    border-color: @borderColor;
-    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
-    &:focus {
-      border-color: darken(@borderColor, 10%);
-      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%);
-      .box-shadow(@shadow);
-    }
-  }
-  // Give a small background color for input-prepend/-append
-  .input-prepend .add-on,
-  .input-append .add-on {
-    color: @textColor;
-    background-color: @backgroundColor;
-    border-color: @textColor;
-  }
-}
-
-
-
-// CSS3 PROPERTIES
-// --------------------------------------------------
-
-// Border Radius
-.border-radius(@radius) {
-  -webkit-border-radius: @radius;
-     -moz-border-radius: @radius;
-          border-radius: @radius;
-}
-
-// Single Corner Border Radius
-.border-top-left-radius(@radius) {
-  -webkit-border-top-left-radius: @radius;
-      -moz-border-radius-topleft: @radius;
-          border-top-left-radius: @radius;
-}
-.border-top-right-radius(@radius) {
-  -webkit-border-top-right-radius: @radius;
-      -moz-border-radius-topright: @radius;
-          border-top-right-radius: @radius;
-}
-.border-bottom-right-radius(@radius) {
-  -webkit-border-bottom-right-radius: @radius;
-      -moz-border-radius-bottomright: @radius;
-          border-bottom-right-radius: @radius;
-}
-.border-bottom-left-radius(@radius) {
-  -webkit-border-bottom-left-radius: @radius;
-      -moz-border-radius-bottomleft: @radius;
-          border-bottom-left-radius: @radius;
-}
-
-// Single Side Border Radius
-.border-top-radius(@radius) {
-  .border-top-right-radius(@radius);
-  .border-top-left-radius(@radius);
-}
-.border-right-radius(@radius) {
-  .border-top-right-radius(@radius);
-  .border-bottom-right-radius(@radius);
-}
-.border-bottom-radius(@radius) {
-  .border-bottom-right-radius(@radius);
-  .border-bottom-left-radius(@radius);
-}
-.border-left-radius(@radius) {
-  .border-top-left-radius(@radius);
-  .border-bottom-left-radius(@radius);
-}
-
-// Drop shadows
-.box-shadow(@shadow) {
-  -webkit-box-shadow: @shadow;
-     -moz-box-shadow: @shadow;
-          box-shadow: @shadow;
-}
-
-// Transitions
-.transition(@transition) {
-  -webkit-transition: @transition;
-     -moz-transition: @transition;
-       -o-transition: @transition;
-          transition: @transition;
-}
-.transition-delay(@transition-delay) {
-  -webkit-transition-delay: @transition-delay;
-     -moz-transition-delay: @transition-delay;
-       -o-transition-delay: @transition-delay;
-          transition-delay: @transition-delay;
-}
-.transition-duration(@transition-duration) {
-  -webkit-transition-duration: @transition-duration;
-     -moz-transition-duration: @transition-duration;
-       -o-transition-duration: @transition-duration;
-          transition-duration: @transition-duration;
-}
-
-// Transformations
-.rotate(@degrees) {
-  -webkit-transform: rotate(@degrees);
-     -moz-transform: rotate(@degrees);
-      -ms-transform: rotate(@degrees);
-       -o-transform: rotate(@degrees);
-          transform: rotate(@degrees);
-}
-.scale(@ratio) {
-  -webkit-transform: scale(@ratio);
-     -moz-transform: scale(@ratio);
-      -ms-transform: scale(@ratio);
-       -o-transform: scale(@ratio);
-          transform: scale(@ratio);
-}
-.translate(@x, @y) {
-  -webkit-transform: translate(@x, @y);
-     -moz-transform: translate(@x, @y);
-      -ms-transform: translate(@x, @y);
-       -o-transform: translate(@x, @y);
-          transform: translate(@x, @y);
-}
-.skew(@x, @y) {
-  -webkit-transform: skew(@x, @y);
-     -moz-transform: skew(@x, @y);
-      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885
-       -o-transform: skew(@x, @y);
-          transform: skew(@x, @y);
-  -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319
-}
-.translate3d(@x, @y, @z) {
-  -webkit-transform: translate3d(@x, @y, @z);
-     -moz-transform: translate3d(@x, @y, @z);
-       -o-transform: translate3d(@x, @y, @z);
-          transform: translate3d(@x, @y, @z);
-}
-
-// Backface visibility
-// Prevent browsers from flickering when using CSS 3D transforms.
-// Default value is `visible`, but can be changed to `hidden
-// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
-.backface-visibility(@visibility){
-	-webkit-backface-visibility: @visibility;
-	   -moz-backface-visibility: @visibility;
-	        backface-visibility: @visibility;
-}
-
-// Background clipping
-// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
-.background-clip(@clip) {
-  -webkit-background-clip: @clip;
-     -moz-background-clip: @clip;
-          background-clip: @clip;
-}
-
-// Background sizing
-.background-size(@size) {
-  -webkit-background-size: @size;
-     -moz-background-size: @size;
-       -o-background-size: @size;
-          background-size: @size;
-}
-
-
-// Box sizing
-.box-sizing(@boxmodel) {
-  -webkit-box-sizing: @boxmodel;
-     -moz-box-sizing: @boxmodel;
-          box-sizing: @boxmodel;
-}
-
-// User select
-// For selecting text on the page
-.user-select(@select) {
-  -webkit-user-select: @select;
-     -moz-user-select: @select;
-      -ms-user-select: @select;
-       -o-user-select: @select;
-          user-select: @select;
-}
-
-// Resize anything
-.resizable(@direction) {
-  resize: @direction; // Options: horizontal, vertical, both
-  overflow: auto; // Safari fix
-}
-
-// CSS3 Content Columns
-.content-columns(@columnCount, @columnGap: @gridGutterWidth) {
-  -webkit-column-count: @columnCount;
-     -moz-column-count: @columnCount;
-          column-count: @columnCount;
-  -webkit-column-gap: @columnGap;
-     -moz-column-gap: @columnGap;
-          column-gap: @columnGap;
-}
-
-// Optional hyphenation
-.hyphens(@mode: auto) {
-  word-wrap: break-word;
-  -webkit-hyphens: @mode;
-     -moz-hyphens: @mode;
-      -ms-hyphens: @mode;
-       -o-hyphens: @mode;
-          hyphens: @mode;
-}
-
-// Opacity
-.opacity(@opacity) {
-  opacity: @opacity / 100;
-  filter: ~"alpha(opacity=@{opacity})";
-}
-
-
-
-// BACKGROUNDS
-// --------------------------------------------------
-
-// Add an alphatransparency value to any background or border color (via Elyse Holladay)
-#translucent {
-  .background(@color: @white, @alpha: 1) {
-    background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
-  }
-  .border(@color: @white, @alpha: 1) {
-    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
-    .background-clip(padding-box);
-  }
-}
-
-// Gradient Bar Colors for buttons and alerts
-.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
-  color: @textColor;
-  text-shadow: @textShadow;
-  #gradient > .vertical(@primaryColor, @secondaryColor);
-  border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
-  border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
-}
-
-// Gradients
-#gradient {
-  .horizontal(@startColor: #555, @endColor: #333) {
-    background-color: @endColor;
-    background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
-    background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
-    background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
-    background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
-    background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10
-    background-repeat: repeat-x;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down
-  }
-  .vertical(@startColor: #555, @endColor: #333) {
-    background-color: mix(@startColor, @endColor, 60%);
-    background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
-    background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
-    background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
-    background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
-    background-repeat: repeat-x;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
-  }
-  .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
-    background-color: @endColor;
-    background-repeat: repeat-x;
-    background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
-    background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
-    background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
-    background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10
-  }
-  .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
-    background-color: mix(@midColor, @endColor, 80%);
-    background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
-    background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
-    background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
-    background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
-    background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor);
-    background-repeat: no-repeat;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
-  }
-
-  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
-    background-color: mix(@midColor, @endColor, 80%);
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
-    background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
-    background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
-    background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
-    background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
-    background-repeat: no-repeat;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
-  }
-  .radial(@innerColor: #555, @outerColor: #333) {
-    background-color: @outerColor;
-    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
-    background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
-    background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
-    background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
-    background-repeat: no-repeat;
-  }
-  .striped(@color: #555, @angle: 45deg) {
-    background-color: @color;
-    background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
-    background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-    background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-  }
-}
-// Reset filters for IE
-.reset-filter() {
-  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
-}
-
-
-
-// COMPONENT MIXINS
-// --------------------------------------------------
-
-// Horizontal dividers
-// -------------------------
-// Dividers (basically an hr) within dropdowns and nav lists
-.nav-divider(@top: #e5e5e5, @bottom: @white) {
-  // IE7 needs a set width since we gave a height. Restricting just
-  // to IE7 to keep the 1px left/right space in other browsers.
-  // It is unclear where IE is getting the extra space that we need
-  // to negative-margin away, but so it goes.
-  *width: 100%;
-  height: 1px;
-  margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: @top;
-  border-bottom: 1px solid @bottom;
-}
-
-// Button backgrounds
-// ------------------
-.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
-  // gradientBar will set the background to a pleasing blend of these, to support IE<=9
-  .gradientBar(@startColor, @endColor, @textColor, @textShadow);
-  *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  .reset-filter();
-
-  // in these cases the gradient won't cover the background, so we override
-  &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
-    color: @textColor;
-    background-color: @endColor;
-    *background-color: darken(@endColor, 5%);
-  }
-
-  // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
-  &:active,
-  &.active {
-    background-color: darken(@endColor, 10%) e("\9");
-  }
-}
-
-// Navbar vertical align
-// -------------------------
-// Vertically center elements in the navbar.
-// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin.
-.navbarVerticalAlign(@elementHeight) {
-  margin-top: (@navbarHeight - @elementHeight) / 2;
-}
-
-
-
-// Grid System
-// -----------
-
-// Centered container element
-.container-fixed() {
-  margin-right: auto;
-  margin-left: auto;
-  .clearfix();
-}
-
-// Table columns
-.tableColumns(@columnSpan: 1) {
-  float: none; // undo default grid column styles
-  width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
-  margin-left: 0; // undo default grid column styles
-}
-
-// Make a Grid
-// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
-.makeRow() {
-  margin-left: @gridGutterWidth * -1;
-  .clearfix();
-}
-.makeColumn(@columns: 1, @offset: 0) {
-  float: left;
-  margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2);
-  width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-}
-
-// The Grid
-#grid {
-
-  .core (@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
-    }
-
-    .span (@columns) {
-      width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-    }
-
-    .row {
-      margin-left: @gridGutterWidth * -1;
-      .clearfix();
-    }
-
-    [class*="span"] {
-      float: left;
-      min-height: 1px; // prevent collapsing columns
-      margin-left: @gridGutterWidth;
-    }
-
-    // Set the container width, and override it for fixed navbars in media queries
-    .container,
-    .navbar-static-top .container,
-    .navbar-fixed-top .container,
-    .navbar-fixed-bottom .container { .span(@gridColumns); }
-
-    // generate .spanX and .offsetX
-    .spanX (@gridColumns);
-    .offsetX (@gridColumns);
-
-  }
-
-  .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offset@{index}:first-child { .offsetFirstChild(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
-  	  *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .offsetFirstChild (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
-      *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .span (@columns) {
-      width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
-      *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .row-fluid {
-      width: 100%;
-      .clearfix();
-      [class*="span"] {
-        .input-block-level();
-        float: left;
-        margin-left: @fluidGridGutterWidth;
-        *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-      }
-      [class*="span"]:first-child {
-        margin-left: 0;
-      }
-
-      // Space grid-sized controls properly if multiple per line
-      .controls-row [class*="span"] + [class*="span"] {
-        margin-left: @fluidGridGutterWidth;
-      }
-
-      // generate .spanX and .offsetX
-      .spanX (@gridColumns);
-      .offsetX (@gridColumns);
-    }
-
-  }
-
-  .input(@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .span(@columns) {
-      width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14;
-    }
-
-    input,
-    textarea,
-    .uneditable-input {
-      margin-left: 0; // override margin-left from core grid system
-    }
-
-    // Space grid-sized controls properly if multiple per line
-    .controls-row [class*="span"] + [class*="span"] {
-      margin-left: @gridGutterWidth;
-    }
-
-    // generate .spanX
-    .spanX (@gridColumns);
-
-  }
-}
-
-.customTransition(@prop, @delay, @a, @b, @c, @d){
--webkit-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-   -moz-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-    -ms-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-     -o-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-        transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); /* custom */
-
--webkit-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-   -moz-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-    -ms-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-     -o-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-        transition-timing-function: cubic-bezier(@a, @b, @c, @d); /* custom */
-}
diff --git a/assets/less/bootstrap/modals.less b/assets/less/bootstrap/modals.less
deleted file mode 100644
index ca8f2dc..0000000
--- a/assets/less/bootstrap/modals.less
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Modals
-// --------------------------------------------------
-
-// Background
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: @zindexModalBackdrop;
-  background-color: @black;
-  // Fade for backdrop
-  &.fade { opacity: 0; }
-}
-
-.modal-backdrop,
-.modal-backdrop.fade.in {
-  .opacity(80);
-}
-
-// Base modal
-.modal {
-  position: fixed;
-  top: 10%;
-  left: 50%;
-  z-index: @zindexModal;
-  width: 560px;
-  margin-left: -280px;
-  background-color: @white;
-  border: 1px solid #999;
-  border: 1px solid rgba(0,0,0,.3);
-  *border: 1px solid #999; /* IE6-7 */
-  .border-radius(6px);
-  .box-shadow(0 3px 7px rgba(0,0,0,0.3));
-  .background-clip(padding-box);
-  // Remove focus outline from opened modal
-  outline: none;
-
-  &.fade {
-    .transition(e('opacity .3s linear, top .3s ease-out'));
-    top: -25%;
-  }
-  &.fade.in { top: 10%; }
-}
-.modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-  // Close icon
-  .close { margin-top: 2px; }
-  // Heading
-  h3 {
-    margin: 0;
-    line-height: 30px;
-  }
-}
-
-// Body (where all modal content resides)
-.modal-body {
-  position: relative;
-  overflow-y: auto;
-  max-height: 600px;
-  padding: 15px;
-}
-// Remove bottom margin if need be
-.modal-form {
-  margin-bottom: 0;
-}
-
-// Footer (for actions)
-.modal-footer {
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  text-align: right; // right align buttons
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  .border-radius(0 0 6px 6px);
-  .box-shadow(inset 0 1px 0 @white);
-  .clearfix(); // clear it in case folks use .pull-* classes on buttons
-
-  // Properly space out buttons
-  .btn + .btn {
-    margin-left: 5px;
-    margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
-  }
-  // but override that for button groups
-  .btn-group .btn + .btn {
-    margin-left: -1px;
-  }
-  // and override it for block buttons as well
-  .btn-block + .btn-block {
-    margin-left: 0;
-  }
-}
diff --git a/assets/less/bootstrap/navbar.less b/assets/less/bootstrap/navbar.less
deleted file mode 100644
index 5cf656e..0000000
--- a/assets/less/bootstrap/navbar.less
+++ /dev/null
@@ -1,496 +0,0 @@
-//
-// Navbars (Redux)
-// --------------------------------------------------
-
-
-// COMMON STYLES
-// -------------
-
-// Base class and wrapper
-.navbar {
-  overflow: visible;
-  margin-bottom: @baseLineHeight;
-
-  // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar
-  *position: relative;
-  *z-index: 2;
-}
-
-// Inner for background effects
-// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present
-.navbar-inner {
-  min-height: @navbarHeight;
-  padding-left:  20px;
-  padding-right: 20px;
-  #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground);
-  border: 1px solid @navbarBorder;
-  .border-radius(@baseBorderRadius);
-
-  // Prevent floats from breaking the navbar
-  .clearfix();
-}
-
-// Set width to auto for default container
-// We then reset it for fixed navbars in the #gridSystem mixin
-.navbar .container {
-  width: auto;
-}
-
-// Override the default collapsed state
-.nav-collapse.collapse {
-  height: auto;
-  overflow: visible;
-}
-
-
-// Brand: website or project name
-// -------------------------
-.navbar .brand {
-  float: left;
-  display: block;
-  // Vertically center the text given @navbarHeight
-  padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2);
-  margin-left: -20px; // negative indent to left-align the text down the page
-  font-size: 20px;
-  font-weight: 200;
-  color: @navbarBrandColor;
-  text-shadow: 0 1px 0 @navbarBackgroundHighlight;
-  &:hover,
-  &:focus {
-    text-decoration: none;
-  }
-}
-
-// Plain text in topbar
-// -------------------------
-.navbar-text {
-  margin-bottom: 0;
-  line-height: @navbarHeight;
-  color: @navbarText;
-}
-
-// Janky solution for now to account for links outside the .nav
-// -------------------------
-.navbar-link {
-  color: @navbarLinkColor;
-  &:hover,
-  &:focus {
-    color: @navbarLinkColorHover;
-  }
-}
-
-// Dividers in navbar
-// -------------------------
-.navbar .divider-vertical {
-  height: @navbarHeight;
-  margin: 0 9px;
-  border-left: 1px solid @navbarBackground;
-  border-right: 1px solid @navbarBackgroundHighlight;
-}
-
-// Buttons in navbar
-// -------------------------
-.navbar .btn,
-.navbar .btn-group {
-  .navbarVerticalAlign(30px); // Vertically center in navbar
-}
-.navbar .btn-group .btn,
-.navbar .input-prepend .btn,
-.navbar .input-append .btn,
-.navbar .input-prepend .btn-group,
-.navbar .input-append .btn-group {
-  margin-top: 0; // then undo the margin here so we don't accidentally double it
-}
-
-// Navbar forms
-// -------------------------
-.navbar-form {
-  margin-bottom: 0; // remove default bottom margin
-  .clearfix();
-  input,
-  select,
-  .radio,
-  .checkbox {
-    .navbarVerticalAlign(30px); // Vertically center in navbar
-  }
-  input,
-  select,
-  .btn {
-    display: inline-block;
-    margin-bottom: 0;
-  }
-  input[type="image"],
-  input[type="checkbox"],
-  input[type="radio"] {
-    margin-top: 3px;
-  }
-  .input-append,
-  .input-prepend {
-    margin-top: 0px;
-    white-space: nowrap; // prevent two items from separating within a .navbar-form that has .pull-left
-    input {
-      margin-top: 0; // remove the margin on top since it's on the parent
-    }
-  }
-}
-
-// Navbar search
-// -------------------------
-.navbar-search {
-  position: relative;
-  float: left;
-  .navbarVerticalAlign(30px); // Vertically center in navbar
-  margin-bottom: 0;
-  .search-query {
-    margin-bottom: 0;
-    padding: 4px 14px;
-    #font > .sans-serif(13px, normal, 1);
-    .border-radius(15px); // redeclare because of specificity of the type attribute
-  }
-}
-
-
-
-// Static navbar
-// -------------------------
-
-.navbar-static-top {
-  position: static;
-  margin-bottom: 0; // remove 18px margin for default navbar
-  .navbar-inner {
-    .border-radius(0);
-  }
-}
-
-
-
-// Fixed navbar
-// -------------------------
-
-// Shared (top/bottom) styles
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: @zindexFixedNavbar;
-  margin-bottom: 0; // remove 18px margin for default navbar
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom .navbar-inner {
-  border-width: 1px 0 0;
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
-  padding-left:  0;
-  padding-right: 0;
-  .border-radius(0);
-}
-
-// Reset container width
-// Required here as we reset the width earlier on and the grid mixins don't override early enough
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  #grid > .core > .span(@gridColumns);
-}
-
-// Fixed to top
-.navbar-fixed-top {
-  top: 0;
-}
-.navbar-fixed-top,
-.navbar-static-top {
-  .navbar-inner {
-    .box-shadow(~"0 1px 10px rgba(0,0,0,.1)");
-  }
-}
-
-// Fixed to bottom
-.navbar-fixed-bottom {
-  bottom: 0;
-  .navbar-inner {
-    .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)");
-  }
-}
-
-
-
-// NAVIGATION
-// ----------
-
-.navbar .nav {
-  position: relative;
-  left: 0;
-  display: block;
-  float: left;
-  margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
-  float: right; // redeclare due to specificity
-  margin-right: 0; // remove margin on float right nav
-}
-.navbar .nav > li {
-  float: left;
-}
-
-// Links
-.navbar .nav > li > a {
-  float: none;
-  // Vertically center the text given @navbarHeight
-  padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2);
-  color: @navbarLinkColor;
-  text-decoration: none;
-  text-shadow: 0 1px 0 @navbarBackgroundHighlight;
-}
-.navbar .nav .dropdown-toggle .caret {
-  margin-top: 8px;
-}
-
-// Hover/focus
-.navbar .nav > li > a:focus,
-.navbar .nav > li > a:hover {
-  background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active
-  color: @navbarLinkColorHover;
-  text-decoration: none;
-}
-
-// Active nav items
-.navbar .nav > .active > a,
-.navbar .nav > .active > a:hover,
-.navbar .nav > .active > a:focus {
-  color: @navbarLinkColorActive;
-  text-decoration: none;
-  background-color: @navbarLinkBackgroundActive;
-  .box-shadow(inset 0 3px 8px rgba(0,0,0,.125));
-}
-
-// Navbar button for toggling navbar items in responsive layouts
-// These definitions need to come after '.navbar .btn'
-.navbar .btn-navbar {
-  display: none;
-  float: right;
-  padding: 7px 10px;
-  margin-left: 5px;
-  margin-right: 5px;
-  .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%));
-  .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)");
-}
-.navbar .btn-navbar .icon-bar {
-  display: block;
-  width: 18px;
-  height: 2px;
-  background-color: #f5f5f5;
-  .border-radius(1px);
-  .box-shadow(0 1px 0 rgba(0,0,0,.25));
-}
-.btn-navbar .icon-bar + .icon-bar {
-  margin-top: 3px;
-}
-
-
-
-// Dropdown menus
-// --------------
-
-// Menu position and menu carets
-.navbar .nav > li > .dropdown-menu {
-  &:before {
-    content: '';
-    display: inline-block;
-    border-left:   7px solid transparent;
-    border-right:  7px solid transparent;
-    border-bottom: 7px solid #ccc;
-    border-bottom-color: @dropdownBorder;
-    position: absolute;
-    top: -7px;
-    left: 9px;
-  }
-  &:after {
-    content: '';
-    display: inline-block;
-    border-left:   6px solid transparent;
-    border-right:  6px solid transparent;
-    border-bottom: 6px solid @dropdownBackground;
-    position: absolute;
-    top: -6px;
-    left: 10px;
-  }
-}
-// Menu position and menu caret support for dropups via extra dropup class
-.navbar-fixed-bottom .nav > li > .dropdown-menu {
-  &:before {
-    border-top: 7px solid #ccc;
-    border-top-color: @dropdownBorder;
-    border-bottom: 0;
-    bottom: -7px;
-    top: auto;
-  }
-  &:after {
-    border-top: 6px solid @dropdownBackground;
-    border-bottom: 0;
-    bottom: -6px;
-    top: auto;
-  }
-}
-
-// Caret should match text color on hover/focus
-.navbar .nav li.dropdown > a:hover .caret,
-.navbar .nav li.dropdown > a:focus .caret {
-  border-top-color: @navbarLinkColorHover;
-  border-bottom-color: @navbarLinkColorHover;
-}
-
-// Remove background color from open dropdown
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
-  background-color: @navbarLinkBackgroundActive;
-  color: @navbarLinkColorActive;
-}
-.navbar .nav li.dropdown > .dropdown-toggle .caret {
-  border-top-color: @navbarLinkColor;
-  border-bottom-color: @navbarLinkColor;
-}
-.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
-  border-top-color: @navbarLinkColorActive;
-  border-bottom-color: @navbarLinkColorActive;
-}
-
-// Right aligned menus need alt position
-.navbar .pull-right > li > .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right {
-  left: auto;
-  right: 0;
-  &:before {
-    left: auto;
-    right: 12px;
-  }
-  &:after {
-    left: auto;
-    right: 13px;
-  }
-  .dropdown-menu {
-    left: auto;
-    right: 100%;
-    margin-left: 0;
-    margin-right: -1px;
-    .border-radius(6px 0 6px 6px);
-  }
-}
-
-
-// Inverted navbar
-// -------------------------
-
-.navbar-inverse {
-
-  .navbar-inner {
-    #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground);
-    border-color: @navbarInverseBorder;
-  }
-
-  .brand,
-  .nav > li > a {
-    color: @navbarInverseLinkColor;
-    text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-    &:hover,
-    &:focus {
-      color: @navbarInverseLinkColorHover;
-    }
-  }
-
-  .brand {
-    color: @navbarInverseBrandColor;
-  }
-
-  .navbar-text {
-    color: @navbarInverseText;
-  }
-
-  .nav > li > a:focus,
-  .nav > li > a:hover {
-    background-color: @navbarInverseLinkBackgroundHover;
-    color: @navbarInverseLinkColorHover;
-  }
-
-  .nav .active > a,
-  .nav .active > a:hover,
-  .nav .active > a:focus {
-    color: @navbarInverseLinkColorActive;
-    background-color: @navbarInverseLinkBackgroundActive;
-  }
-
-  // Inline text links
-  .navbar-link {
-    color: @navbarInverseLinkColor;
-    &:hover,
-    &:focus {
-      color: @navbarInverseLinkColorHover;
-    }
-  }
-
-  // Dividers in navbar
-  .divider-vertical {
-    border-left-color: @navbarInverseBackground;
-    border-right-color: @navbarInverseBackgroundHighlight;
-  }
-
-  // Dropdowns
-  .nav li.dropdown.open > .dropdown-toggle,
-  .nav li.dropdown.active > .dropdown-toggle,
-  .nav li.dropdown.open.active > .dropdown-toggle {
-    background-color: @navbarInverseLinkBackgroundActive;
-    color: @navbarInverseLinkColorActive;
-  }
-  .nav li.dropdown > a:hover .caret,
-  .nav li.dropdown > a:focus .caret {
-    border-top-color: @navbarInverseLinkColorActive;
-    border-bottom-color: @navbarInverseLinkColorActive;
-  }
-  .nav li.dropdown > .dropdown-toggle .caret {
-    border-top-color: @navbarInverseLinkColor;
-    border-bottom-color: @navbarInverseLinkColor;
-  }
-  .nav li.dropdown.open > .dropdown-toggle .caret,
-  .nav li.dropdown.active > .dropdown-toggle .caret,
-  .nav li.dropdown.open.active > .dropdown-toggle .caret {
-    border-top-color: @navbarInverseLinkColorActive;
-    border-bottom-color: @navbarInverseLinkColorActive;
-  }
-
-  // Navbar search
-  .navbar-search {
-    .search-query {
-      color: @white;
-      background-color: @navbarInverseSearchBackground;
-      border-color: @navbarInverseSearchBorder;
-      .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)");
-      .transition(none);
-      .placeholder(@navbarInverseSearchPlaceholderColor);
-
-      // Focus states (we use .focused since IE7-8 and down doesn't support :focus)
-      &:focus,
-      &.focused {
-        padding: 5px 15px;
-        color: @grayDark;
-        text-shadow: 0 1px 0 @white;
-        background-color: @navbarInverseSearchBackgroundFocus;
-        border: 0;
-        .box-shadow(0 0 3px rgba(0,0,0,.15));
-        outline: 0;
-      }
-    }
-  }
-
-  // Navbar collapse button
-  .btn-navbar {
-    .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%));
-  }
-
-}
diff --git a/assets/less/bootstrap/navs.less b/assets/less/bootstrap/navs.less
deleted file mode 100644
index 0013179..0000000
--- a/assets/less/bootstrap/navs.less
+++ /dev/null
@@ -1,406 +0,0 @@
-//
-// Navs
-// --------------------------------------------------
-
-
-// BASE CLASS
-// ----------
-
-.nav {
-  margin-left: 0;
-  margin-bottom: @baseLineHeight;
-  list-style: none;
-}
-
-// Make links block level
-.nav > li > a {
-  display: block;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: @grayLighter;
-}
-
-// Prevent IE8 from misplacing imgs
-// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
-.nav > li > a > img {
-  max-width: none;
-}
-
-// Redeclare pull classes because of specifity
-.nav > .pull-right {
-  float: right;
-}
-
-// Nav headers (for dropdowns and lists)
-.nav-header {
-  display: block;
-  padding: 3px 15px;
-  line-height: @baseLineHeight;
-  color: @grayLight;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-}
-// Space them out when they follow another list item (link)
-.nav li + .nav-header {
-  margin-top: 9px;
-}
-
-
-
-// NAV LIST
-// --------
-
-.nav-list {
-  padding-left: 15px;
-  padding-right: 15px;
-  margin-bottom: 0;
-}
-.nav-list > li > a,
-.nav-list .nav-header {
-  margin-left:  -15px;
-  margin-right: -15px;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-}
-.nav-list > li > a {
-  padding: 3px 15px;
-}
-.nav-list > .active > a,
-.nav-list > .active > a:hover,
-.nav-list > .active > a:focus {
-  color: @white;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
-  background-color: @linkColor;
-}
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  margin-right: 2px;
-}
-// Dividers (basically an hr) within the dropdown
-.nav-list .divider {
-  .nav-divider();
-}
-
-
-
-// TABS AND PILLS
-// -------------
-
-// Common styles
-.nav-tabs,
-.nav-pills {
-  .clearfix();
-}
-.nav-tabs > li,
-.nav-pills > li {
-  float: left;
-}
-.nav-tabs > li > a,
-.nav-pills > li > a {
-  padding-right: 12px;
-  padding-left: 12px;
-  margin-right: 2px;
-  line-height: 14px; // keeps the overall height an even number
-}
-
-// TABS
-// ----
-
-// Give the tabs something to sit on
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-// Make the list-items overlay the bottom border
-.nav-tabs > li {
-  margin-bottom: -1px;
-}
-// Actual tabs (as links)
-.nav-tabs > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  line-height: @baseLineHeight;
-  border: 1px solid transparent;
-  .border-radius(4px 4px 0 0);
-  &:hover,
-  &:focus {
-    border-color: @grayLighter @grayLighter #ddd;
-  }
-}
-// Active state, and it's :hover/:focus to override normal :hover/:focus
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover,
-.nav-tabs > .active > a:focus {
-  color: @gray;
-  background-color: @bodyBackground;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-  cursor: default;
-}
-
-
-// PILLS
-// -----
-
-// Links rendered as pills
-.nav-pills > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  margin-top: 2px;
-  margin-bottom: 2px;
-  .border-radius(5px);
-}
-
-// Active state
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover,
-.nav-pills > .active > a:focus {
-  color: @white;
-  background-color: @linkColor;
-}
-
-
-
-// STACKED NAV
-// -----------
-
-// Stacked tabs and pills
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li > a {
-  margin-right: 0; // no need for the gap between nav items
-}
-
-// Tabs
-.nav-tabs.nav-stacked {
-  border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
-  .border-radius(0);
-}
-.nav-tabs.nav-stacked > li:first-child > a {
-  .border-top-radius(4px);
-}
-.nav-tabs.nav-stacked > li:last-child > a {
-  .border-bottom-radius(4px);
-}
-.nav-tabs.nav-stacked > li > a:hover,
-.nav-tabs.nav-stacked > li > a:focus {
-  border-color: #ddd;
-  z-index: 2;
-}
-
-// Pills
-.nav-pills.nav-stacked > li > a {
-  margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
-  margin-bottom: 1px; // decrease margin to match sizing of stacked tabs
-}
-
-
-
-// DROPDOWNS
-// ---------
-
-.nav-tabs .dropdown-menu {
-  .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu
-}
-.nav-pills .dropdown-menu {
-  .border-radius(6px); // make rounded corners match the pills
-}
-
-// Default dropdown links
-// -------------------------
-// Make carets use linkColor to start
-.nav .dropdown-toggle .caret {
-  border-top-color: @linkColor;
-  border-bottom-color: @linkColor;
-  margin-top: 6px;
-}
-.nav .dropdown-toggle:hover .caret,
-.nav .dropdown-toggle:focus .caret {
-  border-top-color: @linkColorHover;
-  border-bottom-color: @linkColorHover;
-}
-/* move down carets for tabs */
-.nav-tabs .dropdown-toggle .caret {
-  margin-top: 8px;
-}
-
-// Active dropdown links
-// -------------------------
-.nav .active .dropdown-toggle .caret {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.nav-tabs .active .dropdown-toggle .caret {
-  border-top-color: @gray;
-  border-bottom-color: @gray;
-}
-
-// Active:hover/:focus dropdown links
-// -------------------------
-.nav > .dropdown.active > a:hover,
-.nav > .dropdown.active > a:focus {
-  cursor: pointer;
-}
-
-// Open dropdowns
-// -------------------------
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover,
-.nav > li.dropdown.open.active > a:focus {
-  color: @white;
-  background-color: @grayLight;
-  border-color: @grayLight;
-}
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret,
-.nav li.dropdown.open a:focus .caret {
-  border-top-color: @white;
-  border-bottom-color: @white;
-  .opacity(100);
-}
-
-// Dropdowns in stacked tabs
-.tabs-stacked .open > a:hover,
-.tabs-stacked .open > a:focus {
-  border-color: @grayLight;
-}
-
-
-
-// TABBABLE
-// --------
-
-
-// COMMON STYLES
-// -------------
-
-// Clear any floats
-.tabbable {
-  .clearfix();
-}
-.tab-content {
-  overflow: auto; // prevent content from running below tabs
-}
-
-// Remove border on bottom, left, right
-.tabs-below > .nav-tabs,
-.tabs-right > .nav-tabs,
-.tabs-left > .nav-tabs {
-  border-bottom: 0;
-}
-
-// Show/hide tabbable areas
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
-  display: none;
-}
-.tab-content > .active,
-.pill-content > .active {
-  display: block;
-}
-
-
-// BOTTOM
-// ------
-
-.tabs-below > .nav-tabs {
-  border-top: 1px solid #ddd;
-}
-.tabs-below > .nav-tabs > li {
-  margin-top: -1px;
-  margin-bottom: 0;
-}
-.tabs-below > .nav-tabs > li > a {
-  .border-radius(0 0 4px 4px);
-  &:hover,
-  &:focus {
-    border-bottom-color: transparent;
-    border-top-color: #ddd;
-  }
-}
-.tabs-below > .nav-tabs > .active > a,
-.tabs-below > .nav-tabs > .active > a:hover,
-.tabs-below > .nav-tabs > .active > a:focus {
-  border-color: transparent #ddd #ddd #ddd;
-}
-
-// LEFT & RIGHT
-// ------------
-
-// Common styles
-.tabs-left > .nav-tabs > li,
-.tabs-right > .nav-tabs > li {
-  float: none;
-}
-.tabs-left > .nav-tabs > li > a,
-.tabs-right > .nav-tabs > li > a {
-  min-width: 74px;
-  margin-right: 0;
-  margin-bottom: 3px;
-}
-
-// Tabs on the left
-.tabs-left > .nav-tabs {
-  float: left;
-  margin-right: 19px;
-  border-right: 1px solid #ddd;
-}
-.tabs-left > .nav-tabs > li > a {
-  margin-right: -1px;
-  .border-radius(4px 0 0 4px);
-}
-.tabs-left > .nav-tabs > li > a:hover,
-.tabs-left > .nav-tabs > li > a:focus {
-  border-color: @grayLighter #ddd @grayLighter @grayLighter;
-}
-.tabs-left > .nav-tabs .active > a,
-.tabs-left > .nav-tabs .active > a:hover,
-.tabs-left > .nav-tabs .active > a:focus {
-  border-color: #ddd transparent #ddd #ddd;
-  *border-right-color: @white;
-}
-
-// Tabs on the right
-.tabs-right > .nav-tabs {
-  float: right;
-  margin-left: 19px;
-  border-left: 1px solid #ddd;
-}
-.tabs-right > .nav-tabs > li > a {
-  margin-left: -1px;
-  .border-radius(0 4px 4px 0);
-}
-.tabs-right > .nav-tabs > li > a:hover,
-.tabs-right > .nav-tabs > li > a:focus {
-  border-color: @grayLighter @grayLighter @grayLighter #ddd;
-}
-.tabs-right > .nav-tabs .active > a,
-.tabs-right > .nav-tabs .active > a:hover,
-.tabs-right > .nav-tabs .active > a:focus {
-  border-color: #ddd #ddd #ddd transparent;
-  *border-left-color: @white;
-}
-
-
-
-// DISABLED STATES
-// ---------------
-
-// Gray out text
-.nav > .disabled > a {
-  color: @grayLight;
-}
-// Nuke hover/focus effects
-.nav > .disabled > a:hover,
-.nav > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  cursor: default;
-}
diff --git a/assets/less/bootstrap/pager.less b/assets/less/bootstrap/pager.less
deleted file mode 100644
index 1476188..0000000
--- a/assets/less/bootstrap/pager.less
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Pager pagination
-// --------------------------------------------------
-
-
-.pager {
-  margin: @baseLineHeight 0;
-  list-style: none;
-  text-align: center;
-  .clearfix();
-}
-.pager li {
-  display: inline;
-}
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  .border-radius(15px);
-}
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: @grayLight;
-  background-color: #fff;
-  cursor: default;
-}
\ No newline at end of file
diff --git a/assets/less/bootstrap/pagination.less b/assets/less/bootstrap/pagination.less
deleted file mode 100644
index a789db2..0000000
--- a/assets/less/bootstrap/pagination.less
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// Pagination (multiple pages)
-// --------------------------------------------------
-
-// Space out pagination from surrounding content
-.pagination {
-  margin: @baseLineHeight 0;
-}
-
-.pagination ul {
-  // Allow for text-based alignment
-  display: inline-block;
-  .ie7-inline-block();
-  // Reset default ul styles
-  margin-left: 0;
-  margin-bottom: 0;
-  // Visuals
-  .border-radius(@baseBorderRadius);
-  .box-shadow(0 1px 2px rgba(0,0,0,.05));
-}
-.pagination ul > li {
-  display: inline; // Remove list-style and block-level defaults
-}
-.pagination ul > li > a,
-.pagination ul > li > span {
-  float: left; // Collapse white-space
-  padding: 4px 12px;
-  line-height: @baseLineHeight;
-  text-decoration: none;
-  background-color: @paginationBackground;
-  border: 1px solid @paginationBorder;
-  border-left-width: 0;
-}
-.pagination ul > li > a:hover,
-.pagination ul > li > a:focus,
-.pagination ul > .active > a,
-.pagination ul > .active > span {
-  background-color: @paginationActiveBackground;
-}
-.pagination ul > .active > a,
-.pagination ul > .active > span {
-  color: @grayLight;
-  cursor: default;
-}
-.pagination ul > .disabled > span,
-.pagination ul > .disabled > a,
-.pagination ul > .disabled > a:hover,
-.pagination ul > .disabled > a:focus {
-  color: @grayLight;
-  background-color: transparent;
-  cursor: default;
-}
-.pagination ul > li:first-child > a,
-.pagination ul > li:first-child > span {
-  border-left-width: 1px;
-  .border-left-radius(@baseBorderRadius);
-}
-.pagination ul > li:last-child > a,
-.pagination ul > li:last-child > span {
-  .border-right-radius(@baseBorderRadius);
-}
-
-
-// Alignment
-// --------------------------------------------------
-
-.pagination-centered {
-  text-align: center;
-}
-.pagination-right {
-  text-align: right;
-}
-
-
-// Sizing
-// --------------------------------------------------
-
-// Large
-.pagination-large {
-  ul > li > a,
-  ul > li > span {
-    padding: @paddingLarge;
-    font-size: @fontSizeLarge;
-  }
-  ul > li:first-child > a,
-  ul > li:first-child > span {
-    .border-left-radius(@borderRadiusLarge);
-  }
-  ul > li:last-child > a,
-  ul > li:last-child > span {
-    .border-right-radius(@borderRadiusLarge);
-  }
-}
-
-// Small and mini
-.pagination-mini,
-.pagination-small {
-  ul > li:first-child > a,
-  ul > li:first-child > span {
-    .border-left-radius(@borderRadiusSmall);
-  }
-  ul > li:last-child > a,
-  ul > li:last-child > span {
-    .border-right-radius(@borderRadiusSmall);
-  }
-}
-
-// Small
-.pagination-small {
-  ul > li > a,
-  ul > li > span {
-    padding: @paddingSmall;
-    font-size: @fontSizeSmall;
-  }
-}
-// Mini
-.pagination-mini {
-  ul > li > a,
-  ul > li > span {
-    padding: @paddingMini;
-    font-size: @fontSizeMini;
-  }
-}
diff --git a/assets/less/bootstrap/popovers.less b/assets/less/bootstrap/popovers.less
deleted file mode 100644
index aae35c8..0000000
--- a/assets/less/bootstrap/popovers.less
+++ /dev/null
@@ -1,133 +0,0 @@
-//
-// Popovers
-// --------------------------------------------------
-
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: @zindexPopover;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  text-align: left; // Reset given new insertion method
-  background-color: @popoverBackground;
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0,0,0,.2);
-  .border-radius(6px);
-  .box-shadow(0 5px 10px rgba(0,0,0,.2));
-
-  // Overrides for proper insertion
-  white-space: normal;
-
-  // Offset the popover to account for the popover arrow
-  &.top     { margin-top: -10px; }
-  &.right   { margin-left: 10px; }
-  &.bottom  { margin-top: 10px; }
-  &.left    { margin-left: -10px; }
-}
-
-.popover-title {
-  margin: 0; // reset heading margin
-  padding: 8px 14px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 18px;
-  background-color: @popoverTitleBackground;
-  border-bottom: 1px solid darken(@popoverTitleBackground, 5%);
-  .border-radius(5px 5px 0 0);
-
-  &:empty {
-    display: none;
-  }
-}
-
-.popover-content {
-  padding: 9px 14px;
-}
-
-// Arrows
-//
-// .arrow is outer, .arrow:after is inner
-
-.popover .arrow,
-.popover .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.popover .arrow {
-  border-width: @popoverArrowOuterWidth;
-}
-.popover .arrow:after {
-  border-width: @popoverArrowWidth;
-  content: "";
-}
-
-.popover {
-  &.top .arrow {
-    left: 50%;
-    margin-left: -@popoverArrowOuterWidth;
-    border-bottom-width: 0;
-    border-top-color: #999; // IE8 fallback
-    border-top-color: @popoverArrowOuterColor;
-    bottom: -@popoverArrowOuterWidth;
-    &:after {
-      bottom: 1px;
-      margin-left: -@popoverArrowWidth;
-      border-bottom-width: 0;
-      border-top-color: @popoverArrowColor;
-    }
-  }
-  &.right .arrow {
-    top: 50%;
-    left: -@popoverArrowOuterWidth;
-    margin-top: -@popoverArrowOuterWidth;
-    border-left-width: 0;
-    border-right-color: #999; // IE8 fallback
-    border-right-color: @popoverArrowOuterColor;
-    &:after {
-      left: 1px;
-      bottom: -@popoverArrowWidth;
-      border-left-width: 0;
-      border-right-color: @popoverArrowColor;
-    }
-  }
-  &.bottom .arrow {
-    left: 50%;
-    margin-left: -@popoverArrowOuterWidth;
-    border-top-width: 0;
-    border-bottom-color: #999; // IE8 fallback
-    border-bottom-color: @popoverArrowOuterColor;
-    top: -@popoverArrowOuterWidth;
-    &:after {
-      top: 1px;
-      margin-left: -@popoverArrowWidth;
-      border-top-width: 0;
-      border-bottom-color: @popoverArrowColor;
-    }
-  }
-
-  &.left .arrow {
-    top: 50%;
-    right: -@popoverArrowOuterWidth;
-    margin-top: -@popoverArrowOuterWidth;
-    border-right-width: 0;
-    border-left-color: #999; // IE8 fallback
-    border-left-color: @popoverArrowOuterColor;
-    &:after {
-      right: 1px;
-      border-right-width: 0;
-      border-left-color: @popoverArrowColor;
-      bottom: -@popoverArrowWidth;
-    }
-  }
-
-}
diff --git a/assets/less/bootstrap/progress-bars.less b/assets/less/bootstrap/progress-bars.less
deleted file mode 100644
index 5e0c3dd..0000000
--- a/assets/less/bootstrap/progress-bars.less
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// Progress bars
-// --------------------------------------------------
-
-
-// ANIMATIONS
-// ----------
-
-// Webkit
-@-webkit-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// Firefox
-@-moz-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// IE9
-@-ms-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// Opera
-@-o-keyframes progress-bar-stripes {
-  from  { background-position: 0 0; }
-  to    { background-position: 40px 0; }
-}
-
-// Spec
-@keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-
-
-// THE BARS
-// --------
-
-// Outer container
-.progress {
-  overflow: hidden;
-  height: @baseLineHeight;
-  margin-bottom: @baseLineHeight;
-  #gradient > .vertical(#f5f5f5, #f9f9f9);
-  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
-  .border-radius(@baseBorderRadius);
-}
-
-// Bar of progress
-.progress .bar {
-  width: 0%;
-  height: 100%;
-  color: @white;
-  float: left;
-  font-size: 12px;
-  text-align: center;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-  #gradient > .vertical(#149bdf, #0480be);
-  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
-  .box-sizing(border-box);
-  .transition(width .6s ease);
-}
-.progress .bar + .bar {
-  .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)");
-}
-
-// Striped bars
-.progress-striped .bar {
-  #gradient > .striped(#149bdf);
-  .background-size(40px 40px);
-}
-
-// Call animation for the active one
-.progress.active .bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-     -moz-animation: progress-bar-stripes 2s linear infinite;
-      -ms-animation: progress-bar-stripes 2s linear infinite;
-       -o-animation: progress-bar-stripes 2s linear infinite;
-          animation: progress-bar-stripes 2s linear infinite;
-}
-
-
-
-// COLORS
-// ------
-
-// Danger (red)
-.progress-danger .bar, .progress .bar-danger {
-  #gradient > .vertical(#ee5f5b, #c43c35);
-}
-.progress-danger.progress-striped .bar, .progress-striped .bar-danger {
-  #gradient > .striped(#ee5f5b);
-}
-
-// Success (green)
-.progress-success .bar, .progress .bar-success {
-  #gradient > .vertical(#62c462, #57a957);
-}
-.progress-success.progress-striped .bar, .progress-striped .bar-success {
-  #gradient > .striped(#62c462);
-}
-
-// Info (teal)
-.progress-info .bar, .progress .bar-info {
-  #gradient > .vertical(#5bc0de, #339bb9);
-}
-.progress-info.progress-striped .bar, .progress-striped .bar-info {
-  #gradient > .striped(#5bc0de);
-}
-
-// Warning (orange)
-.progress-warning .bar, .progress .bar-warning {
-  #gradient > .vertical(lighten(@orange, 15%), @orange);
-}
-.progress-warning.progress-striped .bar, .progress-striped .bar-warning {
-  #gradient > .striped(lighten(@orange, 15%));
-}
diff --git a/assets/less/bootstrap/reset.less b/assets/less/bootstrap/reset.less
deleted file mode 100644
index 4806bd5..0000000
--- a/assets/less/bootstrap/reset.less
+++ /dev/null
@@ -1,216 +0,0 @@
-//
-// Reset CSS
-// Adapted from http://github.com/necolas/normalize.css
-// --------------------------------------------------
-
-
-// Display in IE6-9 and FF3
-// -------------------------
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-
-// Display block in IE6-9 and FF3
-// -------------------------
-
-audio,
-canvas,
-video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-
-// Prevents modern browsers from displaying 'audio' without controls
-// -------------------------
-
-audio:not([controls]) {
-    display: none;
-}
-
-// Base settings
-// -------------------------
-
-html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-// Focus states
-a:focus {
-  .tab-focus();
-}
-// Hover & Active
-a:hover,
-a:active {
-  outline: 0;
-}
-
-// Prevents sub and sup affecting line-height in all browsers
-// -------------------------
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-
-// Img border in a's and image quality
-// -------------------------
-
-img {
-  /* Responsive images (ensure images don't scale beyond their parents) */
-  max-width: 100%; /* Part 1: Set a maxium relative to the parent */
-  width: auto\9; /* IE7-8 need help adjusting responsive images */
-  height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */
-
-  vertical-align: middle;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-
-// Prevent max-width from affecting Google Maps
-#map_canvas img,
-.google-maps img {
-  max-width: none;
-}
-
-// Forms
-// -------------------------
-
-// Font size in all browsers, margin changes, misc consistency
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-button,
-input {
-  *overflow: visible; // Inner spacing ie IE6/7
-  line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
-  padding: 0;
-  border: 0;
-}
-button,
-html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls.
-input[type="reset"],
-input[type="submit"] {
-    -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS.
-    cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
-}
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
-    cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
-}
-input[type="search"] { // Appearance in Safari/Chrome
-  .box-sizing(content-box);
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
-}
-textarea {
-  overflow: auto; // Remove vertical scrollbar in IE6-9
-  vertical-align: top; // Readability and alignment cross-browser
-}
-
-
-// Printing
-// -------------------------
-// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
-
-@media print {
-
-  * {
-    text-shadow: none !important;
-    color: #000 !important; // Black prints faster: h5bp.com/s
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-
-  // Don't show links for images, or javascript/internal links
-  .ir a:after,
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-
-  thead {
-    display: table-header-group; // h5bp.com/t
-  }
-
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-
-  img {
-    max-width: 100% !important;
-  }
-
-  @page {
-    margin: 0.5cm;
-  }
-
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-}
diff --git a/assets/less/bootstrap/responsive-1200px-min.less b/assets/less/bootstrap/responsive-1200px-min.less
deleted file mode 100644
index 4f35ba6..0000000
--- a/assets/less/bootstrap/responsive-1200px-min.less
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Responsive: Large desktop and up
-// --------------------------------------------------
-
-
-@media (min-width: 1200px) {
-
-  // Fixed grid
-  #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200);
-
-  // Fluid grid
-  #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200);
-
-  // Input grid
-  #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200);
-
-  // Thumbnails
-  .thumbnails {
-    margin-left: -@gridGutterWidth1200;
-  }
-  .thumbnails > li {
-    margin-left: @gridGutterWidth1200;
-  }
-  .row-fluid .thumbnails {
-    margin-left: 0;
-  }
-
-}
diff --git a/assets/less/bootstrap/responsive-767px-max.less b/assets/less/bootstrap/responsive-767px-max.less
deleted file mode 100644
index 128f4ce..0000000
--- a/assets/less/bootstrap/responsive-767px-max.less
+++ /dev/null
@@ -1,193 +0,0 @@
-//
-// Responsive: Landscape phone to desktop/tablet
-// --------------------------------------------------
-
-
-@media (max-width: 767px) {
-
-  // Padding to set content in a bit
-  body {
-    padding-left: 20px;
-    padding-right: 20px;
-  }
-  // Negative indent the now static "fixed" navbar
-  .navbar-fixed-top,
-  .navbar-fixed-bottom,
-  .navbar-static-top {
-    margin-left: -20px;
-    margin-right: -20px;
-  }
-  // Remove padding on container given explicit padding set on body
-  .container-fluid {
-    padding: 0;
-  }
-
-  // TYPOGRAPHY
-  // ----------
-  // Reset horizontal dl
-  .dl-horizontal {
-    dt {
-      float: none;
-      clear: none;
-      width: auto;
-      text-align: left;
-    }
-    dd {
-      margin-left: 0;
-    }
-  }
-
-  // GRID & CONTAINERS
-  // -----------------
-  // Remove width from containers
-  .container {
-    width: auto;
-  }
-  // Fluid rows
-  .row-fluid {
-    width: 100%;
-  }
-  // Undo negative margin on rows and thumbnails
-  .row,
-  .thumbnails {
-    margin-left: 0;
-  }
-  .thumbnails > li {
-    float: none;
-    margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present
-  }
-  // Make all grid-sized elements block level again
-  [class*="span"],
-  .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing
-  .row-fluid [class*="span"] {
-    float: none;
-    display: block;
-    width: 100%;
-    margin-left: 0;
-    .box-sizing(border-box);
-  }
-  .span12,
-  .row-fluid .span12 {
-    width: 100%;
-    .box-sizing(border-box);
-  }
-  .row-fluid [class*="offset"]:first-child {
-    margin-left: 0;
-  }
-
-  // FORM FIELDS
-  // -----------
-  // Make span* classes full width
-  .input-large,
-  .input-xlarge,
-  .input-xxlarge,
-  input[class*="span"],
-  select[class*="span"],
-  textarea[class*="span"],
-  .uneditable-input {
-    .input-block-level();
-  }
-  // But don't let it screw up prepend/append inputs
-  .input-prepend input,
-  .input-append input,
-  .input-prepend input[class*="span"],
-  .input-append input[class*="span"] {
-    display: inline-block; // redeclare so they don't wrap to new lines
-    width: auto;
-  }
-  .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 0;
-  }
-
-  // Modals
-  .modal {
-    position: fixed;
-    top:   20px;
-    left:  20px;
-    right: 20px;
-    width: auto;
-    margin: 0;
-    &.fade  { top: -100px; }
-    &.fade.in { top: 20px; }
-  }
-
-}
-
-
-
-// UP TO LANDSCAPE PHONE
-// ---------------------
-
-@media (max-width: 480px) {
-
-  // Smooth out the collapsing/expanding nav
-  .nav-collapse {
-    -webkit-transform: translate3d(0, 0, 0); // activate the GPU
-  }
-
-  // Block level the page header small tag for readability
-  .page-header h1 small {
-    display: block;
-    line-height: @baseLineHeight;
-  }
-
-  // Update checkboxes for iOS
-  input[type="checkbox"],
-  input[type="radio"] {
-    border: 1px solid #ccc;
-  }
-
-  // Remove the horizontal form styles
-  .form-horizontal {
-    .control-label {
-      float: none;
-      width: auto;
-      padding-top: 0;
-      text-align: left;
-    }
-    // Move over all input controls and content
-    .controls {
-      margin-left: 0;
-    }
-    // Move the options list down to align with labels
-    .control-list {
-      padding-top: 0; // has to be padding because margin collaspes
-    }
-    // Move over buttons in .form-actions to align with .controls
-    .form-actions {
-      padding-left: 10px;
-      padding-right: 10px;
-    }
-  }
-
-  // Medias
-  // Reset float and spacing to stack
-  .media .pull-left,
-  .media .pull-right  {
-    float: none;
-    display: block;
-    margin-bottom: 10px;
-  }
-  // Remove side margins since we stack instead of indent
-  .media-object {
-    margin-right: 0;
-    margin-left: 0;
-  }
-
-  // Modals
-  .modal {
-    top:   10px;
-    left:  10px;
-    right: 10px;
-  }
-  .modal-header .close {
-    padding: 10px;
-    margin: -10px;
-  }
-
-  // Carousel
-  .carousel-caption {
-    position: static;
-  }
-
-}
diff --git a/assets/less/bootstrap/responsive-768px-979px.less b/assets/less/bootstrap/responsive-768px-979px.less
deleted file mode 100644
index 8e8c486..0000000
--- a/assets/less/bootstrap/responsive-768px-979px.less
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Responsive: Tablet to desktop
-// --------------------------------------------------
-
-
-@media (min-width: 768px) and (max-width: 979px) {
-
-  // Fixed grid
-  #grid > .core(@gridColumnWidth768, @gridGutterWidth768);
-
-  // Fluid grid
-  #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768);
-
-  // Input grid
-  #grid > .input(@gridColumnWidth768, @gridGutterWidth768);
-
-  // No need to reset .thumbnails here since it's the same @gridGutterWidth
-
-}
diff --git a/assets/less/bootstrap/responsive-navbar.less b/assets/less/bootstrap/responsive-navbar.less
deleted file mode 100644
index 21cd3ba..0000000
--- a/assets/less/bootstrap/responsive-navbar.less
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// Responsive: Navbar
-// --------------------------------------------------
-
-
-// TABLETS AND BELOW
-// -----------------
-@media (max-width: @navbarCollapseWidth) {
-
-  // UNFIX THE TOPBAR
-  // ----------------
-  // Remove any padding from the body
-  body {
-    padding-top: 0;
-  }
-  // Unfix the navbars
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    position: static;
-  }
-  .navbar-fixed-top {
-    margin-bottom: @baseLineHeight;
-  }
-  .navbar-fixed-bottom {
-    margin-top: @baseLineHeight;
-  }
-  .navbar-fixed-top .navbar-inner,
-  .navbar-fixed-bottom .navbar-inner {
-    padding: 5px;
-  }
-  .navbar .container {
-    width: auto;
-    padding: 0;
-  }
-  // Account for brand name
-  .navbar .brand {
-    padding-left: 10px;
-    padding-right: 10px;
-    margin: 0 0 0 -5px;
-  }
-
-  // COLLAPSIBLE NAVBAR
-  // ------------------
-  // Nav collapse clears brand
-  .nav-collapse {
-    clear: both;
-  }
-  // Block-level the nav
-  .nav-collapse .nav {
-    float: none;
-    margin: 0 0 (@baseLineHeight / 2);
-  }
-  .nav-collapse .nav > li {
-    float: none;
-  }
-  .nav-collapse .nav > li > a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > .divider-vertical {
-    display: none;
-  }
-  .nav-collapse .nav .nav-header {
-    color: @navbarText;
-    text-shadow: none;
-  }
-  // Nav and dropdown links in navbar
-  .nav-collapse .nav > li > a,
-  .nav-collapse .dropdown-menu a {
-    padding: 9px 15px;
-    font-weight: bold;
-    color: @navbarLinkColor;
-    .border-radius(3px);
-  }
-  // Buttons
-  .nav-collapse .btn {
-    padding: 4px 10px 4px;
-    font-weight: normal;
-    .border-radius(@baseBorderRadius);
-  }
-  .nav-collapse .dropdown-menu li + li a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > li > a:hover,
-  .nav-collapse .nav > li > a:focus,
-  .nav-collapse .dropdown-menu a:hover,
-  .nav-collapse .dropdown-menu a:focus {
-    background-color: @navbarBackground;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a,
-  .navbar-inverse .nav-collapse .dropdown-menu a {
-    color: @navbarInverseLinkColor;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a:hover,
-  .navbar-inverse .nav-collapse .nav > li > a:focus,
-  .navbar-inverse .nav-collapse .dropdown-menu a:hover,
-  .navbar-inverse .nav-collapse .dropdown-menu a:focus {
-    background-color: @navbarInverseBackground;
-  }
-  // Buttons in the navbar
-  .nav-collapse.in .btn-group {
-    margin-top: 5px;
-    padding: 0;
-  }
-  // Dropdowns in the navbar
-  .nav-collapse .dropdown-menu {
-    position: static;
-    top: auto;
-    left: auto;
-    float: none;
-    display: none;
-    max-width: none;
-    margin: 0 15px;
-    padding: 0;
-    background-color: transparent;
-    border: none;
-    .border-radius(0);
-    .box-shadow(none);
-  }
-  .nav-collapse .open > .dropdown-menu { 
-    display: block; 
-  }
-
-  .nav-collapse .dropdown-menu:before,
-  .nav-collapse .dropdown-menu:after {
-    display: none;
-  }
-  .nav-collapse .dropdown-menu .divider {
-    display: none;
-  }
-  .nav-collapse .nav > li > .dropdown-menu {
-    &:before,
-    &:after {
-      display: none;
-    }
-  }
-  // Forms in navbar
-  .nav-collapse .navbar-form,
-  .nav-collapse .navbar-search {
-    float: none;
-    padding: (@baseLineHeight / 2) 15px;
-    margin: (@baseLineHeight / 2) 0;
-    border-top: 1px solid @navbarBackground;
-    border-bottom: 1px solid @navbarBackground;
-    .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)");
-  }
-  .navbar-inverse .nav-collapse .navbar-form,
-  .navbar-inverse .nav-collapse .navbar-search {
-    border-top-color: @navbarInverseBackground;
-    border-bottom-color: @navbarInverseBackground;
-  }
-  // Pull right (secondary) nav content
-  .navbar .nav-collapse .nav.pull-right {
-    float: none;
-    margin-left: 0;
-  }
-  // Hide everything in the navbar save .brand and toggle button */
-  .nav-collapse,
-  .nav-collapse.collapse {
-    overflow: hidden;
-    height: 0;
-  }
-  // Navbar button
-  .navbar .btn-navbar {
-    display: block;
-  }
-
-  // STATIC NAVBAR
-  // -------------
-  .navbar-static .navbar-inner {
-    padding-left:  10px;
-    padding-right: 10px;
-  }
-
-
-}
-
-
-// DEFAULT DESKTOP
-// ---------------
-
-@media (min-width: @navbarCollapseDesktopWidth) {
-
-  // Required to make the collapsing navbar work on regular desktops
-  .nav-collapse.collapse {
-    height: auto !important;
-    overflow: visible !important;
-  }
-
-}
diff --git a/assets/less/bootstrap/responsive-utilities.less b/assets/less/bootstrap/responsive-utilities.less
deleted file mode 100644
index bf43e8e..0000000
--- a/assets/less/bootstrap/responsive-utilities.less
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Responsive: Utility classes
-// --------------------------------------------------
-
-
-// IE10 Metro responsive
-// Required for Windows 8 Metro split-screen snapping with IE10
-// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
-@-ms-viewport{
-  width: device-width;
-}
-
-// Hide from screenreaders and browsers
-// Credit: HTML5 Boilerplate
-.hidden {
-  display: none;
-  visibility: hidden;
-}
-
-// Visibility utilities
-
-// For desktops
-.visible-phone     { display: none !important; }
-.visible-tablet    { display: none !important; }
-.hidden-phone      { }
-.hidden-tablet     { }
-.hidden-desktop    { display: none !important; }
-.visible-desktop   { display: inherit !important; }
-
-// Tablets & small desktops only
-@media (min-width: 768px) and (max-width: 979px) {
-  // Hide everything else
-  .hidden-desktop    { display: inherit !important; }
-  .visible-desktop   { display: none !important ; }
-  // Show
-  .visible-tablet    { display: inherit !important; }
-  // Hide
-  .hidden-tablet     { display: none !important; }
-}
-
-// Phones only
-@media (max-width: 767px) {
-  // Hide everything else
-  .hidden-desktop    { display: inherit !important; }
-  .visible-desktop   { display: none !important; }
-  // Show
-  .visible-phone     { display: inherit !important; } // Use inherit to restore previous behavior
-  // Hide
-  .hidden-phone      { display: none !important; }
-}
-
-// Print utilities
-.visible-print    { display: none !important; }
-.hidden-print     { }
-
-@media print {
-  .visible-print  { display: inherit !important; }
-  .hidden-print   { display: none !important; }
-}
diff --git a/assets/less/bootstrap/responsive.less b/assets/less/bootstrap/responsive.less
deleted file mode 100644
index 9e5f9b1..0000000
--- a/assets/less/bootstrap/responsive.less
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-
-// Responsive.less
-// For phone and tablet devices
-// -------------------------------------------------------------
-
-
-// REPEAT VARIABLES & MIXINS
-// -------------------------
-// Required since we compile the responsive stuff separately
-
-@import "variables.less"; // Modify this for custom colors, font-sizes, etc
-@import "mixins.less";
-
-
-// RESPONSIVE CLASSES
-// ------------------
-
-@import "responsive-utilities.less";
-
-
-// MEDIA QUERIES
-// ------------------
-
-// Large desktops
-@import "responsive-1200px-min.less";
-
-// Tablets to regular desktops
-@import "responsive-768px-979px.less";
-
-// Phones to portrait tablets and narrow desktops
-@import "responsive-767px-max.less";
-
-
-// RESPONSIVE NAVBAR
-// ------------------
-
-// From 979px and below, show a button to toggle navbar contents
-@import "responsive-navbar.less";
diff --git a/assets/less/bootstrap/scaffolding.less b/assets/less/bootstrap/scaffolding.less
deleted file mode 100644
index f17e8ca..0000000
--- a/assets/less/bootstrap/scaffolding.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Scaffolding
-// --------------------------------------------------
-
-
-// Body reset
-// -------------------------
-
-body {
-  margin: 0;
-  font-family: @baseFontFamily;
-  font-size: @baseFontSize;
-  line-height: @baseLineHeight;
-  color: @textColor;
-  background-color: @bodyBackground;
-}
-
-
-// Links
-// -------------------------
-
-a {
-  color: @linkColor;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: @linkColorHover;
-  text-decoration: underline;
-}
-
-
-// Images
-// -------------------------
-
-// Rounded corners
-.img-rounded {
-  .border-radius(6px);
-}
-
-// Add polaroid-esque trim
-.img-polaroid {
-  padding: 4px;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0,0,0,.2);
-  .box-shadow(0 1px 3px rgba(0,0,0,.1));
-}
-
-// Perfect circle
-.img-circle {
-  .border-radius(500px); // crank the border-radius so it works with most reasonably sized images
-}
diff --git a/assets/less/bootstrap/sprites.less b/assets/less/bootstrap/sprites.less
deleted file mode 100644
index 1812bf7..0000000
--- a/assets/less/bootstrap/sprites.less
+++ /dev/null
@@ -1,197 +0,0 @@
-//
-// Sprites
-// --------------------------------------------------
-
-
-// ICONS
-// -----
-
-// All icons receive the styles of the <i> tag with a base class
-// of .i and are then given a unique class to add width, height,
-// and background-position. Your resulting HTML will look like
-// <i class="icon-inbox"></i>.
-
-// For the white version of the icons, just add the .icon-white class:
-// <i class="icon-inbox icon-white"></i>
-
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline-block;
-  width: 14px;
-  height: 14px;
-  .ie7-restore-right-whitespace();
-  line-height: 14px;
-  vertical-align: text-top;
-  background-image: url("@{iconSpritePath}");
-  background-position: 14px 14px;
-  background-repeat: no-repeat;
-  margin-top: 1px;
-}
-
-/* White icons with optional class, or on hover/focus/active states of certain elements */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:focus > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > li > a:focus > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:focus > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"],
-.dropdown-submenu:focus > a > [class*=" icon-"] {
-  background-image: url("@{iconWhiteSpritePath}");
-}
-
-.icon-glass              { background-position: 0      0; }
-.icon-music              { background-position: -24px  0; }
-.icon-search             { background-position: -48px  0; }
-.icon-envelope           { background-position: -72px  0; }
-.icon-heart              { background-position: -96px  0; }
-.icon-star               { background-position: -120px 0; }
-.icon-star-empty         { background-position: -144px 0; }
-.icon-user               { background-position: -168px 0; }
-.icon-film               { background-position: -192px 0; }
-.icon-th-large           { background-position: -216px 0; }
-.icon-th                 { background-position: -240px 0; }
-.icon-th-list            { background-position: -264px 0; }
-.icon-ok                 { background-position: -288px 0; }
-.icon-remove             { background-position: -312px 0; }
-.icon-zoom-in            { background-position: -336px 0; }
-.icon-zoom-out           { background-position: -360px 0; }
-.icon-off                { background-position: -384px 0; }
-.icon-signal             { background-position: -408px 0; }
-.icon-cog                { background-position: -432px 0; }
-.icon-trash              { background-position: -456px 0; }
-
-.icon-home               { background-position: 0      -24px; }
-.icon-file               { background-position: -24px  -24px; }
-.icon-time               { background-position: -48px  -24px; }
-.icon-road               { background-position: -72px  -24px; }
-.icon-download-alt       { background-position: -96px  -24px; }
-.icon-download           { background-position: -120px -24px; }
-.icon-upload             { background-position: -144px -24px; }
-.icon-inbox              { background-position: -168px -24px; }
-.icon-play-circle        { background-position: -192px -24px; }
-.icon-repeat             { background-position: -216px -24px; }
-.icon-refresh            { background-position: -240px -24px; }
-.icon-list-alt           { background-position: -264px -24px; }
-.icon-lock               { background-position: -287px -24px; } // 1px off
-.icon-flag               { background-position: -312px -24px; }
-.icon-headphones         { background-position: -336px -24px; }
-.icon-volume-off         { background-position: -360px -24px; }
-.icon-volume-down        { background-position: -384px -24px; }
-.icon-volume-up          { background-position: -408px -24px; }
-.icon-qrcode             { background-position: -432px -24px; }
-.icon-barcode            { background-position: -456px -24px; }
-
-.icon-tag                { background-position: 0      -48px; }
-.icon-tags               { background-position: -25px  -48px; } // 1px off
-.icon-book               { background-position: -48px  -48px; }
-.icon-bookmark           { background-position: -72px  -48px; }
-.icon-print              { background-position: -96px  -48px; }
-.icon-camera             { background-position: -120px -48px; }
-.icon-font               { background-position: -144px -48px; }
-.icon-bold               { background-position: -167px -48px; } // 1px off
-.icon-italic             { background-position: -192px -48px; }
-.icon-text-height        { background-position: -216px -48px; }
-.icon-text-width         { background-position: -240px -48px; }
-.icon-align-left         { background-position: -264px -48px; }
-.icon-align-center       { background-position: -288px -48px; }
-.icon-align-right        { background-position: -312px -48px; }
-.icon-align-justify      { background-position: -336px -48px; }
-.icon-list               { background-position: -360px -48px; }
-.icon-indent-left        { background-position: -384px -48px; }
-.icon-indent-right       { background-position: -408px -48px; }
-.icon-facetime-video     { background-position: -432px -48px; }
-.icon-picture            { background-position: -456px -48px; }
-
-.icon-pencil             { background-position: 0      -72px; }
-.icon-map-marker         { background-position: -24px  -72px; }
-.icon-adjust             { background-position: -48px  -72px; }
-.icon-tint               { background-position: -72px  -72px; }
-.icon-edit               { background-position: -96px  -72px; }
-.icon-share              { background-position: -120px -72px; }
-.icon-check              { background-position: -144px -72px; }
-.icon-move               { background-position: -168px -72px; }
-.icon-step-backward      { background-position: -192px -72px; }
-.icon-fast-backward      { background-position: -216px -72px; }
-.icon-backward           { background-position: -240px -72px; }
-.icon-play               { background-position: -264px -72px; }
-.icon-pause              { background-position: -288px -72px; }
-.icon-stop               { background-position: -312px -72px; }
-.icon-forward            { background-position: -336px -72px; }
-.icon-fast-forward       { background-position: -360px -72px; }
-.icon-step-forward       { background-position: -384px -72px; }
-.icon-eject              { background-position: -408px -72px; }
-.icon-chevron-left       { background-position: -432px -72px; }
-.icon-chevron-right      { background-position: -456px -72px; }
-
-.icon-plus-sign          { background-position: 0      -96px; }
-.icon-minus-sign         { background-position: -24px  -96px; }
-.icon-remove-sign        { background-position: -48px  -96px; }
-.icon-ok-sign            { background-position: -72px  -96px; }
-.icon-question-sign      { background-position: -96px  -96px; }
-.icon-info-sign          { background-position: -120px -96px; }
-.icon-screenshot         { background-position: -144px -96px; }
-.icon-remove-circle      { background-position: -168px -96px; }
-.icon-ok-circle          { background-position: -192px -96px; }
-.icon-ban-circle         { background-position: -216px -96px; }
-.icon-arrow-left         { background-position: -240px -96px; }
-.icon-arrow-right        { background-position: -264px -96px; }
-.icon-arrow-up           { background-position: -289px -96px; } // 1px off
-.icon-arrow-down         { background-position: -312px -96px; }
-.icon-share-alt          { background-position: -336px -96px; }
-.icon-resize-full        { background-position: -360px -96px; }
-.icon-resize-small       { background-position: -384px -96px; }
-.icon-plus               { background-position: -408px -96px; }
-.icon-minus              { background-position: -433px -96px; }
-.icon-asterisk           { background-position: -456px -96px; }
-
-.icon-exclamation-sign   { background-position: 0      -120px; }
-.icon-gift               { background-position: -24px  -120px; }
-.icon-leaf               { background-position: -48px  -120px; }
-.icon-fire               { background-position: -72px  -120px; }
-.icon-eye-open           { background-position: -96px  -120px; }
-.icon-eye-close          { background-position: -120px -120px; }
-.icon-warning-sign       { background-position: -144px -120px; }
-.icon-plane              { background-position: -168px -120px; }
-.icon-calendar           { background-position: -192px -120px; }
-.icon-random             { background-position: -216px -120px; width: 16px; }
-.icon-comment            { background-position: -240px -120px; }
-.icon-magnet             { background-position: -264px -120px; }
-.icon-chevron-up         { background-position: -288px -120px; }
-.icon-chevron-down       { background-position: -313px -119px; } // 1px, 1px off
-.icon-retweet            { background-position: -336px -120px; }
-.icon-shopping-cart      { background-position: -360px -120px; }
-.icon-folder-close       { background-position: -384px -120px; width: 16px; }
-.icon-folder-open        { background-position: -408px -120px; width: 16px; }
-.icon-resize-vertical    { background-position: -432px -119px; } // 1px, 1px off
-.icon-resize-horizontal  { background-position: -456px -118px; } // 1px, 2px off
-
-.icon-hdd                     { background-position: 0      -144px; }
-.icon-bullhorn                { background-position: -24px  -144px; }
-.icon-bell                    { background-position: -48px  -144px; }
-.icon-certificate             { background-position: -72px  -144px; }
-.icon-thumbs-up               { background-position: -96px  -144px; }
-.icon-thumbs-down             { background-position: -120px -144px; }
-.icon-hand-right              { background-position: -144px -144px; }
-.icon-hand-left               { background-position: -168px -144px; }
-.icon-hand-up                 { background-position: -192px -144px; }
-.icon-hand-down               { background-position: -216px -144px; }
-.icon-circle-arrow-right      { background-position: -240px -144px; }
-.icon-circle-arrow-left       { background-position: -264px -144px; }
-.icon-circle-arrow-up         { background-position: -288px -144px; }
-.icon-circle-arrow-down       { background-position: -312px -144px; }
-.icon-globe                   { background-position: -336px -144px; }
-.icon-wrench                  { background-position: -360px -144px; }
-.icon-tasks                   { background-position: -384px -144px; }
-.icon-filter                  { background-position: -408px -144px; }
-.icon-briefcase               { background-position: -432px -144px; }
-.icon-fullscreen              { background-position: -456px -144px; }
diff --git a/assets/less/bootstrap/tables.less b/assets/less/bootstrap/tables.less
deleted file mode 100644
index 0e35271..0000000
--- a/assets/less/bootstrap/tables.less
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// Tables
-// --------------------------------------------------
-
-
-// BASE TABLES
-// -----------------
-
-table {
-  max-width: 100%;
-  background-color: @tableBackground;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-// BASELINE STYLES
-// ---------------
-
-.table {
-  width: 100%;
-  margin-bottom: @baseLineHeight;
-  // Cells
-  th,
-  td {
-    padding: 8px;
-    line-height: @baseLineHeight;
-    text-align: left;
-    vertical-align: top;
-    border-top: 1px solid @tableBorder;
-  }
-  th {
-    font-weight: bold;
-  }
-  // Bottom align for column headings
-  thead th {
-    vertical-align: bottom;
-  }
-  // Remove top border from thead by default
-  caption + thead tr:first-child th,
-  caption + thead tr:first-child td,
-  colgroup + thead tr:first-child th,
-  colgroup + thead tr:first-child td,
-  thead:first-child tr:first-child th,
-  thead:first-child tr:first-child td {
-    border-top: 0;
-  }
-  // Account for multiple tbody instances
-  tbody + tbody {
-    border-top: 2px solid @tableBorder;
-  }
-
-  // Nesting
-  .table {
-    background-color: @bodyBackground;
-  }
-}
-
-
-
-// CONDENSED TABLE W/ HALF PADDING
-// -------------------------------
-
-.table-condensed {
-  th,
-  td {
-    padding: 4px 5px;
-  }
-}
-
-
-// BORDERED VERSION
-// ----------------
-
-.table-bordered {
-  border: 1px solid @tableBorder;
-  border-collapse: separate; // Done so we can round those corners!
-  *border-collapse: collapse; // IE7 can't round corners anyway
-  border-left: 0;
-  .border-radius(@baseBorderRadius);
-  th,
-  td {
-    border-left: 1px solid @tableBorder;
-  }
-  // Prevent a double border
-  caption + thead tr:first-child th,
-  caption + tbody tr:first-child th,
-  caption + tbody tr:first-child td,
-  colgroup + thead tr:first-child th,
-  colgroup + tbody tr:first-child th,
-  colgroup + tbody tr:first-child td,
-  thead:first-child tr:first-child th,
-  tbody:first-child tr:first-child th,
-  tbody:first-child tr:first-child td {
-    border-top: 0;
-  }
-  // For first th/td in the first row in the first thead or tbody
-  thead:first-child tr:first-child > th:first-child,
-  tbody:first-child tr:first-child > td:first-child,
-  tbody:first-child tr:first-child > th:first-child {
-    .border-top-left-radius(@baseBorderRadius);
-  }
-  // For last th/td in the first row in the first thead or tbody
-  thead:first-child tr:first-child > th:last-child,
-  tbody:first-child tr:first-child > td:last-child,
-  tbody:first-child tr:first-child > th:last-child {
-    .border-top-right-radius(@baseBorderRadius);
-  }
-  // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot
-  thead:last-child tr:last-child > th:first-child,
-  tbody:last-child tr:last-child > td:first-child,
-  tbody:last-child tr:last-child > th:first-child,
-  tfoot:last-child tr:last-child > td:first-child,
-  tfoot:last-child tr:last-child > th:first-child {
-    .border-bottom-left-radius(@baseBorderRadius);
-  }
-  // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot
-  thead:last-child tr:last-child > th:last-child,
-  tbody:last-child tr:last-child > td:last-child,
-  tbody:last-child tr:last-child > th:last-child,
-  tfoot:last-child tr:last-child > td:last-child,
-  tfoot:last-child tr:last-child > th:last-child {
-    .border-bottom-right-radius(@baseBorderRadius);
-  }
-
-  // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot
-  tfoot + tbody:last-child tr:last-child td:first-child {
-    .border-bottom-left-radius(0);
-  }
-  tfoot + tbody:last-child tr:last-child td:last-child {
-    .border-bottom-right-radius(0);
-  }
-
-  // Special fixes to round the left border on the first td/th
-  caption + thead tr:first-child th:first-child,
-  caption + tbody tr:first-child td:first-child,
-  colgroup + thead tr:first-child th:first-child,
-  colgroup + tbody tr:first-child td:first-child {
-    .border-top-left-radius(@baseBorderRadius);
-  }
-  caption + thead tr:first-child th:last-child,
-  caption + tbody tr:first-child td:last-child,
-  colgroup + thead tr:first-child th:last-child,
-  colgroup + tbody tr:first-child td:last-child {
-    .border-top-right-radius(@baseBorderRadius);
-  }
-
-}
-
-
-
-
-// ZEBRA-STRIPING
-// --------------
-
-// Default zebra-stripe styles (alternating gray and transparent backgrounds)
-.table-striped {
-  tbody {
-    > tr:nth-child(odd) > td,
-    > tr:nth-child(odd) > th {
-      background-color: @tableBackgroundAccent;
-    }
-  }
-}
-
-
-// HOVER EFFECT
-// ------------
-// Placed here since it has to come after the potential zebra striping
-.table-hover {
-  tbody {
-    tr:hover > td,
-    tr:hover > th {
-      background-color: @tableBackgroundHover;
-    }
-  }
-}
-
-
-// TABLE CELL SIZING
-// -----------------
-
-// Reset default grid behavior
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
-  display: table-cell;
-  float: none; // undo default grid column styles
-  margin-left: 0; // undo default grid column styles
-}
-
-// Change the column widths to account for td/th padding
-.table td,
-.table th {
-  &.span1     { .tableColumns(1); }
-  &.span2     { .tableColumns(2); }
-  &.span3     { .tableColumns(3); }
-  &.span4     { .tableColumns(4); }
-  &.span5     { .tableColumns(5); }
-  &.span6     { .tableColumns(6); }
-  &.span7     { .tableColumns(7); }
-  &.span8     { .tableColumns(8); }
-  &.span9     { .tableColumns(9); }
-  &.span10    { .tableColumns(10); }
-  &.span11    { .tableColumns(11); }
-  &.span12    { .tableColumns(12); }
-}
-
-
-
-// TABLE BACKGROUNDS
-// -----------------
-// Exact selectors below required to override .table-striped
-
-.table tbody tr {
-  &.success > td {
-    background-color: @successBackground;
-  }
-  &.error > td {
-    background-color: @errorBackground;
-  }
-  &.warning > td {
-    background-color: @warningBackground;
-  }
-  &.info > td {
-    background-color: @infoBackground;
-  }
-}
-
-// Hover states for .table-hover
-.table-hover tbody tr {
-  &.success:hover > td {
-    background-color: darken(@successBackground, 5%);
-  }
-  &.error:hover > td {
-    background-color: darken(@errorBackground, 5%);
-  }
-  &.warning:hover > td {
-    background-color: darken(@warningBackground, 5%);
-  }
-  &.info:hover > td {
-    background-color: darken(@infoBackground, 5%);
-  }
-}
diff --git a/assets/less/bootstrap/tests/buttons.html b/assets/less/bootstrap/tests/buttons.html
deleted file mode 100644
index 3f41165..0000000
--- a/assets/less/bootstrap/tests/buttons.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>Buttons &middot; Bootstrap</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le styles -->
-    <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet">
-    <style>
-      body {
-        padding-top: 30px;
-        padding-bottom: 30px;
-      }
-    </style>
-    <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le fav and touch icons -->
-    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png">
-    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png">
-      <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png">
-                    <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png">
-                                   <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png">
-  </head>
-
-  <body>
-
-    <div class="container">
-
-      <h2>Dropups</h2>
-      <div class="btn-toolbar">
-        <div class="btn-group dropup">
-          <button class="btn">Dropup</button>
-          <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-primary">Dropup</button>
-          <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-danger">Dropup</button>
-          <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-warning">Dropup</button>
-          <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-success">Dropup</button>
-          <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-secondary">Dropup</button>
-          <button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-inverse">Dropup</button>
-          <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-      </div><!-- /btn-toolbar -->
-
-
-    </div> <!-- /container -->
-
-    <!-- Le javascript
-    ================================================== -->
-    <!-- Placed at the end of the document so the pages load faster -->
-    <script src="../../docs/assets/js/jquery.js"></script>
-    <script src="../../docs/assets/js/bootstrap-transition.js"></script>
-    <script src="../../docs/assets/js/bootstrap-alert.js"></script>
-    <script src="../../docs/assets/js/bootstrap-modal.js"></script>
-    <script src="../../docs/assets/js/bootstrap-dropdown.js"></script>
-    <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script>
-    <script src="../../docs/assets/js/bootstrap-tab.js"></script>
-    <script src="../../docs/assets/js/bootstrap-tooltip.js"></script>
-    <script src="../../docs/assets/js/bootstrap-popover.js"></script>
-    <script src="../../docs/assets/js/bootstrap-button.js"></script>
-    <script src="../../docs/assets/js/bootstrap-collapse.js"></script>
-    <script src="../../docs/assets/js/bootstrap-carousel.js"></script>
-    <script src="../../docs/assets/js/bootstrap-typeahead.js"></script>
-
-  </body>
-</html>
diff --git a/assets/less/bootstrap/tests/css-tests.css b/assets/less/bootstrap/tests/css-tests.css
deleted file mode 100644
index 0f5604e..0000000
--- a/assets/less/bootstrap/tests/css-tests.css
+++ /dev/null
@@ -1,150 +0,0 @@
-/*!
- * Bootstrap CSS Tests
- */
-
-
-/* Remove background image */
-body {
-  background-image: none;
-}
-
-/* Space out subhead */
-.subhead {
-  margin-bottom: 36px;
-}
-/*h4 {
-  margin-bottom: 5px;
-}
-*/
-
-.type-test {
-  margin-bottom: 20px;
-  padding: 0 20px 20px;
-  background: url(../../docs/assets/img/grid-baseline-20px.png);
-}
-.type-test h1,
-.type-test h2,
-.type-test h3,
-.type-test h4,
-.type-test h5,
-.type-test h6 {
-  background-color: rgba(255,0,0,.2);
-}
-
-
-/* colgroup tests */
-.col1 {
-  background-color: rgba(255,0,0,.1);
-}
-.col2 {
-  background-color: rgba(0,255,0,.1);
-}
-.col3 {
-  background-color: rgba(0,0,255,.1);
-}
-
-
-/* Fluid row inputs */
-#rowInputs .row > [class*=span],
-#fluidRowInputs .row-fluid > [class*=span] {
-  background-color: rgba(255,0,0,.1);
-}
-
-
-/* Fluid grid */
-.fluid-grid {
-  margin-bottom: 45px;
-}
-.fluid-grid .row {
-  height: 40px;
-  padding-top: 10px;
-  margin-top: 10px;
-  color: #ddd;
-  text-align: center;
-}
-.fluid-grid .span1 {
-  background-color: #999;
-}
-
-
-/* Gradients */
-
-[class^="gradient-"] {
-  width: 100%;
-  height: 400px;
-  margin: 20px 0;
-  -webkit-border-radius: 5px;
-     -moz-border-radius: 5px;
-          border-radius: 5px;
-}
-
-.gradient-horizontal {
-  background-color: #333333;
-  background-image: -moz-linear-gradient(left, #555555, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#555555), to(#333333));
-  background-image: -webkit-linear-gradient(left, #555555, #333333);
-  background-image: -o-linear-gradient(left, #555555, #333333);
-  background-image: linear-gradient(to right, #555555, #333333);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=1);
-}
-
-.gradient-vertical {
-  background-color: #474747;
-  background-image: -moz-linear-gradient(top, #555555, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#333333));
-  background-image: -webkit-linear-gradient(top, #555555, #333333);
-  background-image: -o-linear-gradient(top, #555555, #333333);
-  background-image: linear-gradient(to bottom, #555555, #333333);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=0);
-}
-
-.gradient-directional {
-  background-color: #333333;
-  background-image: -moz-linear-gradient(45deg, #555555, #333333);
-  background-image: -webkit-linear-gradient(45deg, #555555, #333333);
-  background-image: -o-linear-gradient(45deg, #555555, #333333);
-  background-image: linear-gradient(45deg, #555555, #333333);
-  background-repeat: repeat-x;
-}
-
-.gradient-vertical-three {
-  background-color: #8940a5;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f));
-  background-image: -webkit-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -moz-linear-gradient(top, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -o-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f);
-  background-image: linear-gradient(#00b3ee, #7a43b6 50%, #c3325f);
-  background-repeat: no-repeat;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff00b3ee', endColorstr='#ffc3325f', GradientType=0);
-}
-
-.gradient-radial {
-  background-color: #333333;
-  background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(#555555), to(#333333));
-  background-image: -webkit-radial-gradient(circle, #555555, #333333);
-  background-image: -moz-radial-gradient(circle, #555555, #333333);
-  background-image: -o-radial-gradient(circle, #555555, #333333);
-  background-repeat: no-repeat;
-}
-
-.gradient-striped {
-  background-color: #555555;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.gradient-horizontal-three {
-  background-color: #00b3ee;
-  background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f));
-  background-image: -webkit-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -moz-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -o-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: linear-gradient(to right, #00b3ee, #7a43b6 50%, #c3325f);
-  background-repeat: no-repeat;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00b3ee', endColorstr='#c3325f', GradientType=0);
-}
diff --git a/assets/less/bootstrap/thumbnails.less b/assets/less/bootstrap/thumbnails.less
deleted file mode 100644
index 4fd07d2..0000000
--- a/assets/less/bootstrap/thumbnails.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Thumbnails
-// --------------------------------------------------
-
-
-// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files
-
-// Make wrapper ul behave like the grid
-.thumbnails {
-  margin-left: -@gridGutterWidth;
-  list-style: none;
-  .clearfix();
-}
-// Fluid rows have no left margin
-.row-fluid .thumbnails {
-  margin-left: 0;
-}
-
-// Float li to make thumbnails appear in a row
-.thumbnails > li {
-  float: left; // Explicity set the float since we don't require .span* classes
-  margin-bottom: @baseLineHeight;
-  margin-left: @gridGutterWidth;
-}
-
-// The actual thumbnail (can be `a` or `div`)
-.thumbnail {
-  display: block;
-  padding: 4px;
-  line-height: @baseLineHeight;
-  border: 1px solid #ddd;
-  .border-radius(@baseBorderRadius);
-  .box-shadow(0 1px 3px rgba(0,0,0,.055));
-  .transition(all .2s ease-in-out);
-}
-// Add a hover/focus state for linked versions only
-a.thumbnail:hover,
-a.thumbnail:focus {
-  border-color: @linkColor;
-  .box-shadow(0 1px 4px rgba(0,105,214,.25));
-}
-
-// Images and captions
-.thumbnail > img {
-  display: block;
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-}
-.thumbnail .caption {
-  padding: 9px;
-  color: @gray;
-}
diff --git a/assets/less/bootstrap/tooltip.less b/assets/less/bootstrap/tooltip.less
deleted file mode 100644
index 83d5f2b..0000000
--- a/assets/less/bootstrap/tooltip.less
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Tooltips
-// --------------------------------------------------
-
-
-// Base class
-.tooltip {
-  position: absolute;
-  z-index: @zindexTooltip;
-  display: block;
-  visibility: visible;
-  font-size: 11px;
-  line-height: 1.4;
-  .opacity(0);
-  &.in     { .opacity(80); }
-  &.top    { margin-top:  -3px; padding: 5px 0; }
-  &.right  { margin-left:  3px; padding: 0 5px; }
-  &.bottom { margin-top:   3px; padding: 5px 0; }
-  &.left   { margin-left: -3px; padding: 0 5px; }
-}
-
-// Wrapper for the tooltip content
-.tooltip-inner {
-  max-width: 200px;
-  padding: 8px;
-  color: @tooltipColor;
-  text-align: center;
-  text-decoration: none;
-  background-color: @tooltipBackground;
-  .border-radius(@baseBorderRadius);
-}
-
-// Arrows
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.tooltip {
-  &.top .tooltip-arrow {
-    bottom: 0;
-    left: 50%;
-    margin-left: -@tooltipArrowWidth;
-    border-width: @tooltipArrowWidth @tooltipArrowWidth 0;
-    border-top-color: @tooltipArrowColor;
-  }
-  &.right .tooltip-arrow {
-    top: 50%;
-    left: 0;
-    margin-top: -@tooltipArrowWidth;
-    border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0;
-    border-right-color: @tooltipArrowColor;
-  }
-  &.left .tooltip-arrow {
-    top: 50%;
-    right: 0;
-    margin-top: -@tooltipArrowWidth;
-    border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth;
-    border-left-color: @tooltipArrowColor;
-  }
-  &.bottom .tooltip-arrow {
-    top: 0;
-    left: 50%;
-    margin-left: -@tooltipArrowWidth;
-    border-width: 0 @tooltipArrowWidth @tooltipArrowWidth;
-    border-bottom-color: @tooltipArrowColor;
-  }
-}
diff --git a/assets/less/bootstrap/type.less b/assets/less/bootstrap/type.less
deleted file mode 100644
index 337138a..0000000
--- a/assets/less/bootstrap/type.less
+++ /dev/null
@@ -1,247 +0,0 @@
-//
-// Typography
-// --------------------------------------------------
-
-
-// Body text
-// -------------------------
-
-p {
-  margin: 0 0 @baseLineHeight / 2;
-}
-.lead {
-  margin-bottom: @baseLineHeight;
-  font-size: @baseFontSize * 1.5;
-  font-weight: 200;
-  line-height: @baseLineHeight * 1.5;
-}
-
-
-// Emphasis & misc
-// -------------------------
-
-// Ex: 14px base font * 85% = about 12px
-small   { font-size: 85%; }
-
-strong  { font-weight: bold; }
-em      { font-style: italic; }
-cite    { font-style: normal; }
-
-// Utility classes
-.muted               { color: @grayLight; }
-a.muted:hover,
-a.muted:focus        { color: darken(@grayLight, 10%); }
-
-.text-warning        { color: @warningText; }
-a.text-warning:hover,
-a.text-warning:focus { color: darken(@warningText, 10%); }
-
-.text-error          { color: @errorText; }
-a.text-error:hover,
-a.text-error:focus   { color: darken(@errorText, 10%); }
-
-.text-info           { color: @infoText; }
-a.text-info:hover,
-a.text-info:focus    { color: darken(@infoText, 10%); }
-
-.text-success        { color: @successText; }
-a.text-success:hover,
-a.text-success:focus { color: darken(@successText, 10%); }
-
-.text-left           { text-align: left; }
-.text-right          { text-align: right; }
-.text-center         { text-align: center; }
-
-
-// Headings
-// -------------------------
-
-h1, h2, h3, h4, h5, h6 {
-  margin: (@baseLineHeight / 2) 0;
-  font-family: @headingsFontFamily;
-  font-weight: @headingsFontWeight;
-  line-height: @baseLineHeight;
-  color: @headingsColor;
-  text-rendering: optimizelegibility; // Fix the character spacing for headings
-  small {
-    font-weight: normal;
-    line-height: 1;
-    color: @grayLight;
-  }
-}
-
-h1,
-h2,
-h3 { line-height: @baseLineHeight * 2; }
-
-h1 { font-size: @baseFontSize * 2.75; } // ~38px
-h2 { font-size: @baseFontSize * 2.25; } // ~32px
-h3 { font-size: @baseFontSize * 1.75; } // ~24px
-h4 { font-size: @baseFontSize * 1.25; } // ~18px
-h5 { font-size: @baseFontSize; }
-h6 { font-size: @baseFontSize * 0.85; } // ~12px
-
-h1 small { font-size: @baseFontSize * 1.75; } // ~24px
-h2 small { font-size: @baseFontSize * 1.25; } // ~18px
-h3 small { font-size: @baseFontSize; }
-h4 small { font-size: @baseFontSize; }
-
-
-// Page header
-// -------------------------
-
-.page-header {
-  padding-bottom: (@baseLineHeight / 2) - 1;
-  margin: @baseLineHeight 0 (@baseLineHeight * 1.5);
-  border-bottom: 1px solid @grayLighter;
-}
-
-
-
-// Lists
-// --------------------------------------------------
-
-// Unordered and Ordered lists
-ul, ol {
-  padding: 0;
-  margin: 0 0 @baseLineHeight / 2 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-li {
-  line-height: @baseLineHeight;
-}
-
-// Remove default list styles
-ul.unstyled,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-
-// Single-line list items
-ul.inline,
-ol.inline {
-  margin-left: 0;
-  list-style: none;
-  > li {
-    display: inline-block;
-    .ie7-inline-block();
-    padding-left: 5px;
-    padding-right: 5px;
-  }
-}
-
-// Description Lists
-dl {
-  margin-bottom: @baseLineHeight;
-}
-dt,
-dd {
-  line-height: @baseLineHeight;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: @baseLineHeight / 2;
-}
-// Horizontal layout (like forms)
-.dl-horizontal {
-  .clearfix(); // Ensure dl clears floats if empty dd elements present
-  dt {
-    float: left;
-    width: @horizontalComponentOffset - 20;
-    clear: left;
-    text-align: right;
-    .text-overflow();
-  }
-  dd {
-    margin-left: @horizontalComponentOffset;
-  }
-}
-
-// MISC
-// ----
-
-// Horizontal rules
-hr {
-  margin: @baseLineHeight 0;
-  border: 0;
-  border-top: 1px solid @hrBorder;
-  border-bottom: 1px solid @white;
-}
-
-// Abbreviations and acronyms
-abbr[title],
-// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted @grayLight;
-}
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-
-// Blockquotes
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 @baseLineHeight;
-  border-left: 5px solid @grayLighter;
-  p {
-    margin-bottom: 0;
-    font-size: @baseFontSize * 1.25;
-    font-weight: 300;
-    line-height: 1.25;
-  }
-  small {
-    display: block;
-    line-height: @baseLineHeight;
-    color: @grayLight;
-    &:before {
-      content: '\2014 \00A0';
-    }
-  }
-
-  // Float right with text-align: right
-  &.pull-right {
-    float: right;
-    padding-right: 15px;
-    padding-left: 0;
-    border-right: 5px solid @grayLighter;
-    border-left: 0;
-    p,
-    small {
-      text-align: right;
-    }
-    small {
-      &:before {
-        content: '';
-      }
-      &:after {
-        content: '\00A0 \2014';
-      }
-    }
-  }
-}
-
-// Quotes
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-
-// Addresses
-address {
-  display: block;
-  margin-bottom: @baseLineHeight;
-  font-style: normal;
-  line-height: @baseLineHeight;
-}
diff --git a/assets/less/bootstrap/utilities.less b/assets/less/bootstrap/utilities.less
deleted file mode 100644
index 314b4ff..0000000
--- a/assets/less/bootstrap/utilities.less
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Utility classes
-// --------------------------------------------------
-
-
-// Quick floats
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-
-// Toggling content
-.hide {
-  display: none;
-}
-.show {
-  display: block;
-}
-
-// Visibility
-.invisible {
-  visibility: hidden;
-}
-
-// For Affix plugin
-.affix {
-  position: fixed;
-}
diff --git a/assets/less/bootstrap/variables.less b/assets/less/bootstrap/variables.less
deleted file mode 100644
index 486eb7b..0000000
--- a/assets/less/bootstrap/variables.less
+++ /dev/null
@@ -1,301 +0,0 @@
-//
-// Variables
-// --------------------------------------------------
-
-
-// Global values
-// --------------------------------------------------
-
-
-// Grays
-// -------------------------
-@black:                 #000;
-@grayDarker:            #222;
-@grayDark:              #333;
-@gray:                  #555;
-@grayLight:             #999;
-@grayLighter:           #eee;
-@white:                 #fff;
-
-
-// Accent colors
-// -------------------------
-@blue:                  #049cdb;
-@blueDark:              #0064cd;
-@green:                 #46a546;
-@dangerRed:             #9d261d;
-@yellow:                #ffc40d;
-@orange:                #f89406;
-@pink:                  #c3325f;
-@purple:                #7a43b6;
-
-
-// Scaffolding
-// -------------------------
-@bodyBackground:        @white;
-@textColor:             @grayDark;
-
-
-// Links
-// -------------------------
-@linkColor:             #08c;
-@linkColorHover:        darken(@linkColor, 15%);
-
-
-// Typography
-// -------------------------
-@sansFontFamily:        "Helvetica Neue", Helvetica, Arial, sans-serif;
-@serifFontFamily:       Georgia, "Times New Roman", Times, serif;
-@monoFontFamily:        Monaco, Menlo, Consolas, "Courier New", monospace;
-
-@baseFontSize:          14px;
-@baseFontFamily:        @sansFontFamily;
-@baseLineHeight:        20px;
-@altFontFamily:         @serifFontFamily;
-
-@headingsFontFamily:    inherit; // empty to use BS default, @baseFontFamily
-@headingsFontWeight:    bold;    // instead of browser default, bold
-@headingsColor:         inherit; // empty to use BS default, @textColor
-
-
-// Component sizing
-// -------------------------
-// Based on 14px font-size and 20px line-height
-
-@fontSizeLarge:         @baseFontSize * 1.25; // ~18px
-@fontSizeSmall:         @baseFontSize * 0.85; // ~12px
-@fontSizeMini:          @baseFontSize * 0.75; // ~11px
-
-@paddingLarge:          11px 19px; // 44px
-@paddingSmall:          2px 10px;  // 26px
-@paddingMini:           0 6px;   // 22px
-
-@baseBorderRadius:      4px;
-@borderRadiusLarge:     6px;
-@borderRadiusSmall:     3px;
-
-
-// Tables
-// -------------------------
-@tableBackground:                   transparent; // overall background-color
-@tableBackgroundAccent:             #f9f9f9; // for striping
-@tableBackgroundHover:              #f5f5f5; // for hover
-@tableBorder:                       #ddd; // table and cell border
-
-// Buttons
-// -------------------------
-@btnBackground:                     @white;
-@btnBackgroundHighlight:            darken(@white, 10%);
-@btnBorder:                         #ccc;
-
-@btnPrimaryBackground:              @linkColor;
-@btnPrimaryBackgroundHighlight:     spin(@btnPrimaryBackground, 20%);
-
-@btnInfoBackground:                 #5bc0de;
-@btnInfoBackgroundHighlight:        #2f96b4;
-
-@btnSuccessBackground:              #62c462;
-@btnSuccessBackgroundHighlight:     #51a351;
-
-@btnWarningBackground:              lighten(@dangerRed, 15%);
-@btnWarningBackgroundHighlight:     @dangerRed;
-
-@btnDangerBackground:               @dangerRed;
-@btnDangerBackgroundHighlight:      @hoverHighlight;
-
-@btnInverseBackground:              #444;
-@btnInverseBackgroundHighlight:     @grayDarker;
-
-
-// Forms
-// -------------------------
-@inputBackground:               @white;
-@inputBorder:                   #ccc;
-@inputBorderRadius:             @baseBorderRadius;
-@inputDisabledBackground:       @grayLighter;
-@formActionsBackground:         #f5f5f5;
-@inputHeight:                   @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
-
-
-// Dropdowns
-// -------------------------
-@dropdownBackground:            #2B2F33;
-@dropdownBorder:                rgba(0,0,0,.2);
-@dropdownDividerTop:            #1A1A1A;
-@dropdownDividerBottom:         #1A1A1A;
-
-@dropdownLinkColor:             #D9D9D9;
-@dropdownLinkColorHover:        @white;
-@dropdownLinkColorActive:       @white;
-
-@dropdownLinkBackgroundActive:  @linkColor;
-@dropdownLinkBackgroundHover:   @dropdownLinkBackgroundActive;
-
-
-
-// COMPONENT VARIABLES
-// --------------------------------------------------
-
-
-// Z-index master list
-// -------------------------
-// Used for a bird's eye view of components dependent on the z-axis
-// Try to avoid customizing these :)
-@zindexDropdown:          1000;
-@zindexPopover:           1010;
-@zindexTooltip:           1030;
-@zindexFixedNavbar:       1030;
-@zindexModalBackdrop:     1040;
-@zindexModal:             1050;
-
-
-// Sprite icons path
-// -------------------------
-@iconSpritePath:          "../img/glyphicons-halflings.png";
-@iconWhiteSpritePath:     "../img/glyphicons-halflings-white.png";
-
-
-// Input placeholder text color
-// -------------------------
-@placeholderText:         @grayLight;
-
-
-// Hr border color
-// -------------------------
-@hrBorder:                @grayLighter;
-
-
-// Horizontal forms & lists
-// -------------------------
-@horizontalComponentOffset:       180px;
-
-
-// Wells
-// -------------------------
-@wellBackground:                  #f5f5f5;
-
-
-// Navbar
-// -------------------------
-@navbarCollapseWidth:             979px;
-@navbarCollapseDesktopWidth:      @navbarCollapseWidth + 1;
-
-@navbarHeight:                    40px;
-@navbarBackgroundHighlight:       #ffffff;
-@navbarBackground:                darken(@navbarBackgroundHighlight, 5%);
-@navbarBorder:                    darken(@navbarBackground, 12%);
-
-@navbarText:                      #777;
-@navbarLinkColor:                 #777;
-@navbarLinkColorHover:            @grayDark;
-@navbarLinkColorActive:           @gray;
-@navbarLinkBackgroundHover:       transparent;
-@navbarLinkBackgroundActive:      darken(@navbarBackground, 5%);
-
-@navbarBrandColor:                @navbarLinkColor;
-
-// Inverted navbar
-@navbarInverseBackground:                #111111;
-@navbarInverseBackgroundHighlight:       #222222;
-@navbarInverseBorder:                    #252525;
-
-@navbarInverseText:                      @grayLight;
-@navbarInverseLinkColor:                 @grayLight;
-@navbarInverseLinkColorHover:            @white;
-@navbarInverseLinkColorActive:           @navbarInverseLinkColorHover;
-@navbarInverseLinkBackgroundHover:       transparent;
-@navbarInverseLinkBackgroundActive:      @navbarInverseBackground;
-
-@navbarInverseSearchBackground:          lighten(@navbarInverseBackground, 25%);
-@navbarInverseSearchBackgroundFocus:     @white;
-@navbarInverseSearchBorder:              @navbarInverseBackground;
-@navbarInverseSearchPlaceholderColor:    #ccc;
-
-@navbarInverseBrandColor:                @navbarInverseLinkColor;
-
-
-// Pagination
-// -------------------------
-@paginationBackground:                #fff;
-@paginationBorder:                    #ddd;
-@paginationActiveBackground:          #f5f5f5;
-
-
-// Hero unit
-// -------------------------
-@heroUnitBackground:              @grayLighter;
-@heroUnitHeadingColor:            inherit;
-@heroUnitLeadColor:               inherit;
-
-
-// Form states and alerts
-// -------------------------
-@warningText:             #c09853;
-@warningBackground:       #fcf8e3;
-@warningBorder:           darken(spin(@warningBackground, -10), 3%);
-
-@errorText:               #b94a48;
-@errorBackground:         #f2dede;
-@errorBorder:             darken(spin(@errorBackground, -10), 3%);
-
-@successText:             #468847;
-@successBackground:       #dff0d8;
-@successBorder:           darken(spin(@successBackground, -10), 5%);
-
-@infoText:                #3a87ad;
-@infoBackground:          #d9edf7;
-@infoBorder:              darken(spin(@infoBackground, -10), 7%);
-
-
-// Tooltips and popovers
-// -------------------------
-@tooltipColor:            #fff;
-@tooltipBackground:       #000;
-@tooltipArrowWidth:       5px;
-@tooltipArrowColor:       @tooltipBackground;
-
-@popoverBackground:       #fff;
-@popoverArrowWidth:       10px;
-@popoverArrowColor:       #fff;
-@popoverTitleBackground:  darken(@popoverBackground, 3%);
-
-// Special enhancement for popovers
-@popoverArrowOuterWidth:  @popoverArrowWidth + 1;
-@popoverArrowOuterColor:  rgba(0,0,0,.25);
-
-
-
-// GRID
-// --------------------------------------------------
-
-
-// Default 940px grid
-// -------------------------
-@gridColumns:             12;
-@gridColumnWidth:         60px;
-@gridGutterWidth:         20px;
-@gridRowWidth:            (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
-
-// 1200px min
-@gridColumnWidth1200:     70px;
-@gridGutterWidth1200:     30px;
-@gridRowWidth1200:        (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1));
-
-// 768px-979px
-@gridColumnWidth768:      42px;
-@gridGutterWidth768:      20px;
-@gridRowWidth768:         (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1));
-
-
-// Fluid grid
-// -------------------------
-@fluidGridColumnWidth:    percentage(@gridColumnWidth/@gridRowWidth);
-@fluidGridGutterWidth:    percentage(@gridGutterWidth/@gridRowWidth);
-
-// 1200px min
-@fluidGridColumnWidth1200:     percentage(@gridColumnWidth1200/@gridRowWidth1200);
-@fluidGridGutterWidth1200:     percentage(@gridGutterWidth1200/@gridRowWidth1200);
-
-// 768px-979px
-@fluidGridColumnWidth768:      percentage(@gridColumnWidth768/@gridRowWidth768);
-@fluidGridGutterWidth768:      percentage(@gridGutterWidth768/@gridRowWidth768);
diff --git a/assets/less/bootstrap/wells.less b/assets/less/bootstrap/wells.less
deleted file mode 100644
index 84a744b..0000000
--- a/assets/less/bootstrap/wells.less
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Wells
-// --------------------------------------------------
-
-
-// Base class
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: @wellBackground;
-  border: 1px solid darken(@wellBackground, 7%);
-  .border-radius(@baseBorderRadius);
-  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
-  blockquote {
-    border-color: #ddd;
-    border-color: rgba(0,0,0,.15);
-  }
-}
-
-// Sizes
-.well-large {
-  padding: 24px;
-  .border-radius(@borderRadiusLarge);
-}
-.well-small {
-  padding: 9px;
-  .border-radius(@borderRadiusSmall);
-}
diff --git a/assets/less/code-editors.less b/assets/less/code-editors.less
deleted file mode 100644
index 25edcf5..0000000
--- a/assets/less/code-editors.less
+++ /dev/null
@@ -1,53 +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.
-
-
-/* site-wide Ace Editor theme overrides */
-
-.ace_scrollbar-h {
-  right: 0 !important;
-  height: 15px !important;
-}
-
-body {
-  .ace-idle-fingers .ace_marker-layer .ace_selection {
-    background: #015F6F;
-  }
-  .ace-idle-fingers .ace_gutter {
-    background: #3A3A3A;
-  }
-  .ace-idle-fingers {
-    background-color: #4d4d4d;
-  }
-  .ace-idle-fingers .ace_cursor {
-    color: #ffffff;
-  }
-  .ace-idle-fingers.ace_multiselect .ace_selection.ace_start {
-    box-shadow: 0 0 3px 0 #4d4d4d;
-  }
-  .ace-idle-fingers .ace_marker-layer .ace_active-line {
-    background: #000000;
-    opacity: 0.4;
-  }
-  .ace-idle-fingers .ace_constant {
-    color: #72cdf4;
-  }
-  .ace-idle-fingers .ace_boolean {
-    color: #ff6532;
-  }
-  .ace-idle-fingers .ace_string {
-    color: #29be9d;
-  }
-  .ace-idle-fingers .ace_collab.ace_user1 {
-    color: #4d4d4d;
-  }
-}
diff --git a/assets/less/couchdb.less b/assets/less/couchdb.less
deleted file mode 100644
index 3a423c4..0000000
--- a/assets/less/couchdb.less
+++ /dev/null
@@ -1,66 +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.
-
-@import "bootstrap/bootstrap.less";
-
-//
-// Variables
-// --------------------------------------------------
-
-
-// Global values
-// --------------------------------------------------
-
-// Links
-@linkColor:             #CA2530;
-@linkColorHover:        darken(@linkColor, 15%);
-
-// Grays
-@black:                 #0C0C0C;
-@grayDark:              #5A5A5A;
-@grayDarker:            darken(@grayDark, 10%);
-@gray:                  #F80507;
-@grayLight:             #E27B81;
-@grayLighter:           #B95D40;
-@white:                 #FDFBFB;
-
-// Accent colors
-// -------------------------
-@blue:                  #049cdb;
-@blueDark:              #0064cd;
-@green:                 #46a546;
-@red:                   #9d261d;
-@yellow:                #ffc40d;
-@orange:                #f89406;
-@pink:                  #c3325f;
-@purple:                #7a43b6;
-
-
-// Scaffolding
-// -------------------------
-@bodyBackground:        @white;
-@textColor:             @grayDark;
-
-// Typography
-// -------------------------
-@sansFontFamily:        "Helvetica Neue", Helvetica, Arial, sans-serif;
-@serifFontFamily:       Georgia, "Times New Roman", Times, serif;
-@monoFontFamily:        Monaco, Menlo, Consolas, "Courier New", monospace;
-
-@baseFontSize:          14px;
-@baseFontFamily:        @sansFontFamily;
-@baseLineHeight:        20px;
-@altFontFamily:         @serifFontFamily;
-
-@headingsFontFamily:    inherit; // empty to use BS default, @baseFontFamily
-@headingsFontWeight:    bold;    // instead of browser default, bold
-@headingsColor:         inherit; // empty to use BS default, @textColor
diff --git a/assets/less/fauxton.less b/assets/less/fauxton.less
deleted file mode 100644
index 856d4ca..0000000
--- a/assets/less/fauxton.less
+++ /dev/null
@@ -1,677 +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.
-
-@import "variables.less";
-@import "bootstrap/bootstrap.less";
-@import "bootstrap/mixins.less";
-@import "../../node_modules/react-select/less/default.less";
-@import "../../node_modules/rc-slider/assets/index.css";
-
-#grid {
-  .core  {
-    .span(@gridColumns) {
-      width: (@gridColumnWidth * @gridColumns) + (@gridGutterWidth * (@gridColumns - 1));
-    }
-  }
-};
-
-
-@import "layouts.less";
-@import "prettyprint.less";
-@import "icons.less";
-@import "code-editors.less";
-@import "templates.less";
-@import "formstyles.less";
-@import "pagination.less";
-@import "trays.less";
-@import "mixins.less";
-@import "animations.less";
-@import "react-animations.less";
-@import "notification-center.less";
-
-/**
- * HTML-wide overrides
- **/
-
-*, *:before, *:after {
-  .box-sizing(border-box);
-}
-
-html {
-  height: 100%;
-}
-
-body {
-  font-size: 16px;
-  line-height:1.3;
-  padding-bottom: 0px;
-  color: #333;
-  height: 100%;
-  background-color: @sidebarBG;
-}
-
-h2,h3,h4 {font-weight: 600;}
-
-// remove blue borders from clicked elements
-button:focus, a:focus {
-  outline: 0;
-}
-
-.table input[type="checkbox"] {
-  margin: 0 0 0 8px;
-}
-
-a,
-a:visited,
-a:active {
-  color: @linkColor;
-  text-decoration: none;
-}
-
-a:hover {
-  color: @linkColorHover;
-  text-decoration: none;
-}
-
-/* bootstrap overrides */
-.page-header {
-  border-bottom: 1px solid #E3E3E3;
-  margin-bottom: 10px;
-  h3 {
-    text-transform: capitalize;
-    margin-bottom: 0;
-  }
-}
-
-.nav-tabs > li {
-  margin-right: 2px;
-  > a {
-    cursor: pointer;
-    color: #333;
-    border-color: #eeeeee #eeeeee #dddddd;
-    text-decoration: none;
-    background-color: #eeeeee;
-    border-radius: 0;
-    border-left: none;
-    border-right: none;
-    &:hover,
-    &:focus {
-      background-color: @linkColor;
-      border-top: 1px solid @linkColor;
-      color: white;
-    }
-  }
-}
-
-.well {
-  select {
-    margin: 0;
-  }
-  .controls-group {
-    &:first-child,
-    &:last-child {
-      margin-top: 24px;
-    }
-    margin-bottom: 8px;
-  }
-  .controls-row {
-    margin-bottom: 8px;
-  }
-  .row-fluid {
-    margin: 0;
-  }
-  .row-fluid .row-fluid:last-child .well-item {
-    border: none;
-  }
-  .well-item {
-    color: #666;
-    font-size: 12px;
-    border-bottom: 1px solid #e5e5e5;
-    padding: 8px 4px;
-    strong {
-      font-size: 16px;
-    }
-  }
-}
-
-.modal {
-  transform: translateX(-50%);
-  margin-left: inherit;
-}
-
-.modal-dialog {
-  display: flex;
-  flex-direction: row;
-}
-
-.modal-content {
-  flex: 1;
-  width: 560px;
-}
-
-/*TABLE STYLES*/
-table.table {
-  table-layout: fixed;
-}
-table tr td{
-  word-wrap: break-word;
-  &.select {
-    width: 20px;
-  }
-}
-thead {
-  border-bottom: 2px solid #333;
-}
-tbody {
-  padding-top: 10px;
-}
-.table-condensed td {
-  padding: 18px 5px;
-}
-.table-striped tbody > tr:nth-child(odd) > td,
-.table-striped tbody > tr:nth-child(odd) > th {
-  background-color: #F7F7F7;
-}
-
-/**
- * Fauxton-specific Bootstrap additions
- **/
-table.databases {
-  clear: both;
-}
-.nav-tabs > li > a .fonticon:before {
-  margin-right: 6px;
-  font-size: 16px;
-}
-
-.notification-icon {
-  padding-right: 8px;
-}
-
-#dashboard-upper-content{
-  .tab-content {
-    padding-top: 70px;
-  }
-
-  .well{
-    padding: 20px;
-    .border-radius(0);
-    .box-shadow(none);
-  }
-}
-
-#dashboard-content .scrollable {
-  height: auto;
-  overflow-y: auto;
-  overflow-x: hidden;
-  width: 100%;
-  position: absolute;
-  padding: 0;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-
-/*ONE PANEL TEMPLATE ONLY STYLES  AKA _all_dbs */
-
-.result-tools{
-  border-bottom: 1px solid #999999;
-  padding: 10px 0;
-  float: left;
-  width: 100%;
-  margin-bottom: 10px;
-}
-
-#db-views-tabs-nav {
-  position: fixed;
-  z-index: 1;
-  margin-top: 19px;
-  margin-bottom: 0;
-  /*background-color: #f4f4f4;*/
-  padding: 0 20px;
-}
-
-.db-views-smaller {
-  max-width: 500px;
-}
-
-/** table row selector thing **/
-.select{
-  > a{
-    display: block;
-    padding: 5px 15px 5px 5px;
-    border: 1px solid #989898;
-    position: relative;
-    background-color: #FFFFFF;
-    color: #666666;
-    &:after {
-      content: '';
-      width: 0;
-      height: 0;
-      border-left: 7px solid transparent;
-      border-right: 7px solid transparent;
-      border-top: 7px solid #989898;
-      position: absolute;
-      right: 9px;
-      top: 12px;
-    }
-    &:before{
-      content: '';
-      border-left:  1px solid #989898;
-      height: 30px;
-      position: absolute;
-      right: 30px;
-      top: 0;
-    }
-  }
-}
-
-/*documents and databases */
-
-.view.show{
-  color: @fontGrey;
-}
-
-
-// legacy - remove when soft migration to header toggles is complete
-// missing: add_config_option
-.header-icon {
-  font-size: 20px;
-  &:before {
-    float: left;
-    margin: 10px 6px 0px 0px;
-  }
-}
-
-
-.js-filter-form {
-  .help-block {
-    padding: 5px 0 5px 0;
-  }
-  .icon {
-    font-size: 16px;
-  }
-}
-
-
-//---header--//
-#dashboard > header {
-  background-color: @breadcrumbBG;
-  height: 64px;
-
-  /* the position absolute is necessary to allow the 6px box shadow overlap the panels below. The parent <header>
-   ensures the flexbox height is respected */
-  &>div {
-    height: 65px;
-    .bottom-border();
-    position: absolute;
-    width: 100%;
-    z-index: 2; /* needed because ace's selected row has a z-index of 1 & can't be overridden */
-  }
-}
-
-.header-right {
-  .well {
-    padding: 0;
-    margin: 0;
-  }
-}
-
-
-.faux-header__searchboxwrapper {
-  overflow: visible;
-  height: 64px;
-  width: 235px;
-}
-
-.faux-header__searchboxcontainer {
-  height: @collapsedNavWidth;
-  overflow: visible;
-  position: absolute;
-  padding: 12px;
-}
-
-.faux-header__searchboxcontainer {
-  .Select-control, .Select-menu-outer {
-    width: 210px;
-  }
-}
-
-// this allows the results expand as much as need be when the component is used in the header
-.Select-menu-outer {
-  &>div>div {
-    padding-right: 25px; // prevents overlapping of auto-generated scrollbar
-  }
-  min-width: 210px;
-  max-width: 450px;
-  width: auto;
-}
-
-// react-select color design
-.Select div.Select-control {
-  border-radius: initial;
-  border: none;
-}
-
-.Select .Select-menu-outer {
-  border-radius: inherit;
-  border: none;
-}
-
-.Select-option {
-  color: #fff;
-  background-color: #333333;
-}
-
-.Select .is-focused {
-  background-color: @hoverHighlight;
-}
-
-.Select-option:hover {
-  background-color: @hoverHighlight;
-}
-
-.Select-option:last-child {
-  border-radius: initial;
-}
-
-.Select .is-focused:not(.is-open) > .Select-control {
-  box-shadow: transparent;
-}
-
-.Select-option.is-selected {
-  color: #fff;
-}
-
-.Select .Select-menu {
-  max-height: 291px;
-  background-color: #333333;
-}
-.Select-arrow-zone > .Select-arrow {
-  border-top-color: #333;
-
-}
-
-.Select-arrow-zone:hover > .Select-arrow {
-  border-top-color: @hoverHighlight;
-}
-
-
-//----footer--///
-
-footer.pagination-footer {
-  background-color: #fff;
-  border-top: 1px solid #ccc;
-  height: 50px;
-  overflow: hidden;
-
-  font-size: 14px;
-
-  .pagination {
-    .box-shadow(none);
-    margin: 0;
-    height: 50px;
-    border-left: 1px solid #ccc;
-    li {
-      display: inline-block;
-      a {
-        padding: 15px 10px 15px 15px;
-        border: none;
-      }
-    }
-  }
-
-  .page-controls {
-    float: left;
-
-  }
-
-  .current-databases,
-  .current-docs {
-    float: right;
-    margin: 17px 20px 17px 20px;
-  }
-
-  .documents-pagination {
-    float: right;
-  }
-  #per-page {
-    float: right;
-    top: 2px;
-    #select-per-page {
-      margin-top: 10px;
-    }
-  }
-}
-
-#right-content {
-  footer.pagination-footer {
-    bottom: @collapsedNavWidth;
-  }
-}
-
-#primary-nav-right-shadow {
-  position: absolute;
-  top: 0px;
-  right: 0px;
-  bottom: 0px;
-  background-color: rgba(0, 0, 0, 0.1);
-  width: 6px;
-  z-index: 6;
-}
-
-.modal-title {
-  font-size: 22px;
-  margin: 0;
-  line-height: 30px;
-}
-
-.modal-footer {
-  background-color: transparent;
-  border-top: none;
-  color: #666;
-}
-
-.modal-footer a {
-  color: #666;
-}
-
-.modal-header {
-  border-bottom: 1px solid #666;
-}
-
-.simple-header {
-  font-weight: 400;
-  font-size: 15pt;
-  border-bottom: 1px solid #cccccc;
-  margin-bottom: 30px;
-  margin-top: 0;
-}
-
-// left navigationbar is opened
-@media (max-width: 730px) {
-  .closeMenu {
-    .one-pane {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-@media (max-width: 860px) {
-  .closeMenu {
-    .with-sidebar {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-// left navigationbar is closed
-@media (max-width: 875px) {
-  #main:not(.closeMenu) {
-    .one-pane {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-@media (max-width: 1015px) {
-  #main:not(.closeMenu) {
-    .with-sidebar {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-body .control-toggle-include-docs span {
-  margin-left: 0;
-  &::before {
-    content: "Include Docs";
-  }
-}
-
-@media (max-width: 1177px) {
-  #main.closeMenu {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: " Docs";
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-
-@media (max-width: 1120px) {
-  #main.closeMenu {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: "Docs";
-        }
-        button:not(.control-toggle-include-docs) span {
-          display: none;
-        }
-        button i:before {
-          float: none;
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-        #query-options-tray:before {
-          right: 180px;
-        }
-        .api-bar-tray:before {
-          right: 68px;
-        }
-      }
-    }
-  }
-}
-
-@media (max-width: 1339px) {
-  #main:not(.closeMenu) {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: "Docs";
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-@media (max-width: 1090px) {
-  #main:not(.closeMenu) {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: "Docs";
-        }
-        button:not(.control-toggle-include-docs) span {
-          display: none;
-        }
-        button i:before {
-          float: none;
-        }
-        #query-options-tray:before {
-          right: 180px;
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-.capitalize {
-  text-transform: capitalize;
-}
-
-.fauxton-table-list {
-  a.db-actions,
-  a.db-actions:visited {
-    color: @linkColor;
-    border: 1px solid #e3e3e3;
-    padding: 5px 7px;
-    .border-radius(6px);
-    text-decoration: none;
-    font-size: 19px;
-    &:hover {
-      background-color: @hoverHighlight;
-      color: white;
-    }
-  }
-  td {
-    vertical-align: middle;
-  }
-}
-
-.btn-space {
-  margin-right: 5px;
-}
-
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0,0,0,0);
-  border: 0;
-}
-
-.btn-group.toggle-btns{
-  input[type=radio] {
-    display: none;
-  }
-  label.btn {
-    margin-right: 0;
-  }
-}
diff --git a/assets/less/formstyles.less b/assets/less/formstyles.less
deleted file mode 100644
index 0d70aed..0000000
--- a/assets/less/formstyles.less
+++ /dev/null
@@ -1,372 +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.
-
-@import "variables.less";
-@import "icons.less";
-
-input[type="text"],
-input[type="password"] {
-  .border-radius(0);
-  padding: 12px;
-  border: 1px solid #ccc;
-  height: auto;
-  font-size: 16px;
-  margin-top: 0;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-
-input[type="file"],
-input[type="checkbox"],
-input[type="radio"],
-select {
-  margin: 0 0 1em 0;
-}
-
-/*form elements and buttons*/
-.btn-group {
-  > .btn + .dropdown-toggle,
-  > .btn:first-child,
-  > .btn:last-child,
-  > .dropdown-toggle {
-    .border-radius(0);
-    background-image: none;
-    text-shadow: none;
-  }
-}
-
-button:focus {
-  outline: 0 !important;
-}
-
-.btn {
-  .box-shadow(none);
-  .border-radius(@baseBorderRadius);
-  background-image: none;
-  text-shadow: none;
-  background-repeat: no-repeat;
-  padding: 10px;
-  margin-top: 0;
-  .icon {
-    margin-right: 0.2em;
-  }
-  &.btn-small {
-    padding: 5px 10px;
-    .icon {
-      margin-right: 0;
-      font-size: inherit;
-    }
-  }
-  &.btn-mini {
-    padding: 3px 8px;
-    .icon {
-      margin-right: 0;
-      font-size: inherit;
-    }
-  }
-}
-.btn-primary,
-.btn-success {
-  color: @buttonText;
-  background-color: @primaryGreen;
-  border-color: @primaryGreen;
-  &:disabled {
-    background-color: @primaryGreenDisabled;
-    border-color: @primaryGreenDisabled;
-    color: @buttonTextDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-secondary {
-  color: @buttonText;
-  background-color: @secondaryBlue;
-  border-color: @secondaryBlue;
-  &:disabled {
-    color: @buttonTextDisabled;
-    background-color: @secondaryBlueDisabled;
-    border-color: @secondaryBlueDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-tertiary {
-  color: @secondaryBlue;
-  background-color: @buttonText;
-  border: 2px solid @secondaryBlue;
-  &:disabled {
-    color: @secondaryBlueDisabled;
-    background-color: @primaryGreenDisabled;
-    border-color: @buttonTextDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-warning,
-.btn-danger {
-  color: @buttonText;
-  background-color: @dangerRed;
-  border-color: @dangerRed;
-  &:disabled {
-    color: @buttonTextDisabled;
-    background-color: @dangerDisabled;
-    border-color: @dangerDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-success:hover,
-.btn-primary:hover,
-.btn-secondary:hover,
-.btn-tertiary:hover,
-.btn-warning:hover,
-.btn-danger:hover {
-  background-color: @hoverHighlight;
-  border-color: @hoverHighlight;
-}
-
-.form-actions {
-  background: none;
-  border: none;
-}
-
-.input-append,
-.input-prepend {
-  .add-on {
-    font-size: 18px;
-    padding: 14px 5px 30px;
-  }
-  .btn .icon {
-    font-size: 16px;
-    margin-right: 0;
-  }
-}
-
-.row-fluid .input-append [class*="span"],
-.input-prepend input[class*="span"] {
-  width: auto;
-}
-
-.form-inline {
-  input[type="password"],
-  input[type="text"] {
-    width: auto;
-  }
-}
-.checkbox {
-  label {
-    display: inline-block;
-    padding-left: 30px;
-  }
-}
-
-label {
-  margin-right: 15px;
-  padding-left: 0;
-  display: block;
-  cursor: pointer;
-  position: relative;
-  font-size: 14px;
-  &.inline {
-    display: inline-block;
-  }
-}
-.help-block {
-  font-size: 12px;
-}
-
-a.help-link {
-  color: @secondaryBlue;
-  text-decoration: none;
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-input[type="text"].error {
-  border: red 1px solid;
-}
-
-form.view-query-update,
-form.view-query-save {
-  max-width: 100%;
-}
-
-.custom-inputs {
-  input[type="radio"],
-  input[type="checkbox"] {
-    display: none;
-  }
-
-  .checkbox label:before {
-    border-radius: 12px;
-    background-color: rgba(255, 255, 255, 0.1);
-    border: 2px solid rgba(255, 255, 255, 0.1);
-    transition: linear 0.2s, box-shadow linear 0.2s;
-    -moz-transition: linear 0.2s, box-shadow linear 0.2s;
-    -webkit-transition: linear 0.2s, box-shadow linear 0.2s;
-  }
-
-  .controls > .radio:first-child,
-  .controls > .checkbox:first-child {
-    padding-top: 15px;
-  }
-
-  .radio.inline,
-  .checkbox.inline {
-    display: inline-block;
-    padding-top: 15px;
-    margin-bottom: 12px;
-    vertical-align: middle;
-  }
-
-  input[type="checkbox"] + label:hover:before {
-    border: 2px solid @white;
-    transition: linear 0.2s, box-shadow linear 0.2s;
-    -moz-transition: linear 0.2s, box-shadow linear 0.2s;
-    -webkit-transition: linear 0.2s, box-shadow linear 0.2s;
-  }
-
-  /* if the checkbox is disabled, we don't want the red border on hover */
-  input[type="checkbox"]:disabled + label:hover:before {
-    border: none;
-  }
-
-  /* if the checkbox is disabled, we don't want the white border on hover */
-  input[type="checkbox"]:disabled + label:hover:before {
-    border: none;
-  }
-
-  input[type="checkbox"]:checked + label {
-    .fonticon-ok;
-  }
-  input[type="checkbox"]:checked + label:before {
-    font-family: @fauxtonFont;
-    font-size: 12px;
-    background-color: inherit;
-    border: 2px solid #7c8085;
-    color: @linkColor;
-    text-align: center;
-    line-height: 19px;
-    box-shadow: none;
-    display: inline-block;
-  }
-
-  label:before {
-    content: "";
-    display: inline-block;
-    width: 22px;
-    height: 22px;
-    margin-right: 10px;
-    position: absolute;
-    left: 0;
-    bottom: 0;
-    background-color: #7c8085;
-  }
-
-  .radio label:before {
-    border-radius: 8px;
-  }
-
-  input[type="radio"]:checked + label:before {
-    content: "\2022";
-    color: #f3f3f3;
-    font-size: 30px;
-    text-align: center;
-    line-height: 18px;
-  }
-
-  label.drop-down {
-    &:before {
-      display: none;
-    }
-  }
-}
-
-div.add-dropdown {
-  position: absolute;
-  top: 2px;
-  right: 0;
-  .dropdown-menu {
-    left: -110px;
-    padding-bottom: 0;
-    width: 148px;
-    min-width: 0;
-    top: 38px;
-    .box-shadow(@boxShadow);
-    &.arrow:before {
-      right: 4px;
-    }
-    a {
-      background-color: @brandDark1;
-      color: @navIconColor;
-      &:hover {
-        background-color: @hoverHighlight;
-        color: white;
-      }
-    }
-    li a {
-      padding: 10px 15px 10px 12px;
-    }
-  }
-  .dropdown-toggle {
-    border-top: none !important;
-    text-decoration: none;
-  }
-  > a {
-    border-bottom: none;
-    text-decoration: none;
-    font-size: 16px;
-  }
-}
-
-input.errorHighlight {
-  -webkit-animation: errorBlinkBG 1s;
-  animation: errorBlinkBG 1s;
-}
-
-.two-sides-toggle-button {
-  font-size: 15px;
-  padding: 0 11px;
-
-  button.btn {
-    padding: 10px 15px;
-    background-color: #fff;
-    color: #888;
-    &.active:first-child {
-      border-right-radius: 10px;
-    }
-    &:hover {
-      background-color: @hoverHighlight;
-      color: #fff;
-      .box-shadow(none);
-    }
-    &.active {
-      /**
-       * The Reselect Components dropdown will go under the btn group on active 
-       * since its relatively positioned before this component which is also relatively 
-       * positioned. Based on the stacking context, no amount of z-index applied
-       * to the dropdown will overcome the activated btns z-index set in Bootstrap.
-       * The fix is to apply a z-index of !important here to override boostraps styling
-       * so the dropdown can go over the activated button. 
-       */
-      z-index: 1 !important;
-      background-color: @brandHighlight;
-      color: #ffffff;
-      .box-shadow(none);
-    }
-  }
-}
diff --git a/assets/less/icons.less b/assets/less/icons.less
deleted file mode 100644
index 1dcdc10..0000000
--- a/assets/less/icons.less
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
-*	Icon Font: fauxtonicon5
-*/
-
-/*  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.
- */
-
-/* had to add a custom template to the generator to get this to compile to append the proper path and specify  "url" instead of "font-url":
-https://github.com/seanbarclay/fontcustom/blob/1c3ad3d2633d3a8add39e8827115394e9ec02d88/lib/fontcustom/generator/template.rb
-*/
-@fauxtonFont: "fauxtonicon5";
-@icon-activetasks: "\f100";
-@icon-arrow-box-down: "\f101";
-@icon-arrow-box-up: "\f102";
-@icon-arrow_left: "\f103";
-@icon-arrow_right: "\f104";
-@icon-arrows-cw: "\f105";
-@icon-article: "\f106";
-@icon-attention-alt: "\f107";
-@icon-attention-circled: "\f108";
-@icon-bell: "\f109";
-@icon-block: "\f10a";
-@icon-bookmark: "\f10b";
-@icon-bookmark-ribbon-wplus: "\f10c";
-@icon-burger: "\f10d";
-@icon-cancel: "\f10e";
-@icon-cancel-circled: "\f10f";
-@icon-cancel-circled2: "\f110";
-@icon-circle-empty: "\f111";
-@icon-clipboard: "\f112";
-@icon-clock: "\f113";
-@icon-cog: "\f114";
-@icon-collapse: "\f115";
-@icon-cw: "\f116";
-@icon-dashboard: "\f117";
-@icon-database: "\f118";
-@icon-deselect-all: "\f119";
-@icon-document: "\f11a";
-@icon-documents: "\f11b";
-@icon-dot-circled: "\f11c";
-@icon-down: "\f11d";
-@icon-down-1: "\f11e";
-@icon-down-circled: "\f11f";
-@icon-down-dir: "\f120";
-@icon-down-open: "\f121";
-@icon-drop-down-dots: "\f122";
-@icon-exchange: "\f123";
-@icon-expand: "\f124";
-@icon-eye: "\f125";
-@icon-file-code-o: "\f126";
-@icon-files-o: "\f127";
-@icon-filter: "\f128";
-@icon-gears: "\f129";
-@icon-help: "\f12a";
-@icon-help-circled: "\f12b";
-@icon-info-circled: "\f12c";
-@icon-json: "\f12d";
-@icon-key: "\f12e";
-@icon-left: "\f12f";
-@icon-left-1: "\f130";
-@icon-left-circled: "\f131";
-@icon-left-dir: "\f132";
-@icon-left-open: "\f133";
-@icon-link: "\f134";
-@icon-list-alt: "\f135";
-@icon-lock: "\f136";
-@icon-mail: "\f137";
-@icon-mail-alt: "\f138";
-@icon-map: "\f139";
-@icon-map2: "\f13a";
-@icon-megaphone: "\f13b";
-@icon-minus: "\f13c";
-@icon-minus-circled: "\f13d";
-@icon-minus-circled2: "\f13e";
-@icon-minus-squared: "\f13f";
-@icon-minus-squared-alt: "\f140";
-@icon-mixer: "\f141";
-@icon-new-database: "\f142";
-@icon-ok: "\f143";
-@icon-ok-circled: "\f144";
-@icon-ok-circled-2: "\f145";
-@icon-paperclip: "\f146";
-@icon-pencil: "\f147";
-@icon-picture: "\f148";
-@icon-play: "\f149";
-@icon-plus: "\f14a";
-@icon-plus-circled: "\f14b";
-@icon-plus-circled2: "\f14c";
-@icon-plus-squared: "\f14d";
-@icon-plus-squared-alt: "\f14e";
-@icon-popin: "\f14f";
-@icon-popout: "\f150";
-@icon-profile: "\f151";
-@icon-replicate: "\f152";
-@icon-reply: "\f153";
-@icon-reply-all: "\f154";
-@icon-resize-full: "\f155";
-@icon-resize-full-reverse: "\f156";
-@icon-resize-small: "\f157";
-@icon-resize-small-reverse: "\f158";
-@icon-right: "\f159";
-@icon-right-1: "\f15a";
-@icon-right-circled: "\f15b";
-@icon-right-dir: "\f15c";
-@icon-right-open: "\f15d";
-@icon-save: "\f15e";
-@icon-search: "\f15f";
-@icon-select-all: "\f160";
-@icon-sidenav-filter-function: "\f161";
-@icon-sidenav-info: "\f162";
-@icon-sidenav-list-function: "\f163";
-@icon-sidenav-map-reduce: "\f164";
-@icon-sidenav-search: "\f165";
-@icon-sidenav-show-function: "\f166";
-@icon-sidenav-update-function: "\f167";
-@icon-sitemap: "\f168";
-@icon-stats: "\f169";
-@icon-support: "\f16a";
-@icon-swap-arrows: "\f16b";
-@icon-table: "\f16c";
-@icon-trash: "\f16d";
-@icon-up: "\f16e";
-@icon-up-1: "\f16f";
-@icon-up-circled: "\f170";
-@icon-up-dir: "\f171";
-@icon-up-open: "\f172";
-@icon-user: "\f173";
-@icon-users: "\f174";
-@icon-vertical-ellipsis: "\f175";
-@icon-wrench: "\f176";
-@icon-wrench2: "\f177";
-
-@font-face {
-  font-family: "fauxtonicon5";
-  src: url("../fonts/fauxtonicon5.eot");
-  src: url("../fonts/fauxtonicon5.eot?#iefix") format("embedded-opentype"),
-       url("../fonts/fauxtonicon5.woff") format("woff"),
-       url("../fonts/fauxtonicon5.ttf") format("truetype"),
-       url("../fonts/fauxtonicon5.svg#fauxtonicon5") format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  @font-face {
-    font-family: "fauxtonicon5";
-    src: url("../fonts/fauxtonicon5.svg#fauxtonicon5") format("svg");
-  }
-}
-
-[data-icon]:before { content: attr(data-icon); }
-
-[data-icon]:before,
-.fonticon-activetasks:before,
-.fonticon-arrow-box-down:before,
-.fonticon-arrow-box-up:before,
-.fonticon-arrow_left:before,
-.fonticon-arrow_right:before,
-.fonticon-arrows-cw:before,
-.fonticon-article:before,
-.fonticon-attention-alt:before,
-.fonticon-attention-circled:before,
-.fonticon-bell:before,
-.fonticon-block:before,
-.fonticon-bookmark:before,
-.fonticon-bookmark-ribbon-wplus:before,
-.fonticon-burger:before,
-.fonticon-cancel:before,
-.fonticon-cancel-circled:before,
-.fonticon-cancel-circled2:before,
-.fonticon-circle-empty:before,
-.fonticon-clipboard:before,
-.fonticon-clock:before,
-.fonticon-cog:before,
-.fonticon-collapse:before,
-.fonticon-cw:before,
-.fonticon-dashboard:before,
-.fonticon-database:before,
-.fonticon-deselect-all:before,
-.fonticon-document:before,
-.fonticon-documents:before,
-.fonticon-dot-circled:before,
-.fonticon-down:before,
-.fonticon-down-1:before,
-.fonticon-down-circled:before,
-.fonticon-down-dir:before,
-.fonticon-down-open:before,
-.fonticon-drop-down-dots:before,
-.fonticon-exchange:before,
-.fonticon-expand:before,
-.fonticon-eye:before,
-.fonticon-file-code-o:before,
-.fonticon-files-o:before,
-.fonticon-filter:before,
-.fonticon-gears:before,
-.fonticon-help:before,
-.fonticon-help-circled:before,
-.fonticon-info-circled:before,
-.fonticon-json:before,
-.fonticon-key:before,
-.fonticon-left:before,
-.fonticon-left-1:before,
-.fonticon-left-circled:before,
-.fonticon-left-dir:before,
-.fonticon-left-open:before,
-.fonticon-link:before,
-.fonticon-list-alt:before,
-.fonticon-lock:before,
-.fonticon-mail:before,
-.fonticon-mail-alt:before,
-.fonticon-map:before,
-.fonticon-map2:before,
-.fonticon-megaphone:before,
-.fonticon-minus:before,
-.fonticon-minus-circled:before,
-.fonticon-minus-circled2:before,
-.fonticon-minus-squared:before,
-.fonticon-minus-squared-alt:before,
-.fonticon-mixer:before,
-.fonticon-new-database:before,
-.fonticon-ok:before,
-.fonticon-ok-circled:before,
-.fonticon-ok-circled-2:before,
-.fonticon-paperclip:before,
-.fonticon-pencil:before,
-.fonticon-picture:before,
-.fonticon-play:before,
-.fonticon-plus:before,
-.fonticon-plus-circled:before,
-.fonticon-plus-circled2:before,
-.fonticon-plus-squared:before,
-.fonticon-plus-squared-alt:before,
-.fonticon-popin:before,
-.fonticon-popout:before,
-.fonticon-profile:before,
-.fonticon-replicate:before,
-.fonticon-reply:before,
-.fonticon-reply-all:before,
-.fonticon-resize-full:before,
-.fonticon-resize-full-reverse:before,
-.fonticon-resize-small:before,
-.fonticon-resize-small-reverse:before,
-.fonticon-right:before,
-.fonticon-right-1:before,
-.fonticon-right-circled:before,
-.fonticon-right-dir:before,
-.fonticon-right-open:before,
-.fonticon-save:before,
-.fonticon-search:before,
-.fonticon-select-all:before,
-.fonticon-sidenav-filter-function:before,
-.fonticon-sidenav-info:before,
-.fonticon-sidenav-list-function:before,
-.fonticon-sidenav-map-reduce:before,
-.fonticon-sidenav-search:before,
-.fonticon-sidenav-show-function:before,
-.fonticon-sidenav-update-function:before,
-.fonticon-sitemap:before,
-.fonticon-stats:before,
-.fonticon-support:before,
-.fonticon-swap-arrows:before,
-.fonticon-table:before,
-.fonticon-trash:before,
-.fonticon-up:before,
-.fonticon-up-1:before,
-.fonticon-up-circled:before,
-.fonticon-up-dir:before,
-.fonticon-up-open:before,
-.fonticon-user:before,
-.fonticon-users:before,
-.fonticon-vertical-ellipsis:before,
-.fonticon-wrench:before,
-.fonticon-wrench2:before {
-  display: inline-block;
-  font-family: "fauxtonicon5";
-  font-style: normal;
-  font-weight: normal;
-  font-variant: normal;
-  line-height: 1;
-  text-decoration: inherit;
-  text-rendering: optimizeLegibility;
-  text-transform: none;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  font-smoothing: antialiased;
-}
-
-.fonticon-activetasks { &:before { content: "\f100"; }}
-.fonticon-arrow-box-down { &:before { content: "\f101"; }}
-.fonticon-arrow-box-up { &:before { content: "\f102"; }}
-.fonticon-arrow_left { &:before { content: "\f103"; }}
-.fonticon-arrow_right { &:before { content: "\f104"; }}
-.fonticon-arrows-cw { &:before { content: "\f105"; }}
-.fonticon-article { &:before { content: "\f106"; }}
-.fonticon-attention-alt { &:before { content: "\f107"; }}
-.fonticon-attention-circled { &:before { content: "\f108"; }}
-.fonticon-bell { &:before { content: "\f109"; }}
-.fonticon-block { &:before { content: "\f10a"; }}
-.fonticon-bookmark { &:before { content: "\f10b"; }}
-.fonticon-bookmark-ribbon-wplus { &:before { content: "\f10c"; }}
-.fonticon-burger { &:before { content: "\f10d"; }}
-.fonticon-cancel { &:before { content: "\f10e"; }}
-.fonticon-cancel-circled { &:before { content: "\f10f"; }}
-.fonticon-cancel-circled2 { &:before { content: "\f110"; }}
-.fonticon-circle-empty { &:before { content: "\f111"; }}
-.fonticon-clipboard { &:before { content: "\f112"; }}
-.fonticon-clock { &:before { content: "\f113"; }}
-.fonticon-cog { &:before { content: "\f114"; }}
-.fonticon-collapse { &:before { content: "\f115"; }}
-.fonticon-cw { &:before { content: "\f116"; }}
-.fonticon-dashboard { &:before { content: "\f117"; }}
-.fonticon-database { &:before { content: "\f118"; }}
-.fonticon-deselect-all { &:before { content: "\f119"; }}
-.fonticon-document { &:before { content: "\f11a"; }}
-.fonticon-documents { &:before { content: "\f11b"; }}
-.fonticon-dot-circled { &:before { content: "\f11c"; }}
-.fonticon-down { &:before { content: "\f11d"; }}
-.fonticon-down-1 { &:before { content: "\f11e"; }}
-.fonticon-down-circled { &:before { content: "\f11f"; }}
-.fonticon-down-dir { &:before { content: "\f120"; }}
-.fonticon-down-open { &:before { content: "\f121"; }}
-.fonticon-drop-down-dots { &:before { content: "\f122"; }}
-.fonticon-exchange { &:before { content: "\f123"; }}
-.fonticon-expand { &:before { content: "\f124"; }}
-.fonticon-eye { &:before { content: "\f125"; }}
-.fonticon-file-code-o { &:before { content: "\f126"; }}
-.fonticon-files-o { &:before { content: "\f127"; }}
-.fonticon-filter { &:before { content: "\f128"; }}
-.fonticon-gears { &:before { content: "\f129"; }}
-.fonticon-help { &:before { content: "\f12a"; }}
-.fonticon-help-circled { &:before { content: "\f12b"; }}
-.fonticon-info-circled { &:before { content: "\f12c"; }}
-.fonticon-json { &:before { content: "\f12d"; }}
-.fonticon-key { &:before { content: "\f12e"; }}
-.fonticon-left { &:before { content: "\f12f"; }}
-.fonticon-left-1 { &:before { content: "\f130"; }}
-.fonticon-left-circled { &:before { content: "\f131"; }}
-.fonticon-left-dir { &:before { content: "\f132"; }}
-.fonticon-left-open { &:before { content: "\f133"; }}
-.fonticon-link { &:before { content: "\f134"; }}
-.fonticon-list-alt { &:before { content: "\f135"; }}
-.fonticon-lock { &:before { content: "\f136"; }}
-.fonticon-mail { &:before { content: "\f137"; }}
-.fonticon-mail-alt { &:before { content: "\f138"; }}
-.fonticon-map { &:before { content: "\f139"; }}
-.fonticon-map2 { &:before { content: "\f13a"; }}
-.fonticon-megaphone { &:before { content: "\f13b"; }}
-.fonticon-minus { &:before { content: "\f13c"; }}
-.fonticon-minus-circled { &:before { content: "\f13d"; }}
-.fonticon-minus-circled2 { &:before { content: "\f13e"; }}
-.fonticon-minus-squared { &:before { content: "\f13f"; }}
-.fonticon-minus-squared-alt { &:before { content: "\f140"; }}
-.fonticon-mixer { &:before { content: "\f141"; }}
-.fonticon-new-database { &:before { content: "\f142"; }}
-.fonticon-ok { &:before { content: "\f143"; }}
-.fonticon-ok-circled { &:before { content: "\f144"; }}
-.fonticon-ok-circled-2 { &:before { content: "\f145"; }}
-.fonticon-paperclip { &:before { content: "\f146"; }}
-.fonticon-pencil { &:before { content: "\f147"; }}
-.fonticon-picture { &:before { content: "\f148"; }}
-.fonticon-play { &:before { content: "\f149"; }}
-.fonticon-plus { &:before { content: "\f14a"; }}
-.fonticon-plus-circled { &:before { content: "\f14b"; }}
-.fonticon-plus-circled2 { &:before { content: "\f14c"; }}
-.fonticon-plus-squared { &:before { content: "\f14d"; }}
-.fonticon-plus-squared-alt { &:before { content: "\f14e"; }}
-.fonticon-popin { &:before { content: "\f14f"; }}
-.fonticon-popout { &:before { content: "\f150"; }}
-.fonticon-profile { &:before { content: "\f151"; }}
-.fonticon-replicate { &:before { content: "\f152"; }}
-.fonticon-reply { &:before { content: "\f153"; }}
-.fonticon-reply-all { &:before { content: "\f154"; }}
-.fonticon-resize-full { &:before { content: "\f155"; }}
-.fonticon-resize-full-reverse { &:before { content: "\f156"; }}
-.fonticon-resize-small { &:before { content: "\f157"; }}
-.fonticon-resize-small-reverse { &:before { content: "\f158"; }}
-.fonticon-right { &:before { content: "\f159"; }}
-.fonticon-right-1 { &:before { content: "\f15a"; }}
-.fonticon-right-circled { &:before { content: "\f15b"; }}
-.fonticon-right-dir { &:before { content: "\f15c"; }}
-.fonticon-right-open { &:before { content: "\f15d"; }}
-.fonticon-save { &:before { content: "\f15e"; }}
-.fonticon-search { &:before { content: "\f15f"; }}
-.fonticon-select-all { &:before { content: "\f160"; }}
-.fonticon-sidenav-filter-function { &:before { content: "\f161"; }}
-.fonticon-sidenav-info { &:before { content: "\f162"; }}
-.fonticon-sidenav-list-function { &:before { content: "\f163"; }}
-.fonticon-sidenav-map-reduce { &:before { content: "\f164"; }}
-.fonticon-sidenav-search { &:before { content: "\f165"; }}
-.fonticon-sidenav-show-function { &:before { content: "\f166"; }}
-.fonticon-sidenav-update-function { &:before { content: "\f167"; }}
-.fonticon-sitemap { &:before { content: "\f168"; }}
-.fonticon-stats { &:before { content: "\f169"; }}
-.fonticon-support { &:before { content: "\f16a"; }}
-.fonticon-swap-arrows { &:before { content: "\f16b"; }}
-.fonticon-table { &:before { content: "\f16c"; }}
-.fonticon-trash { &:before { content: "\f16d"; }}
-.fonticon-up { &:before { content: "\f16e"; }}
-.fonticon-up-1 { &:before { content: "\f16f"; }}
-.fonticon-up-circled { &:before { content: "\f170"; }}
-.fonticon-up-dir { &:before { content: "\f171"; }}
-.fonticon-up-open { &:before { content: "\f172"; }}
-.fonticon-user { &:before { content: "\f173"; }}
-.fonticon-users { &:before { content: "\f174"; }}
-.fonticon-vertical-ellipsis { &:before { content: "\f175"; }}
-.fonticon-wrench { &:before { content: "\f176"; }}
-.fonticon-wrench2 { &:before { content: "\f177"; }}
diff --git a/assets/less/layouts.less b/assets/less/layouts.less
deleted file mode 100644
index ea871cb..0000000
--- a/assets/less/layouts.less
+++ /dev/null
@@ -1,166 +0,0 @@
-@import "variables.less";
-@import "mixins.less";
-
-
-/* new flex layout for templates. Specificity needed for now. Will remove at end */
-body #dashboard .flex-layout,
-body #dashboard.flex-layout,
-body #notification-center .flex-layout {
-  .display-flex();
-
-  &.flex-col {
-    .flex-direction(column);
-  }
-  &.flex-row {
-    .flex-direction(row);
-  }
-
-  /* FLEXBOX REFACTOR: temporary overrides */
-  padding: 0;
-  &>div {
-    padding: 0;
-  }
-  /* end overrides */
-
-  /*
-  always default all child elements as flex items that neither shrink nor expand. Assumes all flex-layout containers
-  contain at least one .flex-body to indicate that's the one that expands
-  */
-  &>* {
-    .flex(0,1,auto);
-  }
-
-  /* notice we don't set heights. Flex will expand to fill the content but no more */
-  #dashboard-upper-content {
-    .flex(0 0 auto);
-  }
-  #dashboard-lower-content {
-    padding: @panelPadding;
-  }
-
-  #footer {
-    .flex(0 0 auto);
-  }
-}
-
-/* can be added to any element in a display:flex element that you want to act as the main body. It expands to the
-   available space and shows a scrollbar */
-body #dashboard .flex-body, body #notification-center .flex-body {
-  .flex(1);
-  overflow: auto;
-}
-
-/* tells an element to be as large as the content. This will replace the hardcoded ones */
-body #dashboard .flex-fill {
-  .flex(0 0 auto);
-}
-
-/* used on the databases page. To be removed once moved to flexbox */
-.faux__onepane-footer {
-  position: absolute;
-  bottom: 0;
-  width: 100%;
-  margin: 0;
-}
-
-/* this drops .fixed-header, which was a position:absolute'd element, and switches it and all children to use flexbox. */
-.one-pane > header {
-  width: 100%;
-
-  #right-header {
-    -ms-flex-preferred-size: auto;
-    -webkit-flex: 0 0 auto;
-    flex-grow: 0;
-    flex-shrink: 0;
-    flex-basis: inherit;
-  }
-  #api-navbar {
-    .flex(0 0 auto);
-  }
-}
-
-body #dashboard .flex-body#right-header {
-  .flex(0 1 auto);
-  overflow: hidden;
-}
-
-body #dashboard .flex-layout #api-navbar {
-  .flex(0 0 auto);
-}
-
-/* temporary wedge. Can be replaced at end */
-.with-sidebar {
-
-  #api-navbar {
-    float: right;
-  }
-  /* end tmp wedge */
-}
-
-body #dashboard .header-right-panel {
-  overflow: hidden;
-}
-
-.right-header-wrapper {
-  #api-navbar {
-    float: right;
-  }
-}
-
-body #dashboard .right-db-header {
-  &>div {
-    .flex(1 0 auto);
-    /*overflow: hidden; */
-  }
-}
-
-/** FLEXBOX REFACTOR: "body #dashboard" can be removed at end. Specificity needed right now */
-body #dashboard.two-pane {
-  height: 100%;
-
-  /* this will be renamed & reused once all templates use flexbox */
-  #two-pane-content {
-    .display-flex();
-    .flex-direction(row);
-  }
-  #left-content {
-    .flex(0 0 440px);
-  }
-  #footer {
-    .flex(0 0 50px)
-  }
-
-  /* overrides a weird default */
-  .editor-wrapper form {
-    padding-bottom: 0;
-  }
-
-  /* temporary. header-wrapper will be converted to flexbox everywhere */
-  .header-wrapper {
-    .flex(0 0 65px);
-    position: inherit;
-  }
-}
-
-body #dashboard.template-with-sidebar {
-  header {
-    .flex(0 0 65px);
-  }
-  #sidebar-content {
-    .flex(0 0 330px);
-    overflow: auto;
-    overflow-x: hidden;
-  }
-  .template-content {
-    overflow: hidden;
-  }
-  #dashboard-content {
-    border-left: 1px solid @grayLight;
-    .left-border();
-  }
-}
-
-/* tmp. Will be removed at end of flexbox refactor */
-aside#sidebar-content {
-  top: 64px;
-}
diff --git a/assets/less/mixins.less b/assets/less/mixins.less
deleted file mode 100644
index f8e5068..0000000
--- a/assets/less/mixins.less
+++ /dev/null
@@ -1,66 +0,0 @@
-.translate-origin(@x, @y) {
-  -webkit-transform-origin: @x @y;
-     -moz-transform-origin: @x @y;
-      -ms-transform-origin: @x @y;
-       -o-transform-origin: @x @y;
-          transform-origin: @x @y;
-}
-
-.customTransition(@prop, @delay, @a, @b, @c, @d){
--webkit-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-   -moz-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-    -ms-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-     -o-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-        transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); /* custom */
-
--webkit-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-   -moz-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-    -ms-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-     -o-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-        transition-timing-function: cubic-bezier(@a, @b, @c, @d); /* custom */
-}
-
-.transition(...) {
-  -webkit-transition: @arguments;
-  -moz-transition: @arguments;
-  -ms-transition: @arguments;
-  -o-transition: @arguments;
-  transition: @arguments;
-}
-
-.bottom-border(@height: 6px) {
-  border-bottom: 1px solid #999;
-}
-
-.left-border() {
-  border-left: 1px solid #999;
-}
-
-.noselect() {
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -khtml-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-
-.display-flex() {
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-}
-
-/* rather than run through all permutations of the shorthand options for flex, this just pulls all arguments */
-.flex(...) {
-  -webkit-flex: @arguments;
-  -ms-flex: @arguments;
-  flex: @arguments;
-}
-
-/* @dir: column or row */
-.flex-direction(@dir) {
-  -webkit-flex-direction: @dir;
-  -ms-flex-direction: @dir;
-  flex-direction: @dir;
-}
diff --git a/assets/less/notification-center.less b/assets/less/notification-center.less
deleted file mode 100644
index e5b6f02..0000000
--- a/assets/less/notification-center.less
+++ /dev/null
@@ -1,229 +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.
-
-@import "variables.less";
-@import "mixins.less";
-
-body #dashboard #notification-center-btn {
-  border: 0;
-  background-color: @background;
-  border-left: 1px solid #cccccc;
-  font-size: 24px;
-  color: #666;
-  padding: 0;
-  cursor: pointer;
-  .flex(0 0 auto);
-
-  &>div {
-    padding: 17px 16px 16px;
-  }
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-#notification-center {
-  .notification-center-panel {
-    z-index: 112;
-    position: fixed;
-    box-shadow: 0 6px 5px 4px rgba(0, 0, 0, 0.1);
-    top: 0;
-    right: 0;
-    width: 300px;
-    height: 100%;
-    background-color: #333333;
-    color: #dddddd;
-
-    header {
-      .flex(0 0 auto);
-      padding: 16px;
-
-      h1 {
-        font-size: 16px;
-        line-height: 20px;
-        margin: 0;
-        color: white;
-        font-weight: normal;
-      }
-      .fonticon-bell {
-        .flex(0 0 30px);
-      }
-      button {
-        .flex(0 0 46px);
-        background-color: transparent;
-        border: 0;
-        margin: -18px -16px -14px; /* enlarges the hit area */
-        font-size: 21px;
-        color: #dddddd;
-        &:hover {
-          color: @hoverHighlight;
-        }
-      }
-    }
-
-    .notification-filter {
-      .flex(0 0 29px);
-
-      list-style: none;
-      margin: 0;
-      font-size: 13px;
-
-      li {
-        text-align: center;
-        margin-right: 1px;
-        background-color: #444444;
-        padding: 4px 0 3px;
-        cursor: pointer;
-
-        &.selected {
-          background-color: #555555;
-        }
-        &:hover {
-          background-color: @hoverHighlight;
-          .fonticon {
-            color: white;
-          }
-        }
-      }
-      .fonticon {
-        font-size: 16px;
-      }
-      .fonticon-ok-circled {
-        font-size: 14px;
-      }
-    }
-
-    .notification-list {
-      margin: 15px 0 0;
-      list-style-type: none;
-
-      li {
-        margin: 0 16px;
-        line-height: 16px;
-        font-size: 12px;
-        overflow: hidden;
-        border-bottom: 1px solid #222222;
-
-        &.no-notifications {
-          color: #999999;
-          margin-top: 25px;
-          border-bottom: 0;
-        }
-        &>div {
-          padding: 10px 0 15px;
-        }
-        span {
-          .flex(0 0 30px);
-        }
-        button {
-          .flex(0 0 22px);
-          color: #dddddd;
-          background: transparent;
-          border: 0;
-          height: 20px;
-          margin-top: -4px;
-          margin-left: 6px;
-          font-size: 100%;
-          &:hover {
-            color: @hoverHighlight;
-          }
-        }
-        p {
-          margin-bottom: 0;
-          overflow-wrap: break-word;
-        }
-        div.flex-body {
-          overflow: hidden;
-        }
-      }
-      .fonticon {
-        font-size: 15px;
-      }
-      .fonticon-ok-circled {
-        font-size: 13px;
-      }
-      a {
-        color: white;
-        text-decoration: underline;
-      }
-      .notification-actions {
-        font-size: 11px;
-        margin-top: 2px;
-        span.divider {
-          color: #444444;
-          padding: 0 5px;
-        }
-      }
-      .time-elapsed {
-        color: #565656;
-      }
-      .copy {
-        color: @blue;
-        text-decoration: none;
-      }
-    }
-
-    footer {
-      border-top: 1px solid #555555;
-      .flex(0 0 auto);
-      text-align: center;
-      padding: 4px;
-    }
-  }
-
-  .fonticon-ok-circled {
-    color: @successAlertBackground;
-  }
-  .fonticon-attention-circled {
-    color: @globalErrorAlertBackground;
-  }
-  .fonticon-info-circled {
-    color: @infoAlertBackground;
-  }
-
-  .notification-page-mask {
-    z-index: -1;
-    position: fixed;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    opacity: 0;
-
-    &.visible {
-      z-index: 110;
-      opacity: 0.3;
-      background-color: #000000;
-    }
-  }
-}
-
-//Leaving this in for now as I'm not sure where it is used
-// @-webkit-keyframes in {
-//   0% { max-height: 0; }
-//   100% { max-height: 1000px; }
-// }
-//
-// @-webkit-keyframes out {
-//   0% { max-height: 1000px; }
-//   100% { max-height:0; }
-// }
-//
-// @keyframes in {
-//   0% { max-height: 0; }
-//   100% { max-height: 1000px; }
-// }
-//
-// @keyframes out {
-//   0% { max-height: 1000px; }
-//   100% { max-height:0; }
-// }
diff --git a/assets/less/pagination.less b/assets/less/pagination.less
deleted file mode 100644
index 9a93356..0000000
--- a/assets/less/pagination.less
+++ /dev/null
@@ -1,141 +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.
-
-//
-// Pagination (multiple pages)
-// --------------------------------------------------
-
-// Space out pagination from surrounding content
-.pagination {
-  margin: @baseLineHeight 0;
-}
-
-ul.pagination {
-  // Allow for text-based alignment
-  display: inline-block;
-  .ie7-inline-block();
-  // Reset default styles
-  margin-left: 0;
-  margin-bottom: 0;
-  // Visuals
-  .border-radius(@baseBorderRadius);
-  .box-shadow(0 1px 2px rgba(0,0,0,.05));
-}
-ul.pagination > li {
-  display: inline; // Remove list-style and block-level defaults
-}
-ul.pagination > li > a,
-ul.pagination > li > span {
-  float: left; // Collapse white-space
-  padding: 4px 12px;
-  line-height: @baseLineHeight;
-  text-decoration: none;
-  background-color: @paginationBackground;
-  border: 1px solid @paginationBorder;
-  border-left-width: 0;
-}
-ul.pagination > li > a:hover,
-ul.pagination > li > a:focus,
-ul.pagination > .active > a,
-ul.pagination > .active > span {
-  background-color: @paginationActiveBackground;
-}
-ul.pagination > li > a:hover {
-  cursor: pointer;
-}
-
-ul.pagination > .active > a,
-ul.pagination > .active > a:hover,
-ul.pagination > .active > span {
-  color: @grayLight;
-  cursor: default;
-}
-ul.pagination > .disabled > span,
-ul.pagination > .disabled > a,
-ul.pagination > .disabled > a:hover,
-ul.pagination > .disabled > a:focus {
-  color: @grayLight;
-  background-color: transparent;
-  cursor: default;
-}
-ul.pagination > li:first-child > a,
-ul.pagination > li:first-child > span {
-  border-left-width: 1px;
-  .border-left-radius(@baseBorderRadius);
-}
-ul.pagination > li:last-child > a,
-ul.pagination > li:last-child > span {
-  .border-right-radius(@baseBorderRadius);
-}
-
-
-// Alignment
-// --------------------------------------------------
-
-.pagination-centered {
-  text-align: center;
-}
-.pagination-right {
-  text-align: right;
-}
-
-
-// Sizing
-// --------------------------------------------------
-
-// Large
-.pagination-large {
-  > li > a,
-  > li > span {
-    padding: @paddingLarge;
-    font-size: @fontSizeLarge;
-  }
-  > li:first-child > a,
-  > li:first-child > span {
-    .border-left-radius(@borderRadiusLarge);
-  }
-  > li:last-child > a,
-  > li:last-child > span {
-    .border-right-radius(@borderRadiusLarge);
-  }
-}
-
-// Small and mini
-.pagination-mini,
-.pagination-small {
-  > li:first-child > a,
-  > li:first-child > span {
-    .border-left-radius(@borderRadiusSmall);
-  }
-  > li:last-child > a,
-  > li:last-child > span {
-    .border-right-radius(@borderRadiusSmall);
-  }
-}
-
-// Small
-.pagination-small {
-  > li > a,
-  > li > span {
-    padding: @paddingSmall;
-    font-size: @fontSizeSmall;
-  }
-}
-// Mini
-.pagination-mini {
-  > li > a,
-  > li > span {
-    padding: @paddingMini;
-    font-size: @fontSizeMini;
-  }
-}
-
diff --git a/assets/less/prettyprint.less b/assets/less/prettyprint.less
deleted file mode 100644
index edb5ce5..0000000
--- a/assets/less/prettyprint.less
+++ /dev/null
@@ -1,33 +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.
-
-pre.prettyprint {
-  background: @defaultText;
-  border: none;
-  line-height: 1.4;
-  margin: 0;
-  padding: 16px;
-}
-.prettyprint {
-  .pln, .pun, .typ {
-    color: #B3B4B4;
-  }
-  .kwd {
-    color: #dddddd;
-  }
-  .str, .lit {
-    color: #fff;
-  }
-  .com {
-    color: #666;
-  }
-}
diff --git a/assets/less/react-animations.less b/assets/less/react-animations.less
deleted file mode 100644
index 06ea928..0000000
--- a/assets/less/react-animations.less
+++ /dev/null
@@ -1,47 +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.
-
-.fade-enter {
-  opacity: 0;
-  transition: opacity .25s;
-
-  &.fade-enter-active {
-    opacity: 1;
-  }
-}
-
-.fade-leave {
-  opacity: 1;
-  transition: opacity .25s;
-
-  &.fade-leave-active {
-    opacity: 0;
-  }
-}
-
-.slow-fade-enter {
-  opacity: 0;
-  transition: opacity .75s;
-
-  &.slow-fade-enter-active {
-    opacity: 1;
-  }
-}
-
-.slow-fade-leave {
-  opacity: 1;
-  transition: opacity .75s;
-
-  &.slow-fade-leave-active {
-    opacity: 0;
-  }
-}
diff --git a/assets/less/templates.less b/assets/less/templates.less
deleted file mode 100644
index b5bc864..0000000
--- a/assets/less/templates.less
+++ /dev/null
@@ -1,319 +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.
-
- @import "variables.less";
-
-/* ajax loader */
-.loader {
-  background: url('../img/loader.gif') center center no-repeat;
-  min-height:  100px;
-}
-
-#main {
-  position: relative;
-  overflow: hidden;
-  height: 100%;
-}
-
-#app-container {
-  height: 100vh;
-  position: relative;
-  overflow: hidden;
-}
-
-@media screen and (max-height: 600px) {
-  #primary-navbar {
-    overflow-y: auto;
-  }
-}
-
-@media screen and ( min-height: 600px ){
-  #primary-navbar {
-    overflow-y: hidden;
-  }
-}
-
-.bottom-border {
-  border-bottom: 1px solid #999;
-}
-
-.bottom-left-border {
-  border-bottom: 1px solid #999;
-  border-left: 1px solid #999;
-}
-
-
-#dashboard {
-  position: relative;
-  left: @navWidth;
-  padding-left: 0;
-  background-color: @sidebarBG;
-  height: 100%;
-  width: 100%;
-  .closeMenu & {
-    left: @collapsedNavWidth;
-  }
-}
-
-.wrapper {
-  position: relative;
-  overflow: hidden;
-  height: 100%;
-}
-
-.one-pane {
-  #dashboard-content {
-    top: @collapsedNavWidth;
-    .view {
-      padding-bottom: 30px;
-    }
-  }
-}
-
-.two-pane {
-  .inner {
-    padding-bottom: @collapsedNavWidth;
-  }
-}
-
-#sidebar-content {
-  width: @sidebarWidth;
-  background-color: @secondarySidebar;
-  > div.inner {
-    display: block;
-  }
-  .nav-list:last-child {
-    margin-bottom: 30px;
-  }
-}
-
-.scrollable {
-  height: auto;
-  overflow-y: auto;
-  overflow-x: hidden;
-  width: 100%;
-  position: absolute;
-  padding: 0;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-
-.pusher {
-  overflow: hidden;
-  position: relative;
-  height: 100%;
-  left: 0;
-  padding-right: @navWidth;
-  .closeMenu & {
-    padding-right: @collapsedNavWidth;
-  }
-}
-
-.right-header-wrapper {
-  overflow-x: hidden;
-  height: @collapsedNavWidth;
-}
-
-.header-wrapper {
-  .bottom-border();
-  .box-shadow(0 1px 0 0 rgba(0, 0, 0, 0.1));
-  position: absolute;
-  left: 0;
-  right: 0;
-  /*z-index: 50; */
-}
-
-#app-container > div {
-  position: relative;
-  height: 100%;
-}
-
-/* SIDEBAR TEMPLATE STYLES */
-.topmenu-defaults {
-  height: 70px;
-  padding: 12px 10px 0;
-  .box-sizing(border-box);
-}
-
-/* used in addons/changes */
-.dashboard-upper-menu {
-  border-left: 1px solid #999;
-  right: 0;
-  left: @sidebarWidth+@navWidth;
-  position: fixed;
-  display: block;
-
-  .topmenu-defaults;
-  background-color: #CBCBCB;
-  .closeMenu & {
-    left: @sidebarWidth+@collapsedNavWidth;
-  }
-}
-
-#dashboard-lower-content {
-  padding: 20px;
-  background-color: #F1F1F1;
-  position: relative;
-}
-
-#dashboard-content {
-
-  & > div {
-    padding: @panelPadding;
-  }
-
-  &.row-fluid {
-    /*remove gutter without rewriting variable*/
-    margin-left: 0px;
-  }
-
-  .with-sidebar & {
-    border-left: 1px solid @grayLight;
-    .left-border();
-    width: auto;
-    padding: 15px;
-    bottom: 0px;
-    top: @collapsedNavWidth;
-    position: absolute;
-    left: @sidebarWidth;
-    right: 0;
-    .box-sizing(border-box);
-  }
-  .with-tabs-sidebar & {
-    overflow: hidden;
-  }
-
-  > div.inner {
-    display: block;
-  }
-}
-
-/*
-  Sidenav:
-  USED IN DOCUMENT ADDON & EXTERNAL ADDONS
-*/
-.sidenav {
-  padding: 0;
-  header {
-    width: @sidebarWidth;
-    border-bottom: 1px solid #d3d7db;
-  }
-  .nav-list {
-    .divider {
-      border: none;
-    }
-    > li > a:hover {
-      background-color: @hoverHighlight;
-      color: #fff;
-    }
-    li.active > a {
-      color: @brandHighlight;
-    }
-    > li > a {
-      color: #333333;
-      padding: 10px 13px 10px 24px;
-      border-bottom: 1px solid #d3d7db;
-      span {
-        margin-right: 8px;
-        width: 14px;
-        display: inline-block;
-        text-align: center;
-      }
-    }
-    a {
-      display: block;
-      padding: 10px 5px 5px 15px;
-      color: @subListGray;
-      .divider {
-        background: none;
-        color: #ccc;
-        padding: 0 2px;
-      }
-    }
-    .nav-header {
-      padding: 0px;
-      text-shadow: none;
-      color: #333333;
-      & > span:hover {
-        color: @linkColor;
-      }
-    }
-  }
-}
-
-.row-fluid.content-area {
-  background-color: @background;
-}
-
-.two-pane {
-  .content-area {
-    height: 100%;
-    top: @collapsedNavWidth;
-    position: relative;
-  }
-
-  #right-content {
-    .view {
-      padding: 0 0 40px;
-    }
-    border-left: 1px solid #999;
-  }
-  .right-header-wrapper {
-    border-left: 1px solid #999;
-    .faux-header__searchboxwrapper {
-      display: none;
-    }
-  }
-}
-
-.notification-wrapper {
-  opacity: 0;
-  height: 0;
-}
-
-.toast-container {
-  margin-top: @breadcrumbHeight;
-  padding:0;
-  right: 0;
-}
-
-.Toastify__toast {
-  border: 1px solid #999;
-  background-color: #fff;
-  border-right: 0;
-  color: black;
-}
-
-.Toastify__toast--info {
-  &, .Toastify__close-button--info {
-    border-left: 6px solid @infoAlertBackground;
-    }
-}
-
-.Toastify__toast--success {
-  &, .Toastify__close-button--success {
-    border-left: 6px solid @successAlertBackground;
-  }
-}
-.Toastify__toast--warning {
-  &, .Toastify__close-button--warning {
-    border-left: 6px solid @warningBackground;
-  }
-}
-.Toastify__toast--error {
-  &, .Toastify__close-button--error {
-    border-left: 6px solid @errorAlertColor;
-  }
-}
-
diff --git a/assets/less/trays.less b/assets/less/trays.less
deleted file mode 100644
index 5b99034..0000000
--- a/assets/less/trays.less
+++ /dev/null
@@ -1,96 +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.
-
-@import "bootstrap/mixins.less";
-@import "icons.less";
-
-// @deprated - old trays
-.hide-tray {
-  display: none;
-}
-
-.show-tray {
-  display: block !important; //nasty hack until we convert all trays to React
-}
-
-.tray {
-  display: none;
-  position: absolute;
-  right: 0px;
-  top: 55px;
-  z-index: 11;
-  background-color: #333;
-  color: #fff;
-  margin: 0;
-
-  .add-on {
-    font-size: 16px;
-    background: none;
-    padding: 0px;
-    margin: 10px 0;
-    border: none;
-    display: block;
-    text-align: left;
-    color: #fff;
-    text-shadow: none;
-    height: auto;
-    line-height: 1em;
-  }
-
-  input[type="text"],
-  textarea {
-    .border-radius(5px);
-    background-color: #666;
-    padding: 8px;
-    border: none;
-    color: #eee;
-    font-size: 13px;
-  }
-
-  input[type="text"]:focus,
-  textarea:focus,
-  input[type="text"]:hover,
-  textarea:hover {
-    border: 2px solid @white;
-  }
-  input[type="text"], textarea {
-    box-shadow: none;
-    -webkit-border-radius: 5px;
-    -moz-border-radius: 5px;
-    border-radius: 5px;
-    background-color: rgba(255,255,255,0.1);
-    padding: 8px;
-    border: 2px solid rgba(255,255,255,0.1);
-    color: rgba(255,255,255,0.8);
-    font-size: 13px;
-  }
-  input:-webkit-input-placeholder,
-  form input:-moz-placeholder,
-  input:-ms-input-placeholder {
-    color: rgba(255,255,255,0.4);
-  }
-}
-
-.tray:before {
-  content: '';
-  position: absolute;
-  top: -25px;
-  border-color: transparent transparent #333 transparent;
-  border-style: solid;
-  border-width: 15px;
-  width: 0;
-  height: 0;
-}
-
-#header-lookahead .dropdown-menu li.active {
-  width: 100%;
-}
diff --git a/assets/less/variables.less b/assets/less/variables.less
deleted file mode 100644
index eb9e489..0000000
--- a/assets/less/variables.less
+++ /dev/null
@@ -1,139 +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.
-
-@import "bootstrap/variables.less";
-
-/*Dashboard-Specific Colors*/
-@dangerRed: #F00;
-@hoverHighlight: #e73d34;
-@brandHighlight: #AF2D24;
-@brandDark1: #564E4C;
-@brandDark2: #3A2C2B;
-@navIconColor: #B3B4B4;
-@navIconActive: #ffffff;
-@trayBackground1: #3A2C2B;
-@trayBackground2: #3A2C2B;
-
-/*buttons */
-@primaryGreen: #2bb673;
-@secondaryBlue: #0082BF;
-@primaryGreenDisabled: #8EC9AD;
-@secondaryBlueDisabled: #86BAD2;
-@dangerDisabled: #FF9797;
-@buttonText: #FFF;
-@buttonTextDisabled: #F1F1F1;
-
-/* colors */
-@orange: #F3622D;
-@blue: #049cdb;
-@green: #7FA30C;
-
-
-/* base */
-@background: #F2F2F2;
-@leftPanel: @background;
-@rightPanel: #CBCBCB;
-
-/* font */
-@fontGrey: #808080;
-@defaultText: #4D4D4D;
-@defaultHTag: #333333;
-
-/* sublist */
-@subListGray: #767F89;
-
-/*nav*/
-@navWidth: 220px;
-
-
-/*top header*/
-@breadcrumbBG: #F1F1F1;
-@breadcrumbText: @brandHighlight;
-@breadcrumbArrow: #999999;
-@breadcrumbBorder: @brandHighlight;
-@breadcrumbHeight: 64px;
-
-/* document-header in doclist */
-@docHeaderBG: #3a3a3a;
-@docHeaderBorderBottom: #2a2a2a;
-@docHeaderOtherBorders: #000;
-@docHeaderLabels: #909090;
-@docHeaderDocId: @brandHighlight;
-
-/* checkboxes in doc-list */
-@docCheckBoxUncheckedBG: #EFEFEF;
-@docCheckBoxUncheckedBorder: 2px solid #999;
-@docCheckBoxHoverBorder: 2px solid #ccc;
-@docCheckBoxCheckedBorder: 2px solid #000;
-@docCheckBoxCheckedBG: #3a3a3a;
-
-/* sidebar */
-@sidebarBG: #F2F2F2;
-@sidebarWidth: 330px;
-
-/* secondary sidebar */
-@secondarySidebar: white;
-
-/* links */
-@linkColor: @brandHighlight;
-@linkColorHover: @brandHighlight;
-
-/* slider */
-@sliderBorderColor: #999999;
-@sliderBackground: @background;
-@sliderBackgroundHighlight: @brandHighlight; 
-
-/* borders */
-@radius: 4px;
-@baseBorderRadius: 0;
-
-@darkBorder: #aaa;
-
-/* shadows */
-@boxShadow: 2px 2px rgba(0,0,0,0.2);
-@boxShadowOff: 2px 2px rgba(0,0,0,0);
-@boxShadowLeft: -4px 4px rgba(0,0,0,0.2);
-@boxShadowLeftOff: -4px 4px rgba(0,0,0,0);
-@textShadow: 1px 2px rgba(0,0,0,0.2);
-@textShadowOff: 1px 2px rgba(0,0,0,0);
-
-/* animation */
-@transitionSpeed: .25s;
-@transitionEaseType: linear;
-@highlightEffectColor: #bbbbbb;
-
-/* breakpoints */
-@collapsedNavWidth: 64px;
-
-/* padding and margins */
-@panelPadding: 15px;
-
-/* Alerts */
-@globalErrorAlertBackground: #c45b55;
-
-@infoAlertBackground: #329898;
-@infoAlertColor: #fff;
-@successAlertBackground: #448c11;
-@successAlertColor: #CBDFBD;
-@errorAlertBackground: #222;
-@errorAlertColor: #ff0c35;
-
-/* query history */
-@queryHistoryBGColor: white;
-@queryHistoryColor: @defaultText;
-
-/*
-  -- logo image paths --
-  These are set during webpack bundle through your settings.json file.
-*/
-@largeLogoPath: "";
-@smallLogoPath: "";
diff --git a/bin/build-couchdb-dev.sh b/bin/build-couchdb-dev.sh
deleted file mode 100755
index 546805c..0000000
--- a/bin/build-couchdb-dev.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-# 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.
-set -xe
-
-if [[ $COUCHDB_IMAGE == "couchdb:dev" ]]; then
-    git clone https://github.com/apache/couchdb-docker.git
-    cd couchdb-docker
-    docker build dev --build-arg configure_options='--disable-fauxton --disable-docs --spidermonkey-version 60' -t couchdb:dev
-    cd ..
-    rm -rf couchdb-docker
-fi
diff --git a/bin/create-animal-db b/bin/create-animal-db
deleted file mode 100755
index 56d75c2..0000000
--- a/bin/create-animal-db
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env node
-
-// 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.
-
-// deletes the old animaldb, creates a new, fresh one,
-// with conflicts for the zebra doc
-
-
-const url = 'http://tester:testerpass@localhost:5984/';
-
-createAnimalDb = require('../test/create-animal-db.js');
-
-createAnimalDb(url, () => {
-  console.log('created :)');
-});
diff --git a/bin/create-n-dbs b/bin/create-n-dbs
deleted file mode 100755
index 2874e9e..0000000
--- a/bin/create-n-dbs
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env node
-
-// 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.
-
-const optimist = require('optimist');
-const nano = require('nano');
-
-const {parallelLimit} = require('async');
-
-
-const NAMESPACE = 'test-db-';
-const PARALLEL_LIMIT = 50;
-const URL = 'http://localhost:5984';
-
-optimist
-  .usage('Create a certain amount of dbs \nUsage: $0')
-
-  .options('help', {
-    alias: 'h',
-    describe: 'Show this message'
-  })
-  .options('number', {
-    alias: 'n',
-    describe: 'The amount of databases to create'
-  })
-  .options('delete', {
-    alias: 'd',
-    default: false,
-    describe: 'Delete databases'
-  });
-
-const argv = optimist.argv;
-
-if (argv.help || argv.h) {
-  return optimist.showHelp(console.log);
-}
-
-const isDelete = (argv.d || argv.delete);
-const isCreate = (argv.n || argv.number);
-
-if (!isDelete && !isCreate) {
-  console.error('[ERROR] Please provide -d or -n to delete or create test-databases \n');
-  optimist.showHelp(console.log);
-  process.exit(1);
-}
-
-const nClient = nano(URL)
-
-if (isCreate) {
-  return createNdbs(argv.n || argv.number);
-}
-
-if (isDelete) {
-  return deleteDbs();
-}
-
-function getExistingDbs (cb) {
-  nClient.db.list((err, body) => {
-    if (err) {
-      throw err;
-    }
-
-    const list = body.filter(db => {
-      return new RegExp(NAMESPACE).test(db);
-    });
-
-    cb(null, list);
-  });
-}
-
-function createNdbs (number) {
-  getExistingDbs((err, dbs) => {
-    const offset = dbs.length;
-
-    const newDbs = [];
-    for (let i = offset; i < offset + number; i++) {
-      newDbs.push(NAMESPACE + i);
-    }
-
-    const tasks = newDbs.map((db) => {
-      return function task (cb) {
-        nClient.db.create(db, (err, body) => {
-          if (err) {
-            console.error(err);
-          }
-
-          cb(null);
-        });
-      }
-    });
-
-    parallelLimit(tasks, PARALLEL_LIMIT, (err) => {
-      if (err) {
-        console.error(err);
-      }
-    });
-  });
-}
-
-function deleteDbs () {
-  getExistingDbs((err, dbs) => {
-    const list = dbs.map(db => {
-      return (cb) => {
-        nClient.db.destroy(db, (err, resp) => {
-          if (err) {
-            cb(err);
-            return;
-          }
-
-          cb(null);
-        });
-      };
-    });
-
-    parallelLimit(list, PARALLEL_LIMIT, (err) => {
-      if (err) {
-        console.error(err);
-      }
-    });
-  });
-}
diff --git a/bin/docker-up-and-check.sh b/bin/docker-up-and-check.sh
deleted file mode 100755
index 27f99c7..0000000
--- a/bin/docker-up-and-check.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/bash
-
-# 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.
-
-
-## Sometimes the couchdb docker container won't start correctly, which causes
-## the Travis build to fail and forces users to resubmit their PRs.
-## This script tries to minimize the issue by retrying to start the containers
-## in case of failure.
-
-
-start_containters_and_check() {
-  npm run docker:up
-  if [[ $? != 0 ]]; then exit $?; fi
-
-  # Uses docker logs to check if couchdb server has started
-  NUM_CHECKS=10
-  for ((check=1; check<=$NUM_CHECKS; check++));
-  do
-    echo "Checking if couchdb container has started ($check of $NUM_CHECKS)"
-    logs=$(docker logs couchdb)
-    if [[ $logs == *"Errno socket error"* ]]; then
-      echo "Failed to start couchdb container"
-      echo "=============================="
-      docker logs couchdb
-      echo "=============================="
-      return 1
-    fi
-    if [[ $logs == *"Apache CouchDB has started on"* ]]; then
-      echo "Docker containers are up"
-      echo "========================"
-      docker logs couchdb
-      echo "========================"
-      return 0
-    fi
-    sleep 6
-  done
-}
-
-stop_containters() {
-  npm run docker:down
-  sleep 2
-}
-
-
-if start_containters_and_check 
-then
-  exit 0
-fi
-
-stop_containters
-exit 2
diff --git a/bin/fauxton b/bin/fauxton
deleted file mode 100755
index e9630fc..0000000
--- a/bin/fauxton
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env node
-
-// 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 optimist = require('optimist')
-  .usage('Fauxton server \nUsage: $0')
-  .options('couchdb', {
-    alias : 'c',
-    default : 'http://localhost:5984',
-    describe: 'Url to your CouchDB instance'
-  })
-  .options('port', {
-    alias : 'p',
-    default : 8000,
-    describe: 'Local port that Fauxton will run on'
-  })
-  .options('help', {
-    alias : 'h',
-    describe: 'Show this message'
-  })
-  .options('contentSecurityPolicy', {
-    alias : 'csp',
-    default : true,
-    describe: 'Configure the content security policy'
-  });
-
-var argv = optimist.argv;
-
-if (argv.help || argv.h) {
-  return optimist.showHelp(console.log);
-}
-
-var server = require('..')(argv);
diff --git a/bin/install-docker-travis.sh b/bin/install-docker-travis.sh
deleted file mode 100755
index 99a8286..0000000
--- a/bin/install-docker-travis.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-# 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.
-
-sudo sh -c 'echo "deb https://apt.dockerproject.org/repo ubuntu-precise main" > /etc/apt/sources.list.d/docker.list'
-sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
-sudo apt-get update
-sudo apt-key update
-sudo apt-get -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install docker-engine=1.11.1-0~precise
-sudo rm /usr/local/bin/docker-compose
-curl -L https://github.com/docker/compose/releases/download/1.8.0-rc1/docker-compose-`uname -s`-`uname -m` > docker-compose
-chmod +x docker-compose
-sudo mv docker-compose /usr/local/bin
diff --git a/bin/remove-test-dbs.js b/bin/remove-test-dbs.js
deleted file mode 100755
index 3ae0ac8..0000000
--- a/bin/remove-test-dbs.js
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env node
-
-// 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.
-
-const fs = require('fs');
-const async = require('async');
-
-const settingsFilePath = './settings.json';
-const settingsFile = fs.existsSync(settingsFilePath) ? settingsFilePath : './settings.json.default.json';
-const settings = JSON.parse(fs.readFileSync(settingsFile)).nightwatch;
-const dbUrl = `${settings.db_protocol}://${settings.fauxton_username}:${settings.password}@${settings.db_host}:${settings.db_port}`;
-const nano = require('nano')(dbUrl);
-
-nano.db.list((err, body) => {
-  if (err) {
-    console.error('ERR', err);
-    return;
-  }
-  const list = body.filter(db => {
-    return /fauxton-selenium-tests/.test(db);
-  }).map(db => {
-    return (cb) => {
-      console.info('Removing db', db);
-      nano.db.destroy(db, (err) => {
-        if (err) {
-          cb(err);
-          return;
-        }
-
-        cb();
-      });
-    };
-  });
-
-  async.parallel(list, (err) => {
-    if (err) {
-      console.error(err);
-    }
-  });
-
-});
diff --git a/code-layout.md b/code-layout.md
deleted file mode 100644
index 3b974ea..0000000
--- a/code-layout.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Fauxton Code Overview
-
-This page documents a little practical information about the Fauxton codebase to help you get up to speed. 
-
-
-## Backbone and React 
-
-Fauxton was originally written in [Backbone](http://backbonejs.org), but in 2015 we're in the process of upgrading 
-the codebase to build it around [React](https://facebook.github.io/react/). We're replacing all Backbone Views with 
-(unit-tested!) React components. Backbone models and collections are still being used for server-side data retrieval 
-and storage as is URL routing, but the plan is to phase out all Backbone over time. 
-
-### React and the Flux pattern
-
-You can read more about [React](https://facebook.github.io/react/) and [Flux](https://facebook.github.io/flux/docs/overview.html) 
-on their sites, but a few quick words about both. 
-
-React is a relatively new framework created by Facebook, built on the idea of automatic DOM re-renders. Contrary to other
-frameworks, React decides when and where to redraw your UI based on changes to the underlying data set - and uses 
-a *virtual DOM* to handle the re-rendering. The key decisions to moving to React were simplicity, performance and 
-ease of testing. Check out [this page](https://facebook.github.io/react/docs/why-react.html) for a few more remarks.
-
-Flux is primarily a *pattern* for keeping your code organized over time. One of its key ideas is to have *one-way 
-communication* as shown in the [diagram here](https://github.com/facebook/flux). 
-
-Note that Fauxton has no dependency with the Flux code as it implements its own dispatcher and reduce stores. The information flows like this:
-
-1. User clicks on something in a React component, 
-2. the component fires an action (in an `actions.js` file),
-3. the action dispatches an event (for us, that's the `FauxtonAPI.dispatch()` call), 
-4. stores listen to these events (in their `dispatch()` methods), change the content of the store, then notify 
-anyone that's interested that the store has changed,
-5. finally, it comes full circle. React components listen for changes in the store by listening to their `change` 
-events. That's the purpose of the `storeName.on('change', this.onChange)` lines you'll see in the code.
-
-So why do all this. The benefit is that it standardizes how data moves around the application, and keeps things 
-simple - regardless of how much bigger the application gets. This is pretty cool.
-
-Here's a simple example: imagine if a user shrunk/expanded the main sidebar, and multiple components in the page 
-needed to know about it to make use of the new space. Maybe one was a graph and needed to redraw for the extra space, 
-and maybe another component could switch from "basic" to "advanced" view or something.
-
-With this pattern, you can just publish the single event, then each store could listen for it, change whatever data was needed 
-internally, then notify any components that was listening: and they would then have the choice to rerender or not, 
-based on what changed. This is basic "pub/sub": allowing you to keep code loosely coupled, but still communicate.
-
-### Moving to Redux
-
-There are a few drawbacks in the implementation above though. For instance the reduce stores rely on Backbone. 
-
-For this reason and others, it's encouraged that new components use Redux (https://github.com/reactjs/redux), which follows the same principles as Flux. Additionally, use React Redux (https://github.com/reactjs/react-redux) to easily connect a Redux store to your React components.
-
-## Addons
-
-Each bit of functionality is its own separate module or addon. Addons are located in their own `app/addons/myaddon-name` 
-folder. As noted above, new code is being written in React so please favour React components over backbone views.
-
-A good place to get started is to read through a couple of the existing addons. A good starting point is 
-[app/addons/verifyinstall](app/addons/verifyinstall). This is relatively self-contained and maps to a specific page in 
-the Fauxton interface so you can see exactly where it appears and what it does.
-
-Each module must have a `base.js` file, this is read and compiled when Fauxton is deployed. A `resources.js` file
-is usually used for your Backbone.Models and Backbone.Collections, `components.js` for your React components.
-The `routes.js` is used to register one or more URL paths for your addon along with what layout, data, breadcrumbs and API
-point is required for the view.
-
-Check out [writing_addons.md](writing_addons.md) for more information on writing your own addons.
-
-
-## CSS / Less
-
-We use Less for generating our CSS. The bulk of the shared CSS used throughout the application is found in 
-[assets/less/](assets/less), but any addon may contain its own `assets/less` subfolder containing whatever unique
-styles are needed.
-
-
-## app/addons/components / app/addons/fauxton
-  
-These two contain React components and functionality intended for sharing throughout the app. You'll find many 
-common elements in there, like trays, buttons, loading lines, clipboard functionality and more.
-
-
diff --git a/codemods/amd-to-es6-import.md b/codemods/amd-to-es6-import.md
deleted file mode 100644
index 5cb447e..0000000
--- a/codemods/amd-to-es6-import.md
+++ /dev/null
@@ -1,9 +0,0 @@
-#From `define` to `import`
-
-To run the ast to change a file from using amd to es6 import follow these steps:
-
-* npm i -g jscodeshift
-* npm install 5to6-codemod
-* Replace `./node_modules/5to6-codemod/transforms/amd.js` with https://gist.github.com/robertkowalski/9167d45c0af6b9abdd4b51a09ef4e039
-* run `jscodeshift --extensions=js,jsx -t node_modules/5to6-codemod/transforms/amd.js app/file/name`
-* run git diff to check
diff --git a/codemods/space-in-parens.sh b/codemods/space-in-parens.sh
deleted file mode 100755
index 3c99287..0000000
--- a/codemods/space-in-parens.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-./node_modules/.bin/eslint --ext=.jsx,.js --fix . space-in-parens: ["error", "never"]
diff --git a/couchapp.js b/couchapp.js
deleted file mode 100644
index 7aad7e1..0000000
--- a/couchapp.js
+++ /dev/null
@@ -1,39 +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 couchapp = require('couchapp'),
-    path = require('path'),
-    ddoc;
-
-ddoc = {
-  _id: '_design/fauxton',
-  rewrites: [
-    { "from": "_db",     "to"  : "../.." },
-    { "from": "_db/*",   "to"  : "../../*" },
-    { "from": "_ddoc",   "to"  : "" },
-    { "from": "_ddoc/*", "to"  : "*"},
-    {from: '/', to: 'index.html'},
-    {from: '/*', to: '*'}
-  ],
-  views: {},
-  shows: {},
-  lists: {},
-  validate_doc_update: function () {
-    /*if (newDoc._deleted === true && userCtx.roles.indexOf('_admin') === -1) {
-      throw "Only admin can delete documents on this database.";
-    }*/
-  }
-};
-
-
-couchapp.loadAttachments(ddoc, path.join(__dirname, 'dist', 'release'));
-module.exports = ddoc;
diff --git a/devserver.js b/devserver.js
deleted file mode 100644
index 3d858c0..0000000
--- a/devserver.js
+++ /dev/null
@@ -1,125 +0,0 @@
-const spawn = require('child_process').spawn;
-const fs = require("fs");
-const webpack = require('webpack');
-const WebpackDev = require('webpack-dev-server');
-const config = require('./webpack.config.dev.js');
-const httpProxy = require('http-proxy');
-const path = require('path');
-
-
-const loadSettings = function () {
-  let fileName = './settings.json.default.json';
-  if (fs.existsSync('./settings.json')) {
-    fileName = './settings.json';
-  }
-
-  return require(fileName).couchserver || {
-    port: process.env.FAUXTON_PORT || 8000,
-    contentSecurityPolicy: true,
-    proxy: {
-      target: process.env.COUCH_HOST || 'http://127.0.0.1:5984',
-      changeOrigin: false
-    }
-  };
-};
-
-const settings = loadSettings();
-
-const devSetup = function (cb) {
-  console.info('setup dev environment');
-  let cmd = 'devSetupWithClean';
-  if (settings.noClean) {
-    cmd = 'devSetup';
-  }
-  const isOnWindows = process.platform === 'win32';
-  const gruntCmd = isOnWindows ? 'grunt.cmd' : 'grunt';
-  const grunt = spawn(gruntCmd, [cmd]);
-
-  grunt.stdout.on('data', (data) => {
-    console.info(data.toString());
-  });
-
-  grunt.stderr.on('error', (data) => {
-    console.info('Setup error:', data.toString());
-  });
-
-  grunt.on('close', (code) => {
-    console.info('dev setup finished with code', code);
-    if (code === 0) {
-      cb();
-    }
-  });
-};
-
-const defaultHeaderValue = "default-src 'self'; child-src 'self' blob: https://blog.couchdb.org; img-src 'self' data:; font-src 'self'; " +
-                  "script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";
-function getCspHeaders () {
-  if (!settings.contentSecurityPolicy) {
-    return;
-  }
-
-  const cspHeader = settings.contentSecurityPolicyHeader || defaultHeaderValue;
-
-  return {
-    'Content-Security-Policy': cspHeader
-  };
-}
-
-const runWebpackServer = function () {
-  const proxy = httpProxy.createServer({
-    secure: false,
-    changeOrigin: true,
-    target: settings.proxy.target
-  });
-
-  proxy.on('proxyRes', function (proxyRes) {
-    if (proxyRes.headers['set-cookie']) {
-      proxyRes.headers['set-cookie'][0] = proxyRes.headers["set-cookie"][0].replace('Secure', '');
-    }
-  });
-
-  proxy.on('error', function () {
-    // don't explode on cancelled requests
-  });
-
-  const options = {
-    contentBase: path.join(__dirname, '/dist/debug/'),
-    host: 'localhost',
-    port: process.env.FAUXTON_PORT || 8000,
-    overlay: true,
-    hot: false,
-    historyApiFallback: false,
-    disableHostCheck: true,
-    stats: {
-      colors: true,
-    },
-    headers: getCspHeaders(),
-    before: (app) => {
-      app.all('*', (req, res, next) => {
-        const accept = req.headers.accept ? req.headers.accept.split(',') : '';
-
-        if (/application\/json/.test(accept[0]) || /multipart\/form-data/.test(accept[0])) {
-          proxy.web(req, res);
-          return;
-        }
-
-        next();
-      });
-    }
-  };
-
-  const compiler = webpack(config);
-  const server = new WebpackDev(compiler, options);
-
-  server.listen(options.port, '0.0.0.0', function (err) {
-    if (err) {
-      console.error(err);
-      return;
-    }
-    console.info('listening on', options.host, options.port);
-    console.info('Starting first compile. This will take about 10 seconds...');
-  });
-};
-
-
-devSetup(runWebpackServer);
diff --git a/docker/dc.selenium-debug.yml b/docker/dc.selenium-debug.yml
deleted file mode 100644
index cba3c54..0000000
--- a/docker/dc.selenium-debug.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-version: '2'
-services:
-  selenium:
-    extends:
-      file: './dc.selenium.yml'
-      service: selenium
-    container_name: selenium
-    image: selenium/standalone-chrome-debug:3.141.59
-    ports:
-      - "4444:4444"
-      - "5900:5900"
-  couchdb:
-    extends:
-      file: './dc.selenium.yml'
-      service: couchdb
diff --git a/docker/dc.selenium.yml b/docker/dc.selenium.yml
deleted file mode 100644
index 0061bed..0000000
--- a/docker/dc.selenium.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-version: '2'
-services:
-  selenium:
-    container_name: selenium
-    image: selenium/standalone-chrome:3.141.59
-    ports:
-      - "4444:4444"
-  couchdb:
-    container_name: couchdb
-    image: ${COUCHDB_IMAGE}
-    environment:
-      COUCHDB_USER: tester
-      COUCHDB_PASSWORD: testerpass
-    ports:
-      - "5984:5984"
diff --git a/extensions.md b/extensions.md
deleted file mode 100644
index d2e34f8..0000000
--- a/extensions.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Extensions
-
-Extensions allow Fauxton views to be have extra functionality.
-
-A module registers an extension by
-
-    FauxtonAPI.registerExtension('extensionName', myObjectToRegister);
-
-Any other module wanting to use that extension can then get 
-all objects registered for an extension by:
-
-    var extensions = FauxtonAPI.getExtensions('extensionName');
-    // extensions will always be an array
-
-The module can then use those extensions to extend its functionality.
diff --git a/i18n.json.default.json b/i18n.json.default.json
deleted file mode 100644
index 2c548b5..0000000
--- a/i18n.json.default.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "en_US": {
-    "mango-descripton": "Mango is an easy way to find documents on predefined indexes.",
-    "new-mango-index": "Mango Indexes",
-    "mango-help-title": "Mango",
-    "run-query-with-mango": "Run A Query with Mango",
-    "mango-title-editor": "Mango Query",
-    "mango-descripton-index-editor": "Mango is an easy way to find documents on predefined indexes. <br/><br/>Create an Index to query it afterwards. The example in the editor shows how to create an index for the field '_id'. <br/><br/>The Indexes that you already created are listed on the right.",
-    "mango-additional-indexes-heading": "Your additional Indexes:",
-    "mango-indexeditor-title": "Mango",
-    "couchdb-productname": "Apache CouchDB",
-    "cors-disable-cors-prompt": "Are you sure? Disabling CORS will overwrite your specific origin domains.",
-    "cors-notice": "Cross-Origin Resource Sharing (CORS) lets you connect to remote servers directly from the browser, so you can host browser-based apps on static pages and talk directly with CouchDB to load your data.",
-    "replication-password-modal-header": "Enter Account Password.",
-    "replication-password-modal-text": "Replication requires authentication on your credentials.",
-    "replication-user-password-auth-label": "Username and password",
-    "replication-username-input-placeholder": "Username",
-    "replication-password-input-placeholder": "Password",
-    "auth-missing-credentials": "Username or password cannot be blank.",
-    "auth-logged-in": "You have been logged in.",
-    "auth-admin-created": "CouchDB admin created",
-    "auth-change-password": "Your password has been updated.",
-    "auth-admin-creation-failed-prefix": "Could not create admin.",
-    "auth-passwords-not-matching": "Passwords do not match.",
-    "create-db-partitioned-help": "A partitioned database requires a partition key for every document, where the document _id format is '&lt;partition_key&gt;:&lt;doc_key&gt;'. A partition is a logical grouping of documents. Partition queries are often faster than global ones."
-  }
-}
diff --git a/index.js b/index.js
deleted file mode 100644
index ae40b4f..0000000
--- a/index.js
+++ /dev/null
@@ -1,108 +0,0 @@
-var path = require("path");
-var http = require("http");
-var httpProxy = require('http-proxy');
-var send = require('send');
-var urlLib = require('url');
-var _ = require('lodash');
-var dist_dir = process.env.DIST || __dirname + '/dist/release/';
-
-module.exports = function (options) {
-  // Options
-  var setContentSecurityPolicy = options.contentSecurityPolicy;
-  var port = options.port;
-  var proxyUrl = options.couchdb;
-
-  function sendFile (req, res, filePath) {
-    return send(req, filePath)
-      .on('error', function (err) {
-        if (err.status === 404) {
-          console.error('Could not locate', filePath);
-        } else {
-          console.error('ERROR', filePath, err);
-        }
-
-        res.setHeader("Content-Type", "text/javascript");
-        res.statusCode = 404;
-        res.end(JSON.stringify({error: err.message}));
-      })
-      .pipe(res);
-  }
-
-  var fileTypes = ['.js', '.css', '.png', '.swf', '.eot', '.woff', '.svg', '.ttf', '.swf'];
-
-  function isFile (url) {
-    return _.includes(fileTypes, path.extname(url));
-  }
-
-  // create proxy to couch for all couch requests
-  this.proxy = httpProxy.createServer({
-    secure: false,
-    changeOrigin: true,
-    target: proxyUrl
-  });
-
-  this.server = http.createServer((req, res) => {
-    var isDocLink = /_utils\/docs/.test(req.url);
-    var url = req.url.split(/\?v=|\?noCache/)[0].replace('_utils', '');
-    var accept = [];
-    if (req.headers.accept) {
-      accept = req.headers.accept.split(',');
-    }
-    if (setContentSecurityPolicy) {
-      var headerValue = "default-src 'self'; child-src 'self' data: blob:; img-src 'self' data:; font-src 'self'; " +
-                        "script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";
-      res.setHeader('Content-Security-Policy', headerValue);
-    }
-
-    if (url === '/' && accept[0] !== 'application/json') {
-      // serve main index file from here
-      return sendFile(req, res, path.join(dist_dir, 'index.html'));
-    } else if (isFile(url) && !isDocLink) {
-      return sendFile(req, res, path.join(dist_dir, url));
-    }
-
-    // This sets the Host header in the proxy so that one can use external
-    // CouchDB instances and not have the Host set to 'localhost'
-    var urlObj = urlLib.parse(req.url);
-    req.headers.host = urlObj.host;
-
-    this.proxy.web(req, res);
-  }).listen(port, '0.0.0.0');
-
-  this.proxy.on('error', () => {
-    // don't explode on cancelled requests
-  });
-
-  //Remove Secure on the cookie if the proxy is communicating to a CouchDB instance
-  // via https.
-  this.proxy.on('proxyRes', (proxyRes) => {
-    if (proxyRes.headers['set-cookie']) {
-      proxyRes.headers['set-cookie'][0] = proxyRes.headers["set-cookie"][0].replace('Secure', '');
-    }
-  });
-
-  var logo = [
-    [""],
-    [" ______                        _                   "],
-    ["|  ____|                      | |                  "],
-    ["| |__    __ _   _   _  __  __ | |_    ___    _ __  "],
-    ["|  __|  / _` | | | | | \\ \\/ / | __|  / _ \\  | '_ \\ "],
-    ["| |    | (_| | | |_| |  >  <  | |_  | (_) | | | | |"],
-    ["|_|     \\__,_|  \\__,_| /_/\\_\\  \\__|  \\___/  |_| |_|"],
-    [""]
-  ];
-
-  _.each(logo, function (line) {
-    // eslint-disable-next-line no-console
-    console.log(line.toString());
-  });
-  // eslint-disable-next-line no-console
-  console.log('Listening on ' + port);
-
-  this.close = () => {
-    this.server.close();
-    this.proxy.close();
-  };
-
-  return this;
-};
diff --git a/jest-config.json b/jest-config.json
deleted file mode 100644
index b133b1e..0000000
--- a/jest-config.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "roots": ["app"],
-  "testPathIgnorePatterns": ["/node_modules/", "stub", "fakeActiveTaskResponse", "fixtures"],
-
-  "setupFiles": ["./jest-shim.js"],
-  "setupFilesAfterEnv": ["./jest-setup.js"],
-
-  "moduleNameMapper": {
-    "underscore": "lodash",
-
-    "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|swf|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
-    "\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
-  },
-
-  "testURL": "http://localhost:8000"
-}
diff --git a/jest-setup.js b/jest-setup.js
deleted file mode 100644
index c7f01b0..0000000
--- a/jest-setup.js
+++ /dev/null
@@ -1,48 +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.
-
-require('jest');
-require('whatwg-fetch');
-require('mock-local-storage');
-
-Object.defineProperty(window, 'localStorage', {
-  value: global.localStorage,
-  configurable:true,
-  enumerable:true,
-  writable:true
-});
-
-window.$ = window.jQuery = require('jquery');
-window._ = require('lodash');
-window.Backbone = require('backbone');
-
-// URL.createObjectURL() and Worker are referenced by brace so we add mock objects to prevent
-// long warning messages from being printed while running the tests.
-if (!window.URL) {
-  window.URL = {};
-}
-if (!window.URL.createObjectURL) {
-  window.URL.createObjectURL = function() {
-    return 'http://localhost';
-  };
-}
-window.Worker = function FakeWorker() {
-  this.postMessage = function () { };
-  this.onmessage = undefined;
-};
-
-window.alert = () => {};
-
-// Setup enzyme's react adapter
-const Enzyme = require('enzyme');
-const EnzymeAdapter = require('enzyme-adapter-react-16');
-Enzyme.configure({ adapter: new EnzymeAdapter() });
diff --git a/jest-shim.js b/jest-shim.js
deleted file mode 100644
index cb42fc6..0000000
--- a/jest-shim.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// This file is imported by Jest to avoid a React Warning:
-//     Warning: React depends on requestAnimationFrame. Make sure that you load a
-//     polyfill in older browsers. http://fb.me/react-polyfills
-// See https://github.com/facebook/jest/issues/4545#issuecomment-332762365 for details
-
-global.requestAnimationFrame = (callback) => {
-  setTimeout(callback, 0);
-};
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 70a1c1a..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,19859 +0,0 @@
-{
-  "name": "fauxton",
-  "version": "1.2.6",
-  "lockfileVersion": 1,
-  "requires": true,
-  "dependencies": {
-    "@ant-design/css-animation": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/@ant-design/css-animation/-/css-animation-1.7.2.tgz",
-      "integrity": "sha512-bvVOe7A+r7lws58B7r+fgnQDK90cV45AXuvGx6i5CCSX1W/M3AJnHsNggDANBxEtWdNdFWcDd5LorB+RdSIlBw=="
-    },
-    "@babel/cli": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.10.4.tgz",
-      "integrity": "sha512-xX99K4V1BzGJdQANK5cwK+EpF1vP9gvqhn+iWvG+TubCjecplW7RSQimJ2jcCvu6fnK5pY6mZMdu6EWTj32QVA==",
-      "requires": {
-        "chokidar": "^2.1.8",
-        "commander": "^4.0.1",
-        "convert-source-map": "^1.1.0",
-        "fs-readdir-recursive": "^1.1.0",
-        "glob": "^7.0.0",
-        "lodash": "^4.17.13",
-        "make-dir": "^2.1.0",
-        "slash": "^2.0.0",
-        "source-map": "^0.5.0"
-      }
-    },
-    "@babel/code-frame": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
-      "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
-      "requires": {
-        "@babel/highlight": "^7.0.0"
-      }
-    },
-    "@babel/compat-data": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz",
-      "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==",
-      "requires": {
-        "browserslist": "^4.12.0",
-        "invariant": "^2.2.4",
-        "semver": "^5.5.0"
-      }
-    },
-    "@babel/core": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz",
-      "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==",
-      "requires": {
-        "@babel/code-frame": "^7.10.4",
-        "@babel/generator": "^7.10.4",
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helpers": "^7.10.4",
-        "@babel/parser": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.1",
-        "json5": "^2.1.2",
-        "lodash": "^4.17.13",
-        "resolve": "^1.3.2",
-        "semver": "^5.4.1",
-        "source-map": "^0.5.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "json5": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
-          "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/generator": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.0.tgz",
-      "integrity": "sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==",
-      "requires": {
-        "@babel/types": "^7.5.0",
-        "jsesc": "^2.5.1",
-        "lodash": "^4.17.11",
-        "source-map": "^0.5.0",
-        "trim-right": "^1.0.1"
-      }
-    },
-    "@babel/helper-annotate-as-pure": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
-      "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
-      "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
-      "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-builder-react-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz",
-      "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-builder-react-jsx-experimental": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.4.tgz",
-      "integrity": "sha512-LyacH/kgQPgLAuaWrvvq1+E7f5bLyT8jXCh7nM67sRsy2cpIGfgWJ+FCnAKQXfY+F0tXUaN6FqLkp4JiCzdK8Q==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-compilation-targets": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz",
-      "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==",
-      "requires": {
-        "@babel/compat-data": "^7.10.4",
-        "browserslist": "^4.12.0",
-        "invariant": "^2.2.4",
-        "levenary": "^1.1.1",
-        "semver": "^5.5.0"
-      }
-    },
-    "@babel/helper-create-class-features-plugin": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz",
-      "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-member-expression-to-functions": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz",
-      "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-regex": "^7.10.4",
-        "regexpu-core": "^4.7.0"
-      }
-    },
-    "@babel/helper-define-map": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz",
-      "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/types": "^7.10.4",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-explode-assignable-expression": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz",
-      "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==",
-      "requires": {
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helper-function-name": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
-      "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
-      "requires": {
-        "@babel/helper-get-function-arity": "^7.0.0",
-        "@babel/template": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@babel/helper-get-function-arity": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
-      "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@babel/helper-hoist-variables": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
-      "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-member-expression-to-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz",
-      "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-module-imports": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
-      "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-module-transforms": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz",
-      "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==",
-      "requires": {
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4",
-        "@babel/helper-simple-access": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/types": "^7.10.4",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-optimise-call-expression": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
-      "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-plugin-utils": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
-      "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
-    },
-    "@babel/helper-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz",
-      "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==",
-      "requires": {
-        "lodash": "^4.17.13"
-      }
-    },
-    "@babel/helper-remap-async-to-generator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz",
-      "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-wrap-function": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helper-replace-supers": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
-      "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
-      "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helper-simple-access": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
-      "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
-      "requires": {
-        "@babel/template": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-split-export-declaration": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
-      "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
-      "requires": {
-        "@babel/types": "^7.4.4"
-      }
-    },
-    "@babel/helper-validator-identifier": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
-      "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
-    },
-    "@babel/helper-wrap-function": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz",
-      "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helpers": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
-      "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
-      "requires": {
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/highlight": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
-      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
-      "requires": {
-        "chalk": "^2.0.0",
-        "esutils": "^2.0.2",
-        "js-tokens": "^4.0.0"
-      },
-      "dependencies": {
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/parser": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.0.tgz",
-      "integrity": "sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA=="
-    },
-    "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz",
-      "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-remap-async-to-generator": "^7.10.4",
-        "@babel/plugin-syntax-async-generators": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-class-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz",
-      "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==",
-      "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-dynamic-import": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz",
-      "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-json-strings": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz",
-      "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz",
-      "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz",
-      "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-transform-parameters": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz",
-      "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-optional-chaining": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz",
-      "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-private-methods": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz",
-      "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==",
-      "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
-      "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-class-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
-      "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz",
-      "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-top-level-await": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
-      "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-arrow-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
-      "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-async-to-generator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
-      "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
-      "requires": {
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-remap-async-to-generator": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
-      "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-block-scoping": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz",
-      "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-classes": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
-      "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-define-map": "^7.10.4",
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.10.4",
-        "globals": "^11.1.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/plugin-transform-computed-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz",
-      "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-destructuring": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz",
-      "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-dotall-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz",
-      "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz",
-      "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz",
-      "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==",
-      "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-for-of": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz",
-      "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-function-name": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz",
-      "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/plugin-transform-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
-      "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
-      "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-amd": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz",
-      "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==",
-      "requires": {
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
-      "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
-      "requires": {
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-simple-access": "^7.10.4",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz",
-      "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==",
-      "requires": {
-        "@babel/helper-hoist-variables": "^7.10.4",
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-umd": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
-      "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
-      "requires": {
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz",
-      "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4"
-      }
-    },
-    "@babel/plugin-transform-new-target": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz",
-      "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-object-assign": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.4.tgz",
-      "integrity": "sha512-6zccDhYEICfMeQqIjuY5G09/yhKzG30DKHJeYBQUHIsJH7c2jXSGvgwRalufLAXAq432OSlsEfAOLlzEsQzxVw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-object-super": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz",
-      "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-parameters": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz",
-      "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==",
-      "requires": {
-        "@babel/helper-get-function-arity": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/plugin-transform-property-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz",
-      "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-display-name": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz",
-      "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz",
-      "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==",
-      "requires": {
-        "@babel/helper-builder-react-jsx": "^7.10.4",
-        "@babel/helper-builder-react-jsx-experimental": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx-development": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz",
-      "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==",
-      "requires": {
-        "@babel/helper-builder-react-jsx-experimental": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx-self": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz",
-      "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx-source": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.4.tgz",
-      "integrity": "sha512-FTK3eQFrPv2aveerUSazFmGygqIdTtvskG50SnGnbEUnRPcGx2ylBhdFIzoVS1ty44hEgcPoCAyw5r3VDEq+Ug==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz",
-      "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-regenerator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz",
-      "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==",
-      "requires": {
-        "regenerator-transform": "^0.14.2"
-      }
-    },
-    "@babel/plugin-transform-reserved-words": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz",
-      "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz",
-      "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-spread": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz",
-      "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-sticky-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz",
-      "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-regex": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-template-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz",
-      "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz",
-      "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-unicode-escapes": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz",
-      "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-unicode-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz",
-      "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/preset-env": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz",
-      "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==",
-      "requires": {
-        "@babel/compat-data": "^7.10.4",
-        "@babel/helper-compilation-targets": "^7.10.4",
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-proposal-async-generator-functions": "^7.10.4",
-        "@babel/plugin-proposal-class-properties": "^7.10.4",
-        "@babel/plugin-proposal-dynamic-import": "^7.10.4",
-        "@babel/plugin-proposal-json-strings": "^7.10.4",
-        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4",
-        "@babel/plugin-proposal-numeric-separator": "^7.10.4",
-        "@babel/plugin-proposal-object-rest-spread": "^7.10.4",
-        "@babel/plugin-proposal-optional-catch-binding": "^7.10.4",
-        "@babel/plugin-proposal-optional-chaining": "^7.10.4",
-        "@babel/plugin-proposal-private-methods": "^7.10.4",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.10.4",
-        "@babel/plugin-syntax-async-generators": "^7.8.0",
-        "@babel/plugin-syntax-class-properties": "^7.10.4",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.0",
-        "@babel/plugin-syntax-json-strings": "^7.8.0",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.0",
-        "@babel/plugin-syntax-top-level-await": "^7.10.4",
-        "@babel/plugin-transform-arrow-functions": "^7.10.4",
-        "@babel/plugin-transform-async-to-generator": "^7.10.4",
-        "@babel/plugin-transform-block-scoped-functions": "^7.10.4",
-        "@babel/plugin-transform-block-scoping": "^7.10.4",
-        "@babel/plugin-transform-classes": "^7.10.4",
-        "@babel/plugin-transform-computed-properties": "^7.10.4",
-        "@babel/plugin-transform-destructuring": "^7.10.4",
-        "@babel/plugin-transform-dotall-regex": "^7.10.4",
-        "@babel/plugin-transform-duplicate-keys": "^7.10.4",
-        "@babel/plugin-transform-exponentiation-operator": "^7.10.4",
-        "@babel/plugin-transform-for-of": "^7.10.4",
-        "@babel/plugin-transform-function-name": "^7.10.4",
-        "@babel/plugin-transform-literals": "^7.10.4",
-        "@babel/plugin-transform-member-expression-literals": "^7.10.4",
-        "@babel/plugin-transform-modules-amd": "^7.10.4",
-        "@babel/plugin-transform-modules-commonjs": "^7.10.4",
-        "@babel/plugin-transform-modules-systemjs": "^7.10.4",
-        "@babel/plugin-transform-modules-umd": "^7.10.4",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4",
-        "@babel/plugin-transform-new-target": "^7.10.4",
-        "@babel/plugin-transform-object-super": "^7.10.4",
-        "@babel/plugin-transform-parameters": "^7.10.4",
-        "@babel/plugin-transform-property-literals": "^7.10.4",
-        "@babel/plugin-transform-regenerator": "^7.10.4",
-        "@babel/plugin-transform-reserved-words": "^7.10.4",
-        "@babel/plugin-transform-shorthand-properties": "^7.10.4",
-        "@babel/plugin-transform-spread": "^7.10.4",
-        "@babel/plugin-transform-sticky-regex": "^7.10.4",
-        "@babel/plugin-transform-template-literals": "^7.10.4",
-        "@babel/plugin-transform-typeof-symbol": "^7.10.4",
-        "@babel/plugin-transform-unicode-escapes": "^7.10.4",
-        "@babel/plugin-transform-unicode-regex": "^7.10.4",
-        "@babel/preset-modules": "^0.1.3",
-        "@babel/types": "^7.10.4",
-        "browserslist": "^4.12.0",
-        "core-js-compat": "^3.6.2",
-        "invariant": "^2.2.2",
-        "levenary": "^1.1.1",
-        "semver": "^5.5.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/preset-modules": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz",
-      "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
-        "@babel/plugin-transform-dotall-regex": "^7.4.4",
-        "@babel/types": "^7.4.4",
-        "esutils": "^2.0.2"
-      }
-    },
-    "@babel/preset-react": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz",
-      "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-transform-react-display-name": "^7.10.4",
-        "@babel/plugin-transform-react-jsx": "^7.10.4",
-        "@babel/plugin-transform-react-jsx-development": "^7.10.4",
-        "@babel/plugin-transform-react-jsx-self": "^7.10.4",
-        "@babel/plugin-transform-react-jsx-source": "^7.10.4",
-        "@babel/plugin-transform-react-pure-annotations": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/register": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.4.tgz",
-      "integrity": "sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g==",
-      "requires": {
-        "find-cache-dir": "^2.0.0",
-        "lodash": "^4.17.13",
-        "make-dir": "^2.1.0",
-        "pirates": "^4.0.0",
-        "source-map-support": "^0.5.16"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "source-map-support": {
-          "version": "0.5.19",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-          "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-          "requires": {
-            "buffer-from": "^1.0.0",
-            "source-map": "^0.6.0"
-          }
-        }
-      }
-    },
-    "@babel/runtime": {
-      "version": "7.9.2",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
-      "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
-      "requires": {
-        "regenerator-runtime": "^0.13.4"
-      },
-      "dependencies": {
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "@babel/template": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
-      "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.4.4",
-        "@babel/types": "^7.4.4"
-      }
-    },
-    "@babel/traverse": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.0.tgz",
-      "integrity": "sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.5.0",
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/helper-split-export-declaration": "^7.4.4",
-        "@babel/parser": "^7.5.0",
-        "@babel/types": "^7.5.0",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0",
-        "lodash": "^4.17.11"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/types": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz",
-      "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==",
-      "requires": {
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.11",
-        "to-fast-properties": "^2.0.0"
-      }
-    },
-    "@cnakazawa/watch": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
-      "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
-      "dev": true,
-      "requires": {
-        "exec-sh": "^0.3.2",
-        "minimist": "^1.2.0"
-      }
-    },
-    "@jest/console": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
-      "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
-      "dev": true,
-      "requires": {
-        "@jest/source-map": "^24.9.0",
-        "chalk": "^2.0.1",
-        "slash": "^2.0.0"
-      }
-    },
-    "@jest/core": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz",
-      "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.7.1",
-        "@jest/reporters": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "ansi-escapes": "^3.0.0",
-        "chalk": "^2.0.1",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.1.15",
-        "jest-changed-files": "^24.9.0",
-        "jest-config": "^24.9.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-resolve": "^24.9.0",
-        "jest-resolve-dependencies": "^24.9.0",
-        "jest-runner": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-snapshot": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-validate": "^24.9.0",
-        "jest-watcher": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "p-each-series": "^1.0.0",
-        "realpath-native": "^1.1.0",
-        "rimraf": "^2.5.4",
-        "slash": "^2.0.0",
-        "strip-ansi": "^5.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "@jest/environment": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
-      "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
-      "dev": true,
-      "requires": {
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0"
-      }
-    },
-    "@jest/fake-timers": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
-      "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-mock": "^24.9.0"
-      }
-    },
-    "@jest/reporters": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz",
-      "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "exit": "^0.1.2",
-        "glob": "^7.1.2",
-        "istanbul-lib-coverage": "^2.0.2",
-        "istanbul-lib-instrument": "^3.0.1",
-        "istanbul-lib-report": "^2.0.4",
-        "istanbul-lib-source-maps": "^3.0.1",
-        "istanbul-reports": "^2.2.6",
-        "jest-haste-map": "^24.9.0",
-        "jest-resolve": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.6.0",
-        "node-notifier": "^5.4.2",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.0",
-        "string-length": "^2.0.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "@jest/source-map": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
-      "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
-      "dev": true,
-      "requires": {
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.1.15",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "@jest/test-result": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
-      "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/istanbul-lib-coverage": "^2.0.0"
-      }
-    },
-    "@jest/test-sequencer": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz",
-      "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^24.9.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-runner": "^24.9.0",
-        "jest-runtime": "^24.9.0"
-      }
-    },
-    "@jest/transform": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
-      "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.1.0",
-        "@jest/types": "^24.9.0",
-        "babel-plugin-istanbul": "^5.1.0",
-        "chalk": "^2.0.1",
-        "convert-source-map": "^1.4.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graceful-fs": "^4.1.15",
-        "jest-haste-map": "^24.9.0",
-        "jest-regex-util": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "pirates": "^4.0.1",
-        "realpath-native": "^1.1.0",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.1",
-        "write-file-atomic": "2.4.1"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "write-file-atomic": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
-          "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.11",
-            "imurmurhash": "^0.1.4",
-            "signal-exit": "^3.0.2"
-          }
-        }
-      }
-    },
-    "@jest/types": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
-      "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^1.1.1",
-        "@types/yargs": "^13.0.0"
-      }
-    },
-    "@sinonjs/commons": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.0.tgz",
-      "integrity": "sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==",
-      "dev": true,
-      "requires": {
-        "type-detect": "4.0.8"
-      },
-      "dependencies": {
-        "type-detect": {
-          "version": "4.0.8",
-          "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-          "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-          "dev": true
-        }
-      }
-    },
-    "@sinonjs/formatio": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
-      "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1",
-        "@sinonjs/samsam": "^3.1.0"
-      }
-    },
-    "@sinonjs/samsam": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
-      "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1.3.0",
-        "array-from": "^2.1.1",
-        "lodash": "^4.17.15"
-      }
-    },
-    "@sinonjs/text-encoding": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
-      "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
-      "dev": true
-    },
-    "@types/babel__core": {
-      "version": "7.1.7",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
-      "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0",
-        "@types/babel__generator": "*",
-        "@types/babel__template": "*",
-        "@types/babel__traverse": "*"
-      }
-    },
-    "@types/babel__generator": {
-      "version": "7.6.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz",
-      "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@types/babel__template": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
-      "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@types/babel__traverse": {
-      "version": "7.0.10",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.10.tgz",
-      "integrity": "sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.3.0"
-      }
-    },
-    "@types/caseless": {
-      "version": "0.12.1",
-      "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz",
-      "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A=="
-    },
-    "@types/color-name": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
-      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
-    },
-    "@types/form-data": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz",
-      "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==",
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "@types/glob": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
-      "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
-      "requires": {
-        "@types/minimatch": "*",
-        "@types/node": "*"
-      }
-    },
-    "@types/istanbul-lib-coverage": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
-      "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
-      "dev": true
-    },
-    "@types/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*"
-      }
-    },
-    "@types/istanbul-reports": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
-      "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*",
-        "@types/istanbul-lib-report": "*"
-      }
-    },
-    "@types/json-schema": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
-      "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ=="
-    },
-    "@types/minimatch": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
-      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
-    },
-    "@types/node": {
-      "version": "8.5.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.2.tgz",
-      "integrity": "sha512-KA4GKOpgXnrqEH2eCVhiv2CsxgXGQJgV1X0vsGlh+WCnxbeAE1GT44ZsTU1IN5dEeV/gDupKa7gWo08V5IxWVQ=="
-    },
-    "@types/request": {
-      "version": "2.47.1",
-      "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz",
-      "integrity": "sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==",
-      "requires": {
-        "@types/caseless": "*",
-        "@types/form-data": "*",
-        "@types/node": "*",
-        "@types/tough-cookie": "*"
-      }
-    },
-    "@types/stack-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
-      "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
-      "dev": true
-    },
-    "@types/tough-cookie": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz",
-      "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ=="
-    },
-    "@types/yargs": {
-      "version": "13.0.8",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz",
-      "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==",
-      "dev": true,
-      "requires": {
-        "@types/yargs-parser": "*"
-      }
-    },
-    "@types/yargs-parser": {
-      "version": "15.0.0",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
-      "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
-      "dev": true
-    },
-    "@webassemblyjs/ast": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
-      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
-      "requires": {
-        "@webassemblyjs/helper-module-context": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/wast-parser": "1.9.0"
-      }
-    },
-    "@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
-      "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
-    },
-    "@webassemblyjs/helper-api-error": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
-      "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
-    },
-    "@webassemblyjs/helper-buffer": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
-      "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
-    },
-    "@webassemblyjs/helper-code-frame": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
-      "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
-      "requires": {
-        "@webassemblyjs/wast-printer": "1.9.0"
-      }
-    },
-    "@webassemblyjs/helper-fsm": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
-      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
-    },
-    "@webassemblyjs/helper-module-context": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
-      "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0"
-      }
-    },
-    "@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
-      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
-    },
-    "@webassemblyjs/helper-wasm-section": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
-      "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-buffer": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/wasm-gen": "1.9.0"
-      }
-    },
-    "@webassemblyjs/ieee754": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
-      "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
-      "requires": {
-        "@xtuc/ieee754": "^1.2.0"
-      }
-    },
-    "@webassemblyjs/leb128": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
-      "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
-      "requires": {
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "@webassemblyjs/utf8": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
-      "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
-    },
-    "@webassemblyjs/wasm-edit": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
-      "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-buffer": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/helper-wasm-section": "1.9.0",
-        "@webassemblyjs/wasm-gen": "1.9.0",
-        "@webassemblyjs/wasm-opt": "1.9.0",
-        "@webassemblyjs/wasm-parser": "1.9.0",
-        "@webassemblyjs/wast-printer": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wasm-gen": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
-      "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/ieee754": "1.9.0",
-        "@webassemblyjs/leb128": "1.9.0",
-        "@webassemblyjs/utf8": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wasm-opt": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
-      "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-buffer": "1.9.0",
-        "@webassemblyjs/wasm-gen": "1.9.0",
-        "@webassemblyjs/wasm-parser": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wasm-parser": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
-      "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-api-error": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/ieee754": "1.9.0",
-        "@webassemblyjs/leb128": "1.9.0",
-        "@webassemblyjs/utf8": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wast-parser": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
-      "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
-        "@webassemblyjs/helper-api-error": "1.9.0",
-        "@webassemblyjs/helper-code-frame": "1.9.0",
-        "@webassemblyjs/helper-fsm": "1.9.0",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "@webassemblyjs/wast-printer": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
-      "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/wast-parser": "1.9.0",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "@webcomponents/url": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/@webcomponents/url/-/url-0.7.5.tgz",
-      "integrity": "sha512-nDXRch3jsyaHCDWx3Gzl9w4aH7uqSkrOJZYnO7xWVsa8L38O/536t42gGDSEKSCGytYJHO/g22CDFCD2kM0w+Q=="
-    },
-    "@xtuc/ieee754": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
-    },
-    "@xtuc/long": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
-    },
-    "abab": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
-      "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
-      "dev": true
-    },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
-    },
-    "abort-controller": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
-      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
-      "requires": {
-        "event-target-shim": "^5.0.0"
-      }
-    },
-    "accepts": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
-      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
-      "requires": {
-        "mime-types": "~2.1.24",
-        "negotiator": "0.6.2"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        },
-        "mime-types": {
-          "version": "2.1.27",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-          "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-          "requires": {
-            "mime-db": "1.44.0"
-          }
-        }
-      }
-    },
-    "acorn": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
-      "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
-    },
-    "acorn-globals": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
-      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
-      "dev": true,
-      "requires": {
-        "acorn": "^6.0.1",
-        "acorn-walk": "^6.0.1"
-      }
-    },
-    "acorn-jsx": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
-      "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ=="
-    },
-    "acorn-walk": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
-      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
-      "dev": true
-    },
-    "agent-base": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
-      "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
-      "dev": true,
-      "requires": {
-        "es6-promisify": "^5.0.0"
-      }
-    },
-    "airbnb-prop-types": {
-      "version": "2.16.0",
-      "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz",
-      "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==",
-      "dev": true,
-      "requires": {
-        "array.prototype.find": "^2.1.1",
-        "function.prototype.name": "^1.1.2",
-        "is-regex": "^1.1.0",
-        "object-is": "^1.1.2",
-        "object.assign": "^4.1.0",
-        "object.entries": "^1.1.2",
-        "prop-types": "^15.7.2",
-        "prop-types-exact": "^1.2.0",
-        "react-is": "^16.13.1"
-      },
-      "dependencies": {
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        }
-      }
-    },
-    "ajv": {
-      "version": "6.12.3",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
-      "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
-      "requires": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "ajv-errors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
-      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
-    },
-    "ajv-keywords": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
-      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
-    },
-    "ansi-colors": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
-      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw=="
-    },
-    "ansi-escapes": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
-      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
-      "dev": true
-    },
-    "ansi-html": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
-      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
-    },
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-    },
-    "ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "requires": {
-        "color-convert": "^1.9.0"
-      }
-    },
-    "anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-      "requires": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      }
-    },
-    "aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
-    },
-    "argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-      "requires": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "argsarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",
-      "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs="
-    },
-    "arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
-    },
-    "arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
-    },
-    "arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
-    },
-    "array-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
-      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
-    },
-    "array-equal": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-      "dev": true
-    },
-    "array-filter": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
-      "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
-      "dev": true
-    },
-    "array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
-    },
-    "array-from": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
-      "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
-      "dev": true
-    },
-    "array-includes": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
-      "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "is-string": "^1.0.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "array-slice": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
-      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
-    },
-    "array-union": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-      "requires": {
-        "array-uniq": "^1.0.1"
-      }
-    },
-    "array-uniq": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
-    },
-    "array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
-    },
-    "array.prototype.find": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz",
-      "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.4"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "array.prototype.flat": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
-      "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "array.prototype.flatmap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz",
-      "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "asap": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
-      "optional": true
-    },
-    "asn1": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
-    },
-    "asn1.js": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
-      "requires": {
-        "bn.js": "^4.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "assert": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
-      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
-      "requires": {
-        "object-assign": "^4.1.1",
-        "util": "0.10.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
-        },
-        "util": {
-          "version": "0.10.3",
-          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
-          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-          "requires": {
-            "inherits": "2.0.1"
-          }
-        }
-      }
-    },
-    "assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-    },
-    "assertion-error": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
-      "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
-      "dev": true
-    },
-    "assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
-    },
-    "ast-types": {
-      "version": "0.13.3",
-      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz",
-      "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==",
-      "dev": true
-    },
-    "astral-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
-    },
-    "async": {
-      "version": "0.2.10",
-      "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
-      "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
-    },
-    "async-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
-      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
-    },
-    "async-limiter": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
-      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
-    },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-    },
-    "atob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
-      "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio="
-    },
-    "aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
-    },
-    "aws4": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
-      "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
-    },
-    "babel-eslint": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz",
-      "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "^1.0.0"
-      }
-    },
-    "babel-jest": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
-      "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==",
-      "dev": true,
-      "requires": {
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/babel__core": "^7.1.0",
-        "babel-plugin-istanbul": "^5.1.0",
-        "babel-preset-jest": "^24.9.0",
-        "chalk": "^2.4.2",
-        "slash": "^2.0.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        }
-      }
-    },
-    "babel-loader": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
-      "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
-      "requires": {
-        "find-cache-dir": "^2.1.0",
-        "loader-utils": "^1.4.0",
-        "mkdirp": "^0.5.3",
-        "pify": "^4.0.1",
-        "schema-utils": "^2.6.5"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-          "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "fast-deep-equal": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        },
-        "schema-utils": {
-          "version": "2.6.6",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-          "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
-          "requires": {
-            "ajv": "^6.12.0",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
-      }
-    },
-    "babel-plugin-array-includes": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-array-includes/-/babel-plugin-array-includes-2.0.3.tgz",
-      "integrity": "sha1-z1RS6Bx7gD+3lZ8QRayI4uwo/3Y="
-    },
-    "babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "requires": {
-        "object.assign": "^4.1.0"
-      }
-    },
-    "babel-plugin-istanbul": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
-      "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "find-up": "^3.0.0",
-        "istanbul-lib-instrument": "^3.3.0",
-        "test-exclude": "^5.2.3"
-      }
-    },
-    "babel-plugin-jest-hoist": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
-      "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
-      "dev": true,
-      "requires": {
-        "@types/babel__traverse": "^7.0.6"
-      }
-    },
-    "babel-preset-jest": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
-      "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
-      "dev": true,
-      "requires": {
-        "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
-        "babel-plugin-jest-hoist": "^24.9.0"
-      }
-    },
-    "babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "dev": true,
-      "requires": {
-        "core-js": "^2.4.0",
-        "regenerator-runtime": "^0.11.0"
-      }
-    },
-    "backbone": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz",
-      "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==",
-      "requires": {
-        "underscore": ">=1.8.3"
-      },
-      "dependencies": {
-        "underscore": {
-          "version": "1.10.2",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
-          "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
-        }
-      }
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
-    },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-      "requires": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
-        }
-      }
-    },
-    "base-64": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
-      "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
-    },
-    "base64-js": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
-    },
-    "batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
-    },
-    "bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-      "optional": true,
-      "requires": {
-        "tweetnacl": "^0.14.3"
-      }
-    },
-    "big.js": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-      "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
-    },
-    "binary-extensions": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
-      "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
-    },
-    "bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
-    },
-    "bn.js": {
-      "version": "4.11.8",
-      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
-    },
-    "body-parser": {
-      "version": "1.19.0",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
-      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
-      "requires": {
-        "bytes": "3.1.0",
-        "content-type": "~1.0.4",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "on-finished": "~2.3.0",
-        "qs": "6.7.0",
-        "raw-body": "2.4.0",
-        "type-is": "~1.6.17"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "http-errors": {
-          "version": "1.7.2",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-          "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "qs": {
-          "version": "6.7.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "bonjour": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
-      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
-      "requires": {
-        "array-flatten": "^2.1.0",
-        "deep-equal": "^1.0.1",
-        "dns-equal": "^1.0.0",
-        "dns-txt": "^2.0.2",
-        "multicast-dns": "^6.0.1",
-        "multicast-dns-service-types": "^1.1.0"
-      },
-      "dependencies": {
-        "array-flatten": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
-          "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
-        }
-      }
-    },
-    "boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
-    },
-    "bootstrap": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
-      "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==",
-      "dev": true
-    },
-    "brace": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz",
-      "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg="
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-      "requires": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "brorand": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
-    },
-    "browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-      "dev": true
-    },
-    "browser-request": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz",
-      "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc="
-    },
-    "browser-resolve": {
-      "version": "1.11.3",
-      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
-      "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
-      "dev": true,
-      "requires": {
-        "resolve": "1.1.7"
-      },
-      "dependencies": {
-        "resolve": {
-          "version": "1.1.7",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
-          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
-          "dev": true
-        }
-      }
-    },
-    "browser-stdout": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
-      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
-      "dev": true,
-      "optional": true
-    },
-    "browserify-aes": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
-      "requires": {
-        "buffer-xor": "^1.0.3",
-        "cipher-base": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.3",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "browserify-cipher": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
-      "requires": {
-        "browserify-aes": "^1.0.4",
-        "browserify-des": "^1.0.0",
-        "evp_bytestokey": "^1.0.0"
-      }
-    },
-    "browserify-des": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "des.js": "^1.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        }
-      }
-    },
-    "browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "randombytes": "^2.0.1"
-      }
-    },
-    "browserify-sign": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
-      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
-      "requires": {
-        "bn.js": "^4.1.1",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.2",
-        "elliptic": "^6.0.0",
-        "inherits": "^2.0.1",
-        "parse-asn1": "^5.0.0"
-      }
-    },
-    "browserify-zlib": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
-      "requires": {
-        "pako": "~1.0.5"
-      }
-    },
-    "browserslist": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz",
-      "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==",
-      "requires": {
-        "caniuse-lite": "^1.0.30001093",
-        "electron-to-chromium": "^1.3.488",
-        "escalade": "^3.0.1",
-        "node-releases": "^1.1.58"
-      }
-    },
-    "bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
-      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
-      "dev": true,
-      "requires": {
-        "node-int64": "^0.4.0"
-      }
-    },
-    "buffer": {
-      "version": "4.9.2",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
-      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
-      "requires": {
-        "base64-js": "^1.0.2",
-        "ieee754": "^1.1.4",
-        "isarray": "^1.0.0"
-      }
-    },
-    "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
-    },
-    "buffer-indexof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
-      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="
-    },
-    "buffer-xor": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
-    },
-    "builtin-modules": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
-      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
-      "dev": true
-    },
-    "builtin-status-codes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
-    },
-    "bytes": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-      "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
-    },
-    "cacache": {
-      "version": "12.0.4",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
-      "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
-      "requires": {
-        "bluebird": "^3.5.5",
-        "chownr": "^1.1.1",
-        "figgy-pudding": "^3.5.1",
-        "glob": "^7.1.4",
-        "graceful-fs": "^4.1.15",
-        "infer-owner": "^1.0.3",
-        "lru-cache": "^5.1.1",
-        "mississippi": "^3.0.0",
-        "mkdirp": "^0.5.1",
-        "move-concurrently": "^1.0.1",
-        "promise-inflight": "^1.0.1",
-        "rimraf": "^2.6.3",
-        "ssri": "^6.0.1",
-        "unique-filename": "^1.1.1",
-        "y18n": "^4.0.0"
-      },
-      "dependencies": {
-        "bluebird": {
-          "version": "3.7.2",
-          "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-          "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-      "requires": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
-      }
-    },
-    "callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
-    },
-    "camel-case": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
-      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
-      "requires": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.1.1"
-      }
-    },
-    "camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001096",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz",
-      "integrity": "sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w=="
-    },
-    "capture-exit": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
-      "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
-      "dev": true,
-      "requires": {
-        "rsvp": "^4.8.4"
-      }
-    },
-    "caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
-    },
-    "chai-nightwatch": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz",
-      "integrity": "sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw==",
-      "dev": true,
-      "requires": {
-        "assertion-error": "1.0.0",
-        "deep-eql": "0.1.3"
-      },
-      "dependencies": {
-        "assertion-error": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz",
-          "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=",
-          "dev": true
-        }
-      }
-    },
-    "chalk": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-      "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      }
-    },
-    "chardet": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
-    },
-    "cheerio": {
-      "version": "1.0.0-rc.3",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
-      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
-      "dev": true,
-      "requires": {
-        "css-select": "~1.2.0",
-        "dom-serializer": "~0.1.1",
-        "entities": "~1.1.1",
-        "htmlparser2": "^3.9.1",
-        "lodash": "^4.15.0",
-        "parse5": "^3.0.1"
-      },
-      "dependencies": {
-        "dom-serializer": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
-          "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^1.3.0",
-            "entities": "^1.1.1"
-          }
-        },
-        "domelementtype": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-          "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-          "dev": true
-        }
-      }
-    },
-    "chokidar": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
-      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-      "requires": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "fsevents": "^1.2.7",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
-      },
-      "dependencies": {
-        "normalize-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-        }
-      }
-    },
-    "chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
-      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
-    },
-    "chrome-trace-event": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
-      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
-      "requires": {
-        "tslib": "^1.9.0"
-      }
-    },
-    "ci-info": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-      "dev": true
-    },
-    "cipher-base": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-      "requires": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "classnames": {
-      "version": "2.2.6",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-    },
-    "clean-css": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
-      "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
-      "requires": {
-        "source-map": "~0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "requires": {
-        "restore-cursor": "^3.1.0"
-      }
-    },
-    "cli-spinners": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz",
-      "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==",
-      "dev": true
-    },
-    "cli-width": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
-      "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
-    },
-    "clipboard": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
-      "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
-      "requires": {
-        "good-listener": "^1.2.2",
-        "select": "^1.1.2",
-        "tiny-emitter": "^2.0.0"
-      },
-      "dependencies": {
-        "delegate": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
-          "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
-        },
-        "good-listener": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
-          "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-          "requires": {
-            "delegate": "^3.1.2"
-          }
-        },
-        "select": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
-          "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
-        },
-        "tiny-emitter": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
-          "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow=="
-        }
-      }
-    },
-    "cliui": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-      "requires": {
-        "string-width": "^3.1.0",
-        "strip-ansi": "^5.2.0",
-        "wrap-ansi": "^5.1.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-          "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-          "requires": {
-            "ansi-styles": "^3.2.0",
-            "string-width": "^3.0.0",
-            "strip-ansi": "^5.0.0"
-          }
-        }
-      }
-    },
-    "clone": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
-    },
-    "clone-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
-      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
-    },
-    "cloudant-follow": {
-      "version": "0.17.0",
-      "resolved": "https://registry.npmjs.org/cloudant-follow/-/cloudant-follow-0.17.0.tgz",
-      "integrity": "sha512-JQ1xvKAHh8rsnSVBjATLCjz/vQw1sWBGadxr2H69yFMwD7hShUGDwwEefdypaxroUJ/w6t1cSwilp/hRUxEW8w==",
-      "requires": {
-        "browser-request": "~0.3.0",
-        "debug": "^3.0.0",
-        "request": "^2.83.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
-    "coffee-script": {
-      "version": "1.12.7",
-      "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
-      "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw=="
-    },
-    "collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-      "requires": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
-      }
-    },
-    "color-convert": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
-      "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
-      "requires": {
-        "color-name": "^1.1.1"
-      }
-    },
-    "color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-    },
-    "colors": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
-      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
-    },
-    "combined-stream": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
-      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
-      "requires": {
-        "delayed-stream": "~1.0.0"
-      }
-    },
-    "commander": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
-    },
-    "commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
-    },
-    "component-emitter": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
-    },
-    "compressible": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
-      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
-      "requires": {
-        "mime-db": ">= 1.43.0 < 2"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        }
-      }
-    },
-    "compression": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
-      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
-      "requires": {
-        "accepts": "~1.3.5",
-        "bytes": "3.0.0",
-        "compressible": "~2.0.16",
-        "debug": "2.6.9",
-        "on-headers": "~1.0.2",
-        "safe-buffer": "5.1.2",
-        "vary": "~1.1.2"
-      },
-      "dependencies": {
-        "bytes": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-          "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-    },
-    "concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
-      }
-    },
-    "connect": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz",
-      "integrity": "sha512-B+WTJ0bDgjQugnbNF7fWGvwEgTj9Isdk3Y7yTZlgCuVe+hpl/do8frEMeimx7sRMPW3oZA+EsC9uDZL8MaaAwQ==",
-      "requires": {
-        "debug": "2.6.9",
-        "finalhandler": "1.0.6",
-        "parseurl": "~1.3.2",
-        "utils-merge": "1.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
-    },
-    "console-browserify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
-      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
-    },
-    "constants-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
-    },
-    "content-disposition": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
-      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
-      "requires": {
-        "safe-buffer": "5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
-    "content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
-    },
-    "convert-source-map": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
-      "requires": {
-        "safe-buffer": "~5.1.1"
-      }
-    },
-    "cookie": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
-      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
-    },
-    "cookie-signature": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
-    },
-    "copy-concurrently": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
-      "requires": {
-        "aproba": "^1.1.1",
-        "fs-write-stream-atomic": "^1.0.8",
-        "iferr": "^0.1.5",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.0"
-      }
-    },
-    "copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
-    },
-    "core-js": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
-      "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
-    },
-    "core-js-compat": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
-      "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
-      "requires": {
-        "browserslist": "^4.8.5",
-        "semver": "7.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-          "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
-        }
-      }
-    },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-    },
-    "couchapp": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/couchapp/-/couchapp-0.11.0.tgz",
-      "integrity": "sha1-8J3DFdYQ9vbnn9DK9eXWJLDMeD4=",
-      "requires": {
-        "coffee-script": "*",
-        "connect": "*",
-        "http-proxy": "0.8.7",
-        "nano": "*",
-        "request": "*",
-        "url": "*",
-        "watch": "~0.8.0"
-      },
-      "dependencies": {
-        "colors": {
-          "version": "0.6.2",
-          "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
-          "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
-        },
-        "http-proxy": {
-          "version": "0.8.7",
-          "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-0.8.7.tgz",
-          "integrity": "sha1-p7xThhgJLNJu0ZHkYlkzuu9t6A4=",
-          "requires": {
-            "colors": "0.x.x",
-            "optimist": "0.3.x",
-            "pkginfo": "0.2.x"
-          }
-        },
-        "nano": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/nano/-/nano-7.0.0.tgz",
-          "integrity": "sha512-zR1jRRfpG/lcFjYnGGxabABLFRtFX1E7YqWIJzvC0dLRJ9NTxodJC4MzVifhriMT9yhulsOf8k2UNOX8fMULAg==",
-          "requires": {
-            "@types/request": "^2.47.1",
-            "cloudant-follow": "~0.17.0",
-            "debug": "^2.2.0",
-            "errs": "^0.3.2",
-            "lodash.isempty": "^4.4.0",
-            "request": "^2.85.0"
-          }
-        },
-        "optimist": {
-          "version": "0.3.7",
-          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
-          "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
-          "requires": {
-            "wordwrap": "~0.0.2"
-          }
-        },
-        "pkginfo": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz",
-          "integrity": "sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg="
-        },
-        "watch": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/watch/-/watch-0.8.0.tgz",
-          "integrity": "sha1-G7DupT3v5uYh6cjGPANYAH7L28w="
-        },
-        "wordwrap": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
-        }
-      }
-    },
-    "create-ecdh": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "elliptic": "^6.0.0"
-      }
-    },
-    "create-hash": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "inherits": "^2.0.1",
-        "md5.js": "^1.3.4",
-        "ripemd160": "^2.0.1",
-        "sha.js": "^2.4.0"
-      }
-    },
-    "create-hmac": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
-      "requires": {
-        "cipher-base": "^1.0.3",
-        "create-hash": "^1.1.0",
-        "inherits": "^2.0.1",
-        "ripemd160": "^2.0.0",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "cross-spawn": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-      "requires": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.7.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
-          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
-        }
-      }
-    },
-    "crypto-browserify": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
-      "requires": {
-        "browserify-cipher": "^1.0.0",
-        "browserify-sign": "^4.0.0",
-        "create-ecdh": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.0",
-        "diffie-hellman": "^5.0.0",
-        "inherits": "^2.0.1",
-        "pbkdf2": "^3.0.3",
-        "public-encrypt": "^4.0.0",
-        "randombytes": "^2.0.0",
-        "randomfill": "^1.0.3"
-      }
-    },
-    "css-loader": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
-      "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
-      "requires": {
-        "camelcase": "^5.3.1",
-        "cssesc": "^3.0.0",
-        "icss-utils": "^4.1.1",
-        "loader-utils": "^1.2.3",
-        "normalize-path": "^3.0.0",
-        "postcss": "^7.0.32",
-        "postcss-modules-extract-imports": "^2.0.0",
-        "postcss-modules-local-by-default": "^3.0.2",
-        "postcss-modules-scope": "^2.2.0",
-        "postcss-modules-values": "^3.0.0",
-        "postcss-value-parser": "^4.1.0",
-        "schema-utils": "^2.7.0",
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "normalize-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        }
-      }
-    },
-    "css-select": {
-      "version": "1.2.0",
-      "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
-      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
-      "requires": {
-        "boolbase": "~1.0.0",
-        "css-what": "2.1",
-        "domutils": "1.5.1",
-        "nth-check": "~1.0.1"
-      }
-    },
-    "css-what": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
-      "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
-    },
-    "cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
-    },
-    "cssom": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-      "dev": true
-    },
-    "cssstyle": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
-      "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
-      "dev": true,
-      "requires": {
-        "cssom": "0.3.x"
-      }
-    },
-    "csstype": {
-      "version": "2.6.10",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
-      "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w=="
-    },
-    "cyclist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
-      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
-    },
-    "d3": {
-      "version": "3.5.17",
-      "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
-      "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
-    },
-    "dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "data-uri-to-buffer": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz",
-      "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==",
-      "dev": true
-    },
-    "data-urls": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
-      "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "whatwg-mimetype": "^2.2.0",
-        "whatwg-url": "^7.0.0"
-      },
-      "dependencies": {
-        "whatwg-url": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
-          "dev": true,
-          "requires": {
-            "lodash.sortby": "^4.7.0",
-            "tr46": "^1.0.1",
-            "webidl-conversions": "^4.0.2"
-          }
-        }
-      }
-    },
-    "dateformat": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-      "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
-    },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "requires": {
-        "ms": "2.0.0"
-      }
-    },
-    "decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
-    },
-    "decode-uri-component": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
-    },
-    "deep-eql": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
-      "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
-      "dev": true,
-      "requires": {
-        "type-detect": "0.1.1"
-      }
-    },
-    "deep-equal": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
-      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
-      "requires": {
-        "is-arguments": "^1.0.4",
-        "is-date-object": "^1.0.1",
-        "is-regex": "^1.0.4",
-        "object-is": "^1.0.1",
-        "object-keys": "^1.1.1",
-        "regexp.prototype.flags": "^1.2.0"
-      },
-      "dependencies": {
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
-    },
-    "default-gateway": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
-      "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
-      "requires": {
-        "execa": "^1.0.0",
-        "ip-regex": "^2.1.0"
-      }
-    },
-    "defaults": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
-      "dev": true,
-      "requires": {
-        "clone": "^1.0.2"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-          "dev": true
-        }
-      }
-    },
-    "define-properties": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
-      "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
-      "requires": {
-        "foreach": "^2.0.5",
-        "object-keys": "^1.0.8"
-      }
-    },
-    "define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-      "requires": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
-      "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "degenerator": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz",
-      "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=",
-      "dev": true,
-      "requires": {
-        "ast-types": "0.x.x",
-        "escodegen": "1.x.x",
-        "esprima": "3.x.x"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        }
-      }
-    },
-    "del": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
-      "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
-      "requires": {
-        "@types/glob": "^7.1.1",
-        "globby": "^6.1.0",
-        "is-path-cwd": "^2.0.0",
-        "is-path-in-cwd": "^2.0.0",
-        "p-map": "^2.0.0",
-        "pify": "^4.0.1",
-        "rimraf": "^2.6.3"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-    },
-    "depd": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
-      "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
-    },
-    "des.js": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
-      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "destroy": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
-    },
-    "detect-file": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
-      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
-    },
-    "detect-newline": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
-      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
-      "dev": true
-    },
-    "detect-node": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
-      "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
-    },
-    "diff": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
-      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
-      "dev": true
-    },
-    "diff-match-patch": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.1.tgz",
-      "integrity": "sha512-A0QEhr4PxGUMEtKxd6X+JLnOTFd3BfIPSDpsc4dMvj+CbSaErDwTpoTo/nFJDMSrjxLW4BiNq+FbNisAAHhWeQ=="
-    },
-    "diff-sequences": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz",
-      "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==",
-      "dev": true
-    },
-    "diffie-hellman": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "miller-rabin": "^4.0.0",
-        "randombytes": "^2.0.0"
-      }
-    },
-    "discontinuous-range": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
-      "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
-      "dev": true
-    },
-    "dns-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
-      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
-    },
-    "dns-packet": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
-      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
-      "requires": {
-        "ip": "^1.1.0",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "dns-txt": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
-      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
-      "requires": {
-        "buffer-indexof": "^1.0.0"
-      }
-    },
-    "doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "requires": {
-        "esutils": "^2.0.2"
-      }
-    },
-    "dom-align": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
-      "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
-    },
-    "dom-converter": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
-      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
-      "requires": {
-        "utila": "~0.4"
-      }
-    },
-    "dom-helpers": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz",
-      "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==",
-      "requires": {
-        "@babel/runtime": "^7.8.7",
-        "csstype": "^2.6.7"
-      }
-    },
-    "dom-serializer": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
-      "requires": {
-        "domelementtype": "~1.1.1",
-        "entities": "~1.1.1"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
-          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
-        }
-      }
-    },
-    "dom-walk": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
-      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
-      "dev": true
-    },
-    "domain-browser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
-    },
-    "domelementtype": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
-      "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA=="
-    },
-    "domexception": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
-      "dev": true,
-      "requires": {
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "domhandler": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
-      "requires": {
-        "domelementtype": "1"
-      }
-    },
-    "domutils": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
-      "requires": {
-        "dom-serializer": "0",
-        "domelementtype": "1"
-      }
-    },
-    "dotenv": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz",
-      "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==",
-      "dev": true
-    },
-    "duplexify": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
-      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
-      "requires": {
-        "end-of-stream": "^1.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "ecc-jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-      "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-      "optional": true,
-      "requires": {
-        "jsbn": "~0.1.0"
-      }
-    },
-    "ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
-    },
-    "ejs": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
-      "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
-      "dev": true
-    },
-    "electron-to-chromium": {
-      "version": "1.3.492",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.492.tgz",
-      "integrity": "sha512-AD6v9Y2wN0HuoRH4LwCmlSHjkKq51D1U52bTuvM5uPzisbHVm3Hms15c42TBFLewxnSqxAynK/tbeaUi4Rnjqw=="
-    },
-    "elliptic": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
-      "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
-      "requires": {
-        "bn.js": "^4.4.0",
-        "brorand": "^1.0.1",
-        "hash.js": "^1.0.0",
-        "hmac-drbg": "^1.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.0"
-      }
-    },
-    "emoji-regex": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
-    },
-    "emojis-list": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
-    },
-    "encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
-    },
-    "end-of-stream": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
-      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
-      "requires": {
-        "once": "^1.4.0"
-      }
-    },
-    "enhanced-resolve": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
-      "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "memory-fs": "^0.5.0",
-        "tapable": "^1.0.0"
-      },
-      "dependencies": {
-        "memory-fs": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
-          "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
-          "requires": {
-            "errno": "^0.1.3",
-            "readable-stream": "^2.0.1"
-          }
-        }
-      }
-    },
-    "entities": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
-    },
-    "envinfo": {
-      "version": "7.5.1",
-      "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.1.tgz",
-      "integrity": "sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==",
-      "dev": true
-    },
-    "enzyme": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
-      "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==",
-      "dev": true,
-      "requires": {
-        "array.prototype.flat": "^1.2.3",
-        "cheerio": "^1.0.0-rc.3",
-        "enzyme-shallow-equal": "^1.0.1",
-        "function.prototype.name": "^1.1.2",
-        "has": "^1.0.3",
-        "html-element-map": "^1.2.0",
-        "is-boolean-object": "^1.0.1",
-        "is-callable": "^1.1.5",
-        "is-number-object": "^1.0.4",
-        "is-regex": "^1.0.5",
-        "is-string": "^1.0.5",
-        "is-subset": "^0.1.1",
-        "lodash.escape": "^4.0.1",
-        "lodash.isequal": "^4.5.0",
-        "object-inspect": "^1.7.0",
-        "object-is": "^1.0.2",
-        "object.assign": "^4.1.0",
-        "object.entries": "^1.1.1",
-        "object.values": "^1.1.1",
-        "raf": "^3.4.1",
-        "rst-selector-parser": "^2.2.3",
-        "string.prototype.trim": "^1.2.1"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        }
-      }
-    },
-    "enzyme-adapter-react-16": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz",
-      "integrity": "sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==",
-      "dev": true,
-      "requires": {
-        "enzyme-adapter-utils": "^1.13.0",
-        "enzyme-shallow-equal": "^1.0.1",
-        "has": "^1.0.3",
-        "object.assign": "^4.1.0",
-        "object.values": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "react-is": "^16.12.0",
-        "react-test-renderer": "^16.0.0-0",
-        "semver": "^5.7.0"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "enzyme-adapter-utils": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz",
-      "integrity": "sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==",
-      "dev": true,
-      "requires": {
-        "airbnb-prop-types": "^2.15.0",
-        "function.prototype.name": "^1.1.2",
-        "object.assign": "^4.1.0",
-        "object.fromentries": "^2.0.2",
-        "prop-types": "^15.7.2",
-        "semver": "^5.7.1"
-      }
-    },
-    "enzyme-shallow-equal": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz",
-      "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3",
-        "object-is": "^1.0.2"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "errno": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
-      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
-      "requires": {
-        "prr": "~1.0.1"
-      }
-    },
-    "error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "errs": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/errs/-/errs-0.3.2.tgz",
-      "integrity": "sha1-eYCZstvTfKK8dJ5TinwTB9C1BJk="
-    },
-    "es-abstract": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
-      "integrity": "sha1-Hss2wZeEKgDY7kwt/YZGu5fWCGQ=",
-      "requires": {
-        "es-to-primitive": "^1.1.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.1",
-        "is-callable": "^1.1.3",
-        "is-regex": "^1.0.4"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
-      "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
-      "requires": {
-        "is-callable": "^1.1.1",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.1"
-      }
-    },
-    "es5-shim": {
-      "version": "4.5.4",
-      "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.4.tgz",
-      "integrity": "sha1-BUbRsX66KoUjWWuDPWxVP02QQeA=",
-      "dev": true
-    },
-    "es6-denodeify": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz",
-      "integrity": "sha1-MdTV/pxVA+ElRgQ5MQ4WoqPznB8="
-    },
-    "es6-promise": {
-      "version": "4.2.8",
-      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
-      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
-      "dev": true
-    },
-    "es6-promisify": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
-      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
-      "dev": true,
-      "requires": {
-        "es6-promise": "^4.0.3"
-      }
-    },
-    "escalade": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz",
-      "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA=="
-    },
-    "escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
-    },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-    },
-    "escodegen": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
-      "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
-      "dev": true,
-      "requires": {
-        "esprima": "^3.1.3",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
-    "eslint": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "ajv": "^6.10.0",
-        "chalk": "^2.1.0",
-        "cross-spawn": "^6.0.5",
-        "debug": "^4.0.1",
-        "doctrine": "^3.0.0",
-        "eslint-scope": "^5.0.0",
-        "eslint-utils": "^1.4.3",
-        "eslint-visitor-keys": "^1.1.0",
-        "espree": "^6.1.2",
-        "esquery": "^1.0.1",
-        "esutils": "^2.0.2",
-        "file-entry-cache": "^5.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^5.0.0",
-        "globals": "^12.1.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "inquirer": "^7.0.0",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^3.13.1",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.3.0",
-        "lodash": "^4.17.14",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.1",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.8.3",
-        "progress": "^2.0.0",
-        "regexpp": "^2.0.1",
-        "semver": "^6.1.2",
-        "strip-ansi": "^5.2.0",
-        "strip-json-comments": "^3.0.1",
-        "table": "^5.2.3",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "eslint-scope": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
-          "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        },
-        "eslint-visitor-keys": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-          "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
-        },
-        "glob-parent": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
-          "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
-          "requires": {
-            "is-glob": "^4.0.1"
-          },
-          "dependencies": {
-            "is-glob": {
-              "version": "4.0.1",
-              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-              "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-              "requires": {
-                "is-extglob": "^2.1.1"
-              }
-            }
-          }
-        },
-        "globals": {
-          "version": "12.4.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-          "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
-          "requires": {
-            "type-fest": "^0.8.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "optionator": {
-          "version": "0.8.3",
-          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-          "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
-          "requires": {
-            "deep-is": "~0.1.3",
-            "fast-levenshtein": "~2.0.6",
-            "levn": "~0.3.0",
-            "prelude-ls": "~1.1.2",
-            "type-check": "~0.3.2",
-            "word-wrap": "~1.2.3"
-          }
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "eslint-loader": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
-      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
-      "requires": {
-        "loader-fs-cache": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "object-assign": "^4.0.1",
-        "object-hash": "^1.1.4",
-        "rimraf": "^2.6.1"
-      }
-    },
-    "eslint-plugin-react": {
-      "version": "7.20.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz",
-      "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==",
-      "requires": {
-        "array-includes": "^3.1.1",
-        "array.prototype.flatmap": "^1.2.3",
-        "doctrine": "^2.1.0",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^2.4.1",
-        "object.entries": "^1.1.2",
-        "object.fromentries": "^2.0.2",
-        "object.values": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "resolve": "^1.17.0",
-        "string.prototype.matchall": "^4.0.2"
-      },
-      "dependencies": {
-        "doctrine": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-          "requires": {
-            "esutils": "^2.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "eslint-scope": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
-      "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-      "requires": {
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      }
-    },
-    "eslint-utils": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
-      "requires": {
-        "eslint-visitor-keys": "^1.1.0"
-      },
-      "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-          "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
-        }
-      }
-    },
-    "eslint-visitor-keys": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
-      "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0="
-    },
-    "espree": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-      "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
-      "requires": {
-        "acorn": "^7.1.1",
-        "acorn-jsx": "^5.2.0",
-        "eslint-visitor-keys": "^1.1.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "7.1.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
-          "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
-        },
-        "eslint-visitor-keys": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-          "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
-        }
-      }
-    },
-    "esprima": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
-      "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ="
-    },
-    "esquery": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
-      "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
-      "requires": {
-        "estraverse": "^5.1.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
-          "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw=="
-        }
-      }
-    },
-    "esrecurse": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
-      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
-      "requires": {
-        "estraverse": "^4.1.0"
-      }
-    },
-    "estraverse": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
-      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
-    },
-    "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
-    },
-    "etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
-    },
-    "event-target-shim": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
-      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
-    },
-    "eventemitter2": {
-      "version": "0.4.14",
-      "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
-      "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas="
-    },
-    "eventemitter3": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
-      "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ=="
-    },
-    "events": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
-      "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
-    },
-    "eventsource": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
-      "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
-      "requires": {
-        "original": "^1.0.0"
-      }
-    },
-    "evp_bytestokey": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
-      "requires": {
-        "md5.js": "^1.3.4",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "exec-sh": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
-      "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
-      "dev": true
-    },
-    "execa": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-      "requires": {
-        "cross-spawn": "^6.0.0",
-        "get-stream": "^4.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      }
-    },
-    "exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
-    },
-    "expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-      "requires": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "expand-tilde": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
-      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
-      "requires": {
-        "homedir-polyfill": "^1.0.1"
-      }
-    },
-    "expect": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz",
-      "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "ansi-styles": "^3.2.0",
-        "jest-get-type": "^24.9.0",
-        "jest-matcher-utils": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-regex-util": "^24.9.0"
-      }
-    },
-    "exports-loader": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz",
-      "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=",
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "source-map": "0.5.x"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        }
-      }
-    },
-    "expose-loader": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz",
-      "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw=="
-    },
-    "express": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
-      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
-      "requires": {
-        "accepts": "~1.3.7",
-        "array-flatten": "1.1.1",
-        "body-parser": "1.19.0",
-        "content-disposition": "0.5.3",
-        "content-type": "~1.0.4",
-        "cookie": "0.4.0",
-        "cookie-signature": "1.0.6",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "finalhandler": "~1.1.2",
-        "fresh": "0.5.2",
-        "merge-descriptors": "1.0.1",
-        "methods": "~1.1.2",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
-        "proxy-addr": "~2.0.5",
-        "qs": "6.7.0",
-        "range-parser": "~1.2.1",
-        "safe-buffer": "5.1.2",
-        "send": "0.17.1",
-        "serve-static": "1.14.1",
-        "setprototypeof": "1.1.1",
-        "statuses": "~1.5.0",
-        "type-is": "~1.6.18",
-        "utils-merge": "1.0.1",
-        "vary": "~1.1.2"
-      },
-      "dependencies": {
-        "cookie": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
-          "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
-        },
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "finalhandler": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-          "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-          "requires": {
-            "debug": "2.6.9",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.3",
-            "statuses": "~1.5.0",
-            "unpipe": "~1.0.0"
-          }
-        },
-        "http-errors": {
-          "version": "1.7.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
-          "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.4",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
-        },
-        "parseurl": {
-          "version": "1.3.3",
-          "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-          "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
-        },
-        "qs": {
-          "version": "6.7.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
-        },
-        "range-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        },
-        "send": {
-          "version": "0.17.1",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-          "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-          "requires": {
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "destroy": "~1.0.4",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "fresh": "0.5.2",
-            "http-errors": "~1.7.2",
-            "mime": "1.6.0",
-            "ms": "2.1.1",
-            "on-finished": "~2.3.0",
-            "range-parser": "~1.2.1",
-            "statuses": "~1.5.0"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
-    },
-    "extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-      "requires": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "external-editor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
-      "requires": {
-        "chardet": "^0.7.0",
-        "iconv-lite": "^0.4.24",
-        "tmp": "^0.0.33"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.4.24",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        }
-      }
-    },
-    "extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-      "requires": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
-        }
-      }
-    },
-    "extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
-    },
-    "fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-    },
-    "fast-json-stable-stringify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
-    },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
-    },
-    "faye-websocket": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
-      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
-      "requires": {
-        "websocket-driver": ">=0.5.1"
-      }
-    },
-    "fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
-      "dev": true,
-      "requires": {
-        "bser": "2.1.1"
-      }
-    },
-    "fetch-cookie": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.7.3.tgz",
-      "integrity": "sha512-rZPkLnI8x5V+zYAiz8QonAHsTb4BY+iFowFBI1RFn0zrO343AVp9X7/yUj/9wL6Ef/8fLls8b/vGtzUvmyAUGA==",
-      "requires": {
-        "es6-denodeify": "^0.1.1",
-        "tough-cookie": "^2.3.3"
-      }
-    },
-    "fetch-mock": {
-      "version": "9.10.3",
-      "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-9.10.3.tgz",
-      "integrity": "sha512-vvTW3vu+6sgDuOpInd8VtaaYlt56Un/zrEvBmT8JppDXj2ZY3PQgIAoxqdSAFR5o/10jJ1yFBhXLQ/Dce/p+jg==",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "core-js": "^3.0.0",
-        "debug": "^4.1.1",
-        "glob-to-regexp": "^0.4.0",
-        "is-subset": "^0.1.1",
-        "lodash.isequal": "^4.5.0",
-        "path-to-regexp": "^2.2.1",
-        "querystring": "^0.2.0",
-        "whatwg-url": "^6.5.0"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "3.6.5",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
-          "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
-          "dev": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        },
-        "path-to-regexp": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz",
-          "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==",
-          "dev": true
-        }
-      }
-    },
-    "figgy-pudding": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
-      "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
-    },
-    "figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-      "requires": {
-        "escape-string-regexp": "^1.0.5"
-      }
-    },
-    "file-entry-cache": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
-      "requires": {
-        "flat-cache": "^2.0.1"
-      }
-    },
-    "file-loader": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
-      "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "schema-utils": "^0.4.5"
-      }
-    },
-    "file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "finalhandler": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
-      "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
-      "requires": {
-        "debug": "2.6.9",
-        "encodeurl": "~1.0.1",
-        "escape-html": "~1.0.3",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.2",
-        "statuses": "~1.3.1",
-        "unpipe": "~1.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "find-cache-dir": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
-      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
-      "requires": {
-        "commondir": "^1.0.1",
-        "make-dir": "^2.0.0",
-        "pkg-dir": "^3.0.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
-          "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-          "requires": {
-            "p-limit": "^2.0.0"
-          }
-        },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-        },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-          "requires": {
-            "find-up": "^3.0.0"
-          }
-        }
-      }
-    },
-    "find-up": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-      "requires": {
-        "locate-path": "^3.0.0"
-      }
-    },
-    "findup-sync": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
-      "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
-      "requires": {
-        "glob": "~5.0.0"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "5.0.15",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
-          "requires": {
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "2 || 3",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        }
-      }
-    },
-    "fined": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
-      "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "is-plain-object": "^2.0.3",
-        "object.defaults": "^1.1.0",
-        "object.pick": "^1.2.0",
-        "parse-filepath": "^1.0.1"
-      }
-    },
-    "flagged-respawn": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
-      "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
-    },
-    "flat": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
-      "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-buffer": "~2.0.3"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
-          "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
-    "flat-cache": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
-      "requires": {
-        "flatted": "^2.0.0",
-        "rimraf": "2.6.3",
-        "write": "1.0.3"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "flatted": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
-    },
-    "flush-write-stream": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
-      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
-      "requires": {
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.3.6"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "follow-redirects": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz",
-      "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg=="
-    },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
-    },
-    "for-own": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
-      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
-      "requires": {
-        "for-in": "^1.0.1"
-      }
-    },
-    "foreach": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
-      "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
-    },
-    "forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
-    },
-    "form-data": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
-      "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
-      "requires": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "1.0.6",
-        "mime-types": "^2.1.12"
-      }
-    },
-    "forwarded": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
-      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
-    },
-    "fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-      "requires": {
-        "map-cache": "^0.2.2"
-      }
-    },
-    "fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
-    },
-    "from2": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0"
-      }
-    },
-    "fs-extra": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
-      "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "jsonfile": "^2.1.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
-        },
-        "jsonfile": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
-          "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
-          "requires": {
-            "graceful-fs": "^4.1.6"
-          }
-        }
-      }
-    },
-    "fs-readdir-recursive": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
-      "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
-    },
-    "fs-write-stream-atomic": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
-      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "iferr": "^0.1.5",
-        "imurmurhash": "^0.1.4",
-        "readable-stream": "1 || 2"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-    },
-    "fsevents": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
-      "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
-      "optional": true,
-      "requires": {
-        "nan": "^2.12.1",
-        "node-pre-gyp": "^0.12.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^2.0.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "chownr": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "optional": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
-          "optional": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "deep-extend": {
-          "version": "0.6.0",
-          "bundled": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "aproba": "^1.0.3",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.0",
-            "object-assign": "^4.1.0",
-            "signal-exit": "^3.0.0",
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wide-align": "^1.1.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.24",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        },
-        "ignore-walk": {
-          "version": "3.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "^3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true,
-          "optional": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "optional": true
-        },
-        "minipass": {
-          "version": "2.3.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.0"
-          }
-        },
-        "minizlib": {
-          "version": "1.2.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.3.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "debug": "^4.1.0",
-            "iconv-lite": "^0.4.4",
-            "sax": "^1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.12.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "^1.0.2",
-            "mkdirp": "^0.5.1",
-            "needle": "^2.2.1",
-            "nopt": "^4.0.1",
-            "npm-packlist": "^1.1.6",
-            "npmlog": "^4.0.2",
-            "rc": "^1.2.7",
-            "rimraf": "^2.6.1",
-            "semver": "^5.3.0",
-            "tar": "^4"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.6",
-          "bundled": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.4.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "^3.0.1",
-            "npm-bundled": "^1.0.1"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "~1.1.2",
-            "console-control-strings": "~1.1.0",
-            "gauge": "~2.7.3",
-            "set-blocking": "~2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.8",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "^0.6.0",
-            "ini": "~1.3.0",
-            "minimist": "^1.2.0",
-            "strip-json-comments": "~2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "bundled": true,
-          "optional": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.7.0",
-          "bundled": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.8",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "chownr": "^1.1.1",
-            "fs-minipass": "^1.2.5",
-            "minipass": "^2.3.4",
-            "minizlib": "^1.1.1",
-            "mkdirp": "^0.5.0",
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "string-width": "^1.0.2 || 2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "bundled": true,
-          "optional": true
-        }
-      }
-    },
-    "ftp": {
-      "version": "0.3.10",
-      "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
-      "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "1.1.x",
-        "xregexp": "2.0.0"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "1.1.14",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-          "dev": true
-        }
-      }
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
-    },
-    "function.prototype.name": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz",
-      "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "functions-have-names": "^1.2.0"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
-    },
-    "functions-have-names": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz",
-      "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==",
-      "dev": true
-    },
-    "gensync": {
-      "version": "1.0.0-beta.1",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
-      "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
-    },
-    "get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
-    },
-    "get-stream": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-      "requires": {
-        "pump": "^3.0.0"
-      }
-    },
-    "get-uri": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz",
-      "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==",
-      "dev": true,
-      "requires": {
-        "data-uri-to-buffer": "1",
-        "debug": "2",
-        "extend": "~3.0.2",
-        "file-uri-to-path": "1",
-        "ftp": "~0.3.10",
-        "readable-stream": "2"
-      }
-    },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
-    },
-    "getobject": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
-      "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw="
-    },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "glob": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-      "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "dependencies": {
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-        }
-      }
-    },
-    "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
-    },
-    "glob-to-regexp": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-      "dev": true
-    },
-    "global": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
-      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
-      "dev": true,
-      "requires": {
-        "min-document": "^2.19.0",
-        "process": "^0.11.10"
-      }
-    },
-    "global-modules": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
-      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
-      "requires": {
-        "global-prefix": "^3.0.0"
-      },
-      "dependencies": {
-        "global-prefix": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
-          "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
-          "requires": {
-            "ini": "^1.3.5",
-            "kind-of": "^6.0.2",
-            "which": "^1.3.1"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
-      }
-    },
-    "global-prefix": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
-      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "homedir-polyfill": "^1.0.1",
-        "ini": "^1.3.4",
-        "is-windows": "^1.0.1",
-        "which": "^1.2.14"
-      }
-    },
-    "globals": {
-      "version": "11.5.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz",
-      "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ=="
-    },
-    "globby": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-      "requires": {
-        "array-union": "^1.0.1",
-        "glob": "^7.0.3",
-        "object-assign": "^4.0.1",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
-        }
-      }
-    },
-    "graceful-fs": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-      "integrity": "sha512-9x6DLUuW+ROFdMTII9ec9t/FK8va6kYcC8/LggumssLM8kNv7IdFl3VrNUqgir2tJuBVxBga1QBoRziZacO5Zg=="
-    },
-    "growl": {
-      "version": "1.10.5",
-      "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
-      "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
-      "dev": true,
-      "optional": true
-    },
-    "growly": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
-      "dev": true
-    },
-    "grunt": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.2.1.tgz",
-      "integrity": "sha512-zgJjn9N56tScvRt/y0+1QA+zDBnKTrkpyeSBqQPLcZvbqTD/oyGMrdZQXmm6I3828s+FmPvxc3Xv+lgKFtudOw==",
-      "requires": {
-        "dateformat": "~3.0.3",
-        "eventemitter2": "~0.4.13",
-        "exit": "~0.1.2",
-        "findup-sync": "~0.3.0",
-        "glob": "~7.1.6",
-        "grunt-cli": "~1.3.2",
-        "grunt-known-options": "~1.1.0",
-        "grunt-legacy-log": "~2.0.0",
-        "grunt-legacy-util": "~1.1.1",
-        "iconv-lite": "~0.4.13",
-        "js-yaml": "~3.14.0",
-        "minimatch": "~3.0.4",
-        "mkdirp": "~1.0.4",
-        "nopt": "~3.0.6",
-        "rimraf": "~3.0.2"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
-          "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "mkdirp": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
-        },
-        "rimraf": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "grunt-cli": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz",
-      "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==",
-      "requires": {
-        "grunt-known-options": "~1.1.0",
-        "interpret": "~1.1.0",
-        "liftoff": "~2.5.0",
-        "nopt": "~4.0.1",
-        "v8flags": "~3.1.1"
-      },
-      "dependencies": {
-        "interpret": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
-          "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
-        },
-        "nopt": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
-          "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        }
-      }
-    },
-    "grunt-contrib-clean": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz",
-      "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=",
-      "requires": {
-        "async": "^1.5.2",
-        "rimraf": "^2.5.1"
-      },
-      "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
-        }
-      }
-    },
-    "grunt-contrib-copy": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
-      "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
-      "requires": {
-        "chalk": "^1.1.1",
-        "file-sync-cmp": "^0.1.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-        },
-        "file-sync-cmp": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
-          "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs="
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-        }
-      }
-    },
-    "grunt-couchapp": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/grunt-couchapp/-/grunt-couchapp-0.2.1.tgz",
-      "integrity": "sha1-OgYhahiGoVGEgQMF50cpx7MkXo4=",
-      "requires": {
-        "couchapp": "0.10.*",
-        "grunt": "~0.3.12",
-        "nano": "3.3.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-          "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-        },
-        "argparse": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
-          "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "asn1": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-          "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
-        },
-        "assert-plus": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
-          "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
-        },
-        "async": {
-          "version": "0.1.22",
-          "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
-          "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE="
-        },
-        "asynckit": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-          "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-        },
-        "aws-sign2": {
-          "version": "0.6.0",
-          "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
-          "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
-        },
-        "aws4": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
-          "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
-        },
-        "bcrypt-pbkdf": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-          "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
-          "optional": true,
-          "requires": {
-            "tweetnacl": "^0.14.3"
-          }
-        },
-        "bind-obj-methods": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-1.0.0.tgz",
-          "integrity": "sha1-T1l5ysFXk633DkiBYeRj4gnKUJw="
-        },
-        "boom": {
-          "version": "2.10.1",
-          "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
-          "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "brace-expansion": {
-          "version": "1.1.8",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
-          "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "bytes": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz",
-          "integrity": "sha1-xXSBIigSbWNp0VdpJahXnbP45aI="
-        },
-        "caseless": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
-          "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c="
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "clean-yaml-object": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz",
-          "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g="
-        },
-        "cli": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.3.tgz",
-          "integrity": "sha1-5oGcjV+qlX9k+Y9mqFBiaMHR8X0=",
-          "requires": {
-            "glob": ">= 3.1.4"
-          }
-        },
-        "color-support": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-          "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
-        },
-        "colors": {
-          "version": "0.6.2",
-          "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
-          "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
-        },
-        "combined-stream": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
-          "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
-          "requires": {
-            "delayed-stream": "~1.0.0"
-          }
-        },
-        "commander": {
-          "version": "2.12.2",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
-          "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA=="
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-        },
-        "cookie": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz",
-          "integrity": "sha1-VFa9R67iZm6sl26oCmEFlASD/pg="
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-        },
-        "couchapp": {
-          "version": "0.10.0",
-          "resolved": "https://registry.npmjs.org/couchapp/-/couchapp-0.10.0.tgz",
-          "integrity": "sha1-SDKOoAZuQ9D0tIuZSeBVeU0yC4Y=",
-          "requires": {
-            "coffee-script": "*",
-            "connect": "*",
-            "http-proxy": "*",
-            "nano": "*",
-            "request": "*",
-            "url": "*",
-            "watch": "~0.8.0"
-          }
-        },
-        "coveralls": {
-          "version": "2.13.3",
-          "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz",
-          "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==",
-          "requires": {
-            "js-yaml": "3.6.1",
-            "lcov-parse": "0.0.10",
-            "log-driver": "1.2.5",
-            "minimist": "1.2.0",
-            "request": "2.79.0"
-          },
-          "dependencies": {
-            "js-yaml": {
-              "version": "3.6.1",
-              "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
-              "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
-              "requires": {
-                "argparse": "^1.0.7",
-                "esprima": "^2.6.0"
-              }
-            },
-            "qs": {
-              "version": "6.3.2",
-              "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
-              "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw="
-            },
-            "request": {
-              "version": "2.79.0",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
-              "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
-              "requires": {
-                "aws-sign2": "~0.6.0",
-                "aws4": "^1.2.1",
-                "caseless": "~0.11.0",
-                "combined-stream": "~1.0.5",
-                "extend": "~3.0.0",
-                "forever-agent": "~0.6.1",
-                "form-data": "~2.1.1",
-                "har-validator": "~2.0.6",
-                "hawk": "~3.1.3",
-                "http-signature": "~1.1.0",
-                "is-typedarray": "~1.0.0",
-                "isstream": "~0.1.2",
-                "json-stringify-safe": "~5.0.1",
-                "mime-types": "~2.1.7",
-                "oauth-sign": "~0.8.1",
-                "qs": "~6.3.0",
-                "stringstream": "~0.0.4",
-                "tough-cookie": "~2.3.0",
-                "tunnel-agent": "~0.4.1",
-                "uuid": "^3.0.0"
-              }
-            }
-          }
-        },
-        "crc": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/crc/-/crc-0.2.0.tgz",
-          "integrity": "sha1-9Ehrm/ChLfg8P8oU4x4DD9q9lFQ="
-        },
-        "crc32": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz",
-          "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo="
-        },
-        "cross-spawn": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
-          "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
-          },
-          "dependencies": {
-            "lru-cache": {
-              "version": "4.1.1",
-              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
-              "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
-              "requires": {
-                "pseudomap": "^1.0.2",
-                "yallist": "^2.1.2"
-              }
-            }
-          }
-        },
-        "cryptiles": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
-          "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
-          "requires": {
-            "boom": "2.x.x"
-          }
-        },
-        "dashdash": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-          "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-          "requires": {
-            "assert-plus": "^1.0.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "dateformat": {
-          "version": "1.0.2-1.2.3",
-          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
-          "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk="
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "deflate-js": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/deflate-js/-/deflate-js-0.2.3.tgz",
-          "integrity": "sha1-+Fq7WOvFFRowYUdHPVfD5PfkQms="
-        },
-        "delayed-stream": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-          "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-        },
-        "diff": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz",
-          "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8="
-        },
-        "ecc-jsbn": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-          "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-          "optional": true,
-          "requires": {
-            "jsbn": "~0.1.0"
-          }
-        },
-        "errs": {
-          "version": "0.2.4",
-          "resolved": "https://registry.npmjs.org/errs/-/errs-0.2.4.tgz",
-          "integrity": "sha1-SMzv7JT9PmE9ZGmEDdHAOJN5g/Y="
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-        },
-        "esprima": {
-          "version": "2.7.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-          "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
-        },
-        "events-to-array": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz",
-          "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y="
-        },
-        "extend": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
-          "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
-        },
-        "extsprintf": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-          "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
-        },
-        "eyes": {
-          "version": "0.1.8",
-          "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
-          "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
-        },
-        "follow": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/follow/-/follow-0.8.0.tgz",
-          "integrity": "sha1-Vg9o6gsED0kWch4pBWG1+kQlsAQ=",
-          "requires": {
-            "request": "~2.2.5"
-          },
-          "dependencies": {
-            "request": {
-              "version": "2.2.9",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.2.9.tgz",
-              "integrity": "sha1-77+K+/5/HiANSDuZdStsQrQEoPE="
-            }
-          }
-        },
-        "foreground-child": {
-          "version": "1.5.6",
-          "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
-          "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=",
-          "requires": {
-            "cross-spawn": "^4",
-            "signal-exit": "^3.0.0"
-          }
-        },
-        "forever-agent": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-          "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
-        },
-        "form-data": {
-          "version": "2.1.4",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
-          "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.5",
-            "mime-types": "^2.1.12"
-          }
-        },
-        "formidable": {
-          "version": "1.0.11",
-          "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz",
-          "integrity": "sha1-aPYzJaA15kS297s9ESQ7l2HeGzA="
-        },
-        "fresh": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz",
-          "integrity": "sha1-A+SwF4Qk5MLV0ZpU2IFM3JeTSFA="
-        },
-        "fs-exists-cached": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz",
-          "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84="
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-        },
-        "function-loop": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.1.tgz",
-          "integrity": "sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw="
-        },
-        "generate-function": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
-          "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ="
-        },
-        "generate-object-property": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
-          "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
-          "requires": {
-            "is-property": "^1.0.0"
-          }
-        },
-        "getpass": {
-          "version": "0.1.7",
-          "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-          "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-          "requires": {
-            "assert-plus": "^1.0.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          },
-          "dependencies": {
-            "minimatch": {
-              "version": "3.0.4",
-              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-              "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-              "requires": {
-                "brace-expansion": "^1.1.7"
-              }
-            }
-          }
-        },
-        "glob-whatev": {
-          "version": "0.1.8",
-          "resolved": "https://registry.npmjs.org/glob-whatev/-/glob-whatev-0.1.8.tgz",
-          "integrity": "sha1-ozp2MmLlAehRvIT9IrVzbP84Jv0=",
-          "requires": {
-            "minimatch": "~0.2.5"
-          }
-        },
-        "grunt": {
-          "version": "0.3.17",
-          "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.3.17.tgz",
-          "integrity": "sha1-8uA00gC+/V7rOLpcQdTM1yNf1k0=",
-          "requires": {
-            "async": "~0.1.18",
-            "colors": "~0.6.0",
-            "connect": "~2.4.4",
-            "dateformat": "1.0.2-1.2.3",
-            "glob-whatev": "~0.1.4",
-            "gzip-js": "~0.3.1",
-            "hooker": "~0.2.3",
-            "jshint": "~0.9.1",
-            "nodeunit": "~0.7.4",
-            "nopt": "~1.0.10",
-            "prompt": "~0.1.12",
-            "semver": "~1.0.13",
-            "temporary": "~0.0.4",
-            "uglify-js": "~1.3.3",
-            "underscore": "~1.2.4",
-            "underscore.string": "~2.1.1"
-          },
-          "dependencies": {
-            "connect": {
-              "version": "2.4.6",
-              "resolved": "https://registry.npmjs.org/connect/-/connect-2.4.6.tgz",
-              "integrity": "sha1-ASwv4FAYUE7SAoZooWkDGZ5ues4=",
-              "requires": {
-                "bytes": "0.1.0",
-                "cookie": "0.0.4",
-                "crc": "0.2.0",
-                "debug": "*",
-                "formidable": "1.0.11",
-                "fresh": "0.1.0",
-                "pause": "0.0.1",
-                "qs": "0.5.1",
-                "send": "0.0.4"
-              }
-            }
-          }
-        },
-        "gzip-js": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/gzip-js/-/gzip-js-0.3.2.tgz",
-          "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=",
-          "requires": {
-            "crc32": ">= 0.2.2",
-            "deflate-js": ">= 0.2.2"
-          }
-        },
-        "har-validator": {
-          "version": "2.0.6",
-          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
-          "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
-          "requires": {
-            "chalk": "^1.1.1",
-            "commander": "^2.9.0",
-            "is-my-json-valid": "^2.12.4",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "hawk": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
-          "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
-          "requires": {
-            "boom": "2.x.x",
-            "cryptiles": "2.x.x",
-            "hoek": "2.x.x",
-            "sntp": "1.x.x"
-          }
-        },
-        "hoek": {
-          "version": "2.16.3",
-          "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
-          "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
-        },
-        "hooker": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
-          "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk="
-        },
-        "http-signature": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
-          "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
-          "requires": {
-            "assert-plus": "^0.2.0",
-            "jsprim": "^1.2.2",
-            "sshpk": "^1.7.0"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        },
-        "is-my-json-valid": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz",
-          "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==",
-          "requires": {
-            "generate-function": "^2.0.0",
-            "generate-object-property": "^1.1.0",
-            "jsonpointer": "^4.0.0",
-            "xtend": "^4.0.0"
-          }
-        },
-        "is-property": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
-          "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
-        },
-        "is-typedarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-          "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "optional": true
-        },
-        "isexe": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-          "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
-        },
-        "isstream": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-          "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
-        },
-        "js-yaml": {
-          "version": "3.10.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
-          "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          },
-          "dependencies": {
-            "esprima": {
-              "version": "4.0.0",
-              "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
-              "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
-            }
-          }
-        },
-        "jsbn": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-          "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-          "optional": true
-        },
-        "jshint": {
-          "version": "0.9.1",
-          "resolved": "https://registry.npmjs.org/jshint/-/jshint-0.9.1.tgz",
-          "integrity": "sha1-/zLsfwn4QAH3SY7q/WPJ5Puy3A4=",
-          "requires": {
-            "cli": "0.4.3",
-            "minimatch": "0.0.x"
-          },
-          "dependencies": {
-            "lru-cache": {
-              "version": "1.0.6",
-              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-1.0.6.tgz",
-              "integrity": "sha1-qlD5cEdCKsclQ72hd6nJ0BjZhFI="
-            },
-            "minimatch": {
-              "version": "0.0.5",
-              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.0.5.tgz",
-              "integrity": "sha1-lrtJC707poNrv6wRGt91MBsVhN4=",
-              "requires": {
-                "lru-cache": "~1.0.2"
-              }
-            }
-          }
-        },
-        "json-schema": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-          "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
-        },
-        "json-stringify-safe": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-          "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
-        },
-        "jsonpointer": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
-          "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk="
-        },
-        "jsprim": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-          "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-          "requires": {
-            "assert-plus": "1.0.0",
-            "extsprintf": "1.3.0",
-            "json-schema": "0.2.3",
-            "verror": "1.10.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "lcov-parse": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
-          "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM="
-        },
-        "log-driver": {
-          "version": "1.2.5",
-          "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz",
-          "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY="
-        },
-        "loggly": {
-          "version": "0.3.11",
-          "resolved": "https://registry.npmjs.org/loggly/-/loggly-0.3.11.tgz",
-          "integrity": "sha1-YsHsNDZ3LwlUWY8muVfSrSmGthE=",
-          "requires": {
-            "request": "2.9.x",
-            "timespan": "2.x.x"
-          },
-          "dependencies": {
-            "request": {
-              "version": "2.9.203",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.9.203.tgz",
-              "integrity": "sha1-bBcRpUB/uUoRQhlWPkQUW8v0cjo="
-            }
-          }
-        },
-        "lru-cache": {
-          "version": "2.7.3",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
-          "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI="
-        },
-        "mime": {
-          "version": "1.2.6",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.6.tgz",
-          "integrity": "sha1-sfhsdowCX6h7SAdfFwnyiuryA2U="
-        },
-        "mime-db": {
-          "version": "1.30.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
-          "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
-        },
-        "mime-types": {
-          "version": "2.1.17",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
-          "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
-          "requires": {
-            "mime-db": "~1.30.0"
-          }
-        },
-        "minimatch": {
-          "version": "0.2.14",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
-          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
-          "requires": {
-            "lru-cache": "2",
-            "sigmund": "~1.0.0"
-          }
-        },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-        },
-        "nano": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/nano/-/nano-3.3.0.tgz",
-          "integrity": "sha1-EamaCBW2jtHVrM9fVwM0Dwc3Qqw=",
-          "requires": {
-            "errs": "0.2.x",
-            "follow": "0.8.x",
-            "request": "2.9.x"
-          },
-          "dependencies": {
-            "request": {
-              "version": "2.9.203",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.9.203.tgz",
-              "integrity": "sha1-bBcRpUB/uUoRQhlWPkQUW8v0cjo="
-            }
-          }
-        },
-        "nodeunit": {
-          "version": "0.7.4",
-          "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.7.4.tgz",
-          "integrity": "sha1-yQje9/KZ++Zf96yIh4KVXEaq6fg=",
-          "requires": {
-            "tap": ">=0.2.3"
-          }
-        },
-        "nopt": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
-          "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
-          "requires": {
-            "abbrev": "1"
-          }
-        },
-        "nyc": {
-          "version": "11.4.1",
-          "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz",
-          "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==",
-          "requires": {
-            "archy": "^1.0.0",
-            "arrify": "^1.0.1",
-            "caching-transform": "^1.0.0",
-            "convert-source-map": "^1.3.0",
-            "debug-log": "^1.0.1",
-            "default-require-extensions": "^1.0.0",
-            "find-cache-dir": "^0.1.1",
-            "find-up": "^2.1.0",
-            "foreground-child": "^1.5.3",
-            "glob": "^7.0.6",
-            "istanbul-lib-coverage": "^1.1.1",
-            "istanbul-lib-hook": "^1.1.0",
-            "istanbul-lib-instrument": "^1.9.1",
-            "istanbul-lib-report": "^1.1.2",
-            "istanbul-lib-source-maps": "^1.2.2",
-            "istanbul-reports": "^1.1.3",
-            "md5-hex": "^1.2.0",
-            "merge-source-map": "^1.0.2",
-            "micromatch": "^2.3.11",
-            "mkdirp": "^0.5.0",
-            "resolve-from": "^2.0.0",
-            "rimraf": "^2.5.4",
-            "signal-exit": "^3.0.1",
-            "spawn-wrap": "^1.4.2",
-            "test-exclude": "^4.1.1",
-            "yargs": "^10.0.3",
-            "yargs-parser": "^8.0.0"
-          },
-          "dependencies": {
-            "align-text": {
-              "version": "0.1.4",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "kind-of": "^3.0.2",
-                "longest": "^1.0.1",
-                "repeat-string": "^1.5.2"
-              }
-            },
-            "amdefine": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "ansi-regex": {
-              "version": "2.1.1",
-              "bundled": true
-            },
-            "ansi-styles": {
-              "version": "2.2.1",
-              "bundled": true
-            },
-            "append-transform": {
-              "version": "0.4.0",
-              "bundled": true,
-              "requires": {
-                "default-require-extensions": "^1.0.0"
-              }
-            },
-            "archy": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "arr-diff": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "arr-flatten": "^1.0.1"
-              }
-            },
-            "arr-flatten": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "array-unique": {
-              "version": "0.2.1",
-              "bundled": true
-            },
-            "arrify": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "async": {
-              "version": "1.5.2",
-              "bundled": true
-            },
-            "babel-code-frame": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "chalk": "^1.1.3",
-                "esutils": "^2.0.2",
-                "js-tokens": "^3.0.2"
-              }
-            },
-            "babel-generator": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-messages": "^6.23.0",
-                "babel-runtime": "^6.26.0",
-                "babel-types": "^6.26.0",
-                "detect-indent": "^4.0.0",
-                "jsesc": "^1.3.0",
-                "lodash": "^4.17.4",
-                "source-map": "^0.5.6",
-                "trim-right": "^1.0.1"
-              }
-            },
-            "babel-messages": {
-              "version": "6.23.0",
-              "bundled": true,
-              "requires": {
-                "babel-runtime": "^6.22.0"
-              }
-            },
-            "babel-runtime": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "core-js": "^2.4.0",
-                "regenerator-runtime": "^0.11.0"
-              }
-            },
-            "babel-template": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-runtime": "^6.26.0",
-                "babel-traverse": "^6.26.0",
-                "babel-types": "^6.26.0",
-                "babylon": "^6.18.0",
-                "lodash": "^4.17.4"
-              }
-            },
-            "babel-traverse": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-code-frame": "^6.26.0",
-                "babel-messages": "^6.23.0",
-                "babel-runtime": "^6.26.0",
-                "babel-types": "^6.26.0",
-                "babylon": "^6.18.0",
-                "debug": "^2.6.8",
-                "globals": "^9.18.0",
-                "invariant": "^2.2.2",
-                "lodash": "^4.17.4"
-              }
-            },
-            "babel-types": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-runtime": "^6.26.0",
-                "esutils": "^2.0.2",
-                "lodash": "^4.17.4",
-                "to-fast-properties": "^1.0.3"
-              }
-            },
-            "babylon": {
-              "version": "6.18.0",
-              "bundled": true
-            },
-            "balanced-match": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "brace-expansion": {
-              "version": "1.1.8",
-              "bundled": true,
-              "requires": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-              }
-            },
-            "braces": {
-              "version": "1.8.5",
-              "bundled": true,
-              "requires": {
-                "expand-range": "^1.8.1",
-                "preserve": "^0.2.0",
-                "repeat-element": "^1.1.2"
-              }
-            },
-            "builtin-modules": {
-              "version": "1.1.1",
-              "bundled": true
-            },
-            "caching-transform": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "md5-hex": "^1.2.0",
-                "mkdirp": "^0.5.1",
-                "write-file-atomic": "^1.1.4"
-              }
-            },
-            "camelcase": {
-              "version": "1.2.1",
-              "bundled": true,
-              "optional": true
-            },
-            "center-align": {
-              "version": "0.1.3",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "align-text": "^0.1.3",
-                "lazy-cache": "^1.0.3"
-              }
-            },
-            "chalk": {
-              "version": "1.1.3",
-              "bundled": true,
-              "requires": {
-                "ansi-styles": "^2.2.1",
-                "escape-string-regexp": "^1.0.2",
-                "has-ansi": "^2.0.0",
-                "strip-ansi": "^3.0.0",
-                "supports-color": "^2.0.0"
-              }
-            },
-            "cliui": {
-              "version": "2.1.0",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "center-align": "^0.1.1",
-                "right-align": "^0.1.1",
-                "wordwrap": "0.0.2"
-              },
-              "dependencies": {
-                "wordwrap": {
-                  "version": "0.0.2",
-                  "bundled": true,
-                  "optional": true
-                }
-              }
-            },
-            "code-point-at": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "commondir": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "concat-map": {
-              "version": "0.0.1",
-              "bundled": true
-            },
-            "convert-source-map": {
-              "version": "1.5.1",
-              "bundled": true
-            },
-            "core-js": {
-              "version": "2.5.3",
-              "bundled": true
-            },
-            "cross-spawn": {
-              "version": "4.0.2",
-              "bundled": true,
-              "requires": {
-                "lru-cache": "^4.0.1",
-                "which": "^1.2.9"
-              }
-            },
-            "debug": {
-              "version": "2.6.9",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            },
-            "debug-log": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "decamelize": {
-              "version": "1.2.0",
-              "bundled": true
-            },
-            "default-require-extensions": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "strip-bom": "^2.0.0"
-              }
-            },
-            "detect-indent": {
-              "version": "4.0.0",
-              "bundled": true,
-              "requires": {
-                "repeating": "^2.0.0"
-              }
-            },
-            "error-ex": {
-              "version": "1.3.1",
-              "bundled": true,
-              "requires": {
-                "is-arrayish": "^0.2.1"
-              }
-            },
-            "escape-string-regexp": {
-              "version": "1.0.5",
-              "bundled": true
-            },
-            "esutils": {
-              "version": "2.0.2",
-              "bundled": true
-            },
-            "execa": {
-              "version": "0.7.0",
-              "bundled": true,
-              "requires": {
-                "cross-spawn": "^5.0.1",
-                "get-stream": "^3.0.0",
-                "is-stream": "^1.1.0",
-                "npm-run-path": "^2.0.0",
-                "p-finally": "^1.0.0",
-                "signal-exit": "^3.0.0",
-                "strip-eof": "^1.0.0"
-              },
-              "dependencies": {
-                "cross-spawn": {
-                  "version": "5.1.0",
-                  "bundled": true,
-                  "requires": {
-                    "lru-cache": "^4.0.1",
-                    "shebang-command": "^1.2.0",
-                    "which": "^1.2.9"
-                  }
-                }
-              }
-            },
-            "expand-brackets": {
-              "version": "0.1.5",
-              "bundled": true,
-              "requires": {
-                "is-posix-bracket": "^0.1.0"
-              }
-            },
-            "expand-range": {
-              "version": "1.8.2",
-              "bundled": true,
-              "requires": {
-                "fill-range": "^2.1.0"
-              }
-            },
-            "extglob": {
-              "version": "0.3.2",
-              "bundled": true,
-              "requires": {
-                "is-extglob": "^1.0.0"
-              }
-            },
-            "filename-regex": {
-              "version": "2.0.1",
-              "bundled": true
-            },
-            "fill-range": {
-              "version": "2.2.3",
-              "bundled": true,
-              "requires": {
-                "is-number": "^2.1.0",
-                "isobject": "^2.0.0",
-                "randomatic": "^1.1.3",
-                "repeat-element": "^1.1.2",
-                "repeat-string": "^1.5.2"
-              }
-            },
-            "find-cache-dir": {
-              "version": "0.1.1",
-              "bundled": true,
-              "requires": {
-                "commondir": "^1.0.1",
-                "mkdirp": "^0.5.1",
-                "pkg-dir": "^1.0.0"
-              }
-            },
-            "find-up": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "locate-path": "^2.0.0"
-              }
-            },
-            "for-in": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "for-own": {
-              "version": "0.1.5",
-              "bundled": true,
-              "requires": {
-                "for-in": "^1.0.1"
-              }
-            },
-            "foreground-child": {
-              "version": "1.5.6",
-              "bundled": true,
-              "requires": {
-                "cross-spawn": "^4",
-                "signal-exit": "^3.0.0"
-              }
-            },
-            "fs.realpath": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "get-caller-file": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "get-stream": {
-              "version": "3.0.0",
-              "bundled": true
-            },
-            "glob": {
-              "version": "7.1.2",
-              "bundled": true,
-              "requires": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.0.4",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
-              }
-            },
-            "glob-base": {
-              "version": "0.3.0",
-              "bundled": true,
-              "requires": {
-                "glob-parent": "^2.0.0",
-                "is-glob": "^2.0.0"
-              }
-            },
-            "glob-parent": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "is-glob": "^2.0.0"
-              }
-            },
-            "globals": {
-              "version": "9.18.0",
-              "bundled": true
-            },
-            "graceful-fs": {
-              "version": "4.1.11",
-              "bundled": true
-            },
-            "handlebars": {
-              "version": "4.0.11",
-              "bundled": true,
-              "requires": {
-                "async": "^1.4.0",
-                "optimist": "^0.6.1",
-                "source-map": "^0.4.4",
-                "uglify-js": "^2.6"
-              },
-              "dependencies": {
-                "source-map": {
-                  "version": "0.4.4",
-                  "bundled": true,
-                  "requires": {
-                    "amdefine": ">=0.0.4"
-                  }
-                }
-              }
-            },
-            "has-ansi": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "ansi-regex": "^2.0.0"
-              }
-            },
-            "has-flag": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "hosted-git-info": {
-              "version": "2.5.0",
-              "bundled": true
-            },
-            "imurmurhash": {
-              "version": "0.1.4",
-              "bundled": true
-            },
-            "inflight": {
-              "version": "1.0.6",
-              "bundled": true,
-              "requires": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-              }
-            },
-            "inherits": {
-              "version": "2.0.3",
-              "bundled": true
-            },
-            "invariant": {
-              "version": "2.2.2",
-              "bundled": true,
-              "requires": {
-                "loose-envify": "^1.0.0"
-              }
-            },
-            "invert-kv": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "is-arrayish": {
-              "version": "0.2.1",
-              "bundled": true
-            },
-            "is-buffer": {
-              "version": "1.1.6",
-              "bundled": true
-            },
-            "is-builtin-module": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "builtin-modules": "^1.0.0"
-              }
-            },
-            "is-dotfile": {
-              "version": "1.0.3",
-              "bundled": true
-            },
-            "is-equal-shallow": {
-              "version": "0.1.3",
-              "bundled": true,
-              "requires": {
-                "is-primitive": "^2.0.0"
-              }
-            },
-            "is-extendable": {
-              "version": "0.1.1",
-              "bundled": true
-            },
-            "is-extglob": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "is-finite": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "number-is-nan": "^1.0.0"
-              }
-            },
-            "is-fullwidth-code-point": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "number-is-nan": "^1.0.0"
-              }
-            },
-            "is-glob": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "is-extglob": "^1.0.0"
-              }
-            },
-            "is-number": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^3.0.2"
-              }
-            },
-            "is-posix-bracket": {
-              "version": "0.1.1",
-              "bundled": true
-            },
-            "is-primitive": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "is-stream": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "is-utf8": {
-              "version": "0.2.1",
-              "bundled": true
-            },
-            "isarray": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "isexe": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "isobject": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            },
-            "istanbul-lib-coverage": {
-              "version": "1.1.1",
-              "bundled": true
-            },
-            "istanbul-lib-hook": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "append-transform": "^0.4.0"
-              }
-            },
-            "istanbul-lib-instrument": {
-              "version": "1.9.1",
-              "bundled": true,
-              "requires": {
-                "babel-generator": "^6.18.0",
-                "babel-template": "^6.16.0",
-                "babel-traverse": "^6.18.0",
-                "babel-types": "^6.18.0",
-                "babylon": "^6.18.0",
-                "istanbul-lib-coverage": "^1.1.1",
-                "semver": "^5.3.0"
-              }
-            },
-            "istanbul-lib-report": {
-              "version": "1.1.2",
-              "bundled": true,
-              "requires": {
-                "istanbul-lib-coverage": "^1.1.1",
-                "mkdirp": "^0.5.1",
-                "path-parse": "^1.0.5",
-                "supports-color": "^3.1.2"
-              },
-              "dependencies": {
-                "supports-color": {
-                  "version": "3.2.3",
-                  "bundled": true,
-                  "requires": {
-                    "has-flag": "^1.0.0"
-                  }
-                }
-              }
-            },
-            "istanbul-lib-source-maps": {
-              "version": "1.2.2",
-              "bundled": true,
-              "requires": {
-                "debug": "^3.1.0",
-                "istanbul-lib-coverage": "^1.1.1",
-                "mkdirp": "^0.5.1",
-                "rimraf": "^2.6.1",
-                "source-map": "^0.5.3"
-              },
-              "dependencies": {
-                "debug": {
-                  "version": "3.1.0",
-                  "bundled": true,
-                  "requires": {
-                    "ms": "2.0.0"
-                  }
-                }
-              }
-            },
-            "istanbul-reports": {
-              "version": "1.1.3",
-              "bundled": true,
-              "requires": {
-                "handlebars": "^4.0.3"
-              }
-            },
-            "js-tokens": {
-              "version": "3.0.2",
-              "bundled": true
-            },
-            "jsesc": {
-              "version": "1.3.0",
-              "bundled": true
-            },
-            "kind-of": {
-              "version": "3.2.2",
-              "bundled": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            },
-            "lazy-cache": {
-              "version": "1.0.4",
-              "bundled": true,
-              "optional": true
-            },
-            "lcid": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "invert-kv": "^1.0.0"
-              }
-            },
-            "load-json-file": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "graceful-fs": "^4.1.2",
-                "parse-json": "^2.2.0",
-                "pify": "^2.0.0",
-                "pinkie-promise": "^2.0.0",
-                "strip-bom": "^2.0.0"
-              }
-            },
-            "locate-path": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "p-locate": "^2.0.0",
-                "path-exists": "^3.0.0"
-              },
-              "dependencies": {
-                "path-exists": {
-                  "version": "3.0.0",
-                  "bundled": true
-                }
-              }
-            },
-            "lodash": {
-              "version": "4.17.4",
-              "bundled": true
-            },
-            "longest": {
-              "version": "1.0.1",
-              "bundled": true,
-              "optional": true
-            },
-            "loose-envify": {
-              "version": "1.3.1",
-              "bundled": true,
-              "requires": {
-                "js-tokens": "^3.0.0"
-              }
-            },
-            "lru-cache": {
-              "version": "4.1.1",
-              "bundled": true,
-              "requires": {
-                "pseudomap": "^1.0.2",
-                "yallist": "^2.1.2"
-              }
-            },
-            "md5-hex": {
-              "version": "1.3.0",
-              "bundled": true,
-              "requires": {
-                "md5-o-matic": "^0.1.1"
-              }
-            },
-            "md5-o-matic": {
-              "version": "0.1.1",
-              "bundled": true
-            },
-            "mem": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "mimic-fn": "^1.0.0"
-              }
-            },
-            "merge-source-map": {
-              "version": "1.0.4",
-              "bundled": true,
-              "requires": {
-                "source-map": "^0.5.6"
-              }
-            },
-            "micromatch": {
-              "version": "2.3.11",
-              "bundled": true,
-              "requires": {
-                "arr-diff": "^2.0.0",
-                "array-unique": "^0.2.1",
-                "braces": "^1.8.2",
-                "expand-brackets": "^0.1.4",
-                "extglob": "^0.3.1",
-                "filename-regex": "^2.0.0",
-                "is-extglob": "^1.0.0",
-                "is-glob": "^2.0.1",
-                "kind-of": "^3.0.2",
-                "normalize-path": "^2.0.1",
-                "object.omit": "^2.0.0",
-                "parse-glob": "^3.0.4",
-                "regex-cache": "^0.4.2"
-              }
-            },
-            "mimic-fn": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "minimatch": {
-              "version": "3.0.4",
-              "bundled": true,
-              "requires": {
-                "brace-expansion": "^1.1.7"
-              }
-            },
-            "minimist": {
-              "version": "0.0.8",
-              "bundled": true
-            },
-            "mkdirp": {
-              "version": "0.5.1",
-              "bundled": true,
-              "requires": {
-                "minimist": "0.0.8"
-              }
-            },
-            "ms": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "normalize-package-data": {
-              "version": "2.4.0",
-              "bundled": true,
-              "requires": {
-                "hosted-git-info": "^2.1.4",
-                "is-builtin-module": "^1.0.0",
-                "semver": "2 || 3 || 4 || 5",
-                "validate-npm-package-license": "^3.0.1"
-              }
-            },
-            "normalize-path": {
-              "version": "2.1.1",
-              "bundled": true,
-              "requires": {
-                "remove-trailing-separator": "^1.0.1"
-              }
-            },
-            "npm-run-path": {
-              "version": "2.0.2",
-              "bundled": true,
-              "requires": {
-                "path-key": "^2.0.0"
-              }
-            },
-            "number-is-nan": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "object-assign": {
-              "version": "4.1.1",
-              "bundled": true
-            },
-            "object.omit": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "for-own": "^0.1.4",
-                "is-extendable": "^0.1.1"
-              }
-            },
-            "once": {
-              "version": "1.4.0",
-              "bundled": true,
-              "requires": {
-                "wrappy": "1"
-              }
-            },
-            "optimist": {
-              "version": "0.6.1",
-              "bundled": true,
-              "requires": {
-                "minimist": "~0.0.1",
-                "wordwrap": "~0.0.2"
-              }
-            },
-            "os-homedir": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "os-locale": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "execa": "^0.7.0",
-                "lcid": "^1.0.0",
-                "mem": "^1.1.0"
-              }
-            },
-            "p-finally": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "p-limit": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "p-locate": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "p-limit": "^1.1.0"
-              }
-            },
-            "parse-glob": {
-              "version": "3.0.4",
-              "bundled": true,
-              "requires": {
-                "glob-base": "^0.3.0",
-                "is-dotfile": "^1.0.0",
-                "is-extglob": "^1.0.0",
-                "is-glob": "^2.0.0"
-              }
-            },
-            "parse-json": {
-              "version": "2.2.0",
-              "bundled": true,
-              "requires": {
-                "error-ex": "^1.2.0"
-              }
-            },
-            "path-exists": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "pinkie-promise": "^2.0.0"
-              }
-            },
-            "path-is-absolute": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "path-key": {
-              "version": "2.0.1",
-              "bundled": true
-            },
-            "path-parse": {
-              "version": "1.0.5",
-              "bundled": true
-            },
-            "path-type": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "graceful-fs": "^4.1.2",
-                "pify": "^2.0.0",
-                "pinkie-promise": "^2.0.0"
-              }
-            },
-            "pify": {
-              "version": "2.3.0",
-              "bundled": true
-            },
-            "pinkie": {
-              "version": "2.0.4",
-              "bundled": true
-            },
-            "pinkie-promise": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "pinkie": "^2.0.0"
-              }
-            },
-            "pkg-dir": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "find-up": "^1.0.0"
-              },
-              "dependencies": {
-                "find-up": {
-                  "version": "1.1.2",
-                  "bundled": true,
-                  "requires": {
-                    "path-exists": "^2.0.0",
-                    "pinkie-promise": "^2.0.0"
-                  }
-                }
-              }
-            },
-            "preserve": {
-              "version": "0.2.0",
-              "bundled": true
-            },
-            "pseudomap": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "randomatic": {
-              "version": "1.1.7",
-              "bundled": true,
-              "requires": {
-                "is-number": "^3.0.0",
-                "kind-of": "^4.0.0"
-              },
-              "dependencies": {
-                "is-number": {
-                  "version": "3.0.0",
-                  "bundled": true,
-                  "requires": {
-                    "kind-of": "^3.0.2"
-                  },
-                  "dependencies": {
-                    "kind-of": {
-                      "version": "3.2.2",
-                      "bundled": true,
-                      "requires": {
-                        "is-buffer": "^1.1.5"
-                      }
-                    }
-                  }
-                },
-                "kind-of": {
-                  "version": "4.0.0",
-                  "bundled": true,
-                  "requires": {
-                    "is-buffer": "^1.1.5"
-                  }
-                }
-              }
-            },
-            "read-pkg": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "load-json-file": "^1.0.0",
-                "normalize-package-data": "^2.3.2",
-                "path-type": "^1.0.0"
-              }
-            },
-            "read-pkg-up": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "find-up": "^1.0.0",
-                "read-pkg": "^1.0.0"
-              },
-              "dependencies": {
-                "find-up": {
-                  "version": "1.1.2",
-                  "bundled": true,
-                  "requires": {
-                    "path-exists": "^2.0.0",
-                    "pinkie-promise": "^2.0.0"
-                  }
-                }
-              }
-            },
-            "regenerator-runtime": {
-              "version": "0.11.1",
-              "bundled": true
-            },
-            "regex-cache": {
-              "version": "0.4.4",
-              "bundled": true,
-              "requires": {
-                "is-equal-shallow": "^0.1.3"
-              }
-            },
-            "remove-trailing-separator": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "repeat-element": {
-              "version": "1.1.2",
-              "bundled": true
-            },
-            "repeat-string": {
-              "version": "1.6.1",
-              "bundled": true
-            },
-            "repeating": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "is-finite": "^1.0.0"
-              }
-            },
-            "require-directory": {
-              "version": "2.1.1",
-              "bundled": true
-            },
-            "require-main-filename": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "resolve-from": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "right-align": {
-              "version": "0.1.3",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "align-text": "^0.1.1"
-              }
-            },
-            "rimraf": {
-              "version": "2.6.2",
-              "bundled": true,
-              "requires": {
-                "glob": "^7.0.5"
-              }
-            },
-            "semver": {
-              "version": "5.4.1",
-              "bundled": true
-            },
-            "set-blocking": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "shebang-command": {
-              "version": "1.2.0",
-              "bundled": true,
-              "requires": {
-                "shebang-regex": "^1.0.0"
-              }
-            },
-            "shebang-regex": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "signal-exit": {
-              "version": "3.0.2",
-              "bundled": true
-            },
-            "slide": {
-              "version": "1.1.6",
-              "bundled": true
-            },
-            "source-map": {
-              "version": "0.5.7",
-              "bundled": true
-            },
-            "spawn-wrap": {
-              "version": "1.4.2",
-              "bundled": true,
-              "requires": {
-                "foreground-child": "^1.5.6",
-                "mkdirp": "^0.5.0",
-                "os-homedir": "^1.0.1",
-                "rimraf": "^2.6.2",
-                "signal-exit": "^3.0.2",
-                "which": "^1.3.0"
-              }
-            },
-            "spdx-correct": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "spdx-license-ids": "^1.0.2"
-              }
-            },
-            "spdx-expression-parse": {
-              "version": "1.0.4",
-              "bundled": true
-            },
-            "spdx-license-ids": {
-              "version": "1.2.2",
-              "bundled": true
-            },
-            "string-width": {
-              "version": "2.1.1",
-              "bundled": true,
-              "requires": {
-                "is-fullwidth-code-point": "^2.0.0",
-                "strip-ansi": "^4.0.0"
-              },
-              "dependencies": {
-                "ansi-regex": {
-                  "version": "3.0.0",
-                  "bundled": true
-                },
-                "is-fullwidth-code-point": {
-                  "version": "2.0.0",
-                  "bundled": true
-                },
-                "strip-ansi": {
-                  "version": "4.0.0",
-                  "bundled": true,
-                  "requires": {
-                    "ansi-regex": "^3.0.0"
-                  }
-                }
-              }
-            },
-            "strip-ansi": {
-              "version": "3.0.1",
-              "bundled": true,
-              "requires": {
-                "ansi-regex": "^2.0.0"
-              }
-            },
-            "strip-bom": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "is-utf8": "^0.2.0"
-              }
-            },
-            "strip-eof": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "supports-color": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "test-exclude": {
-              "version": "4.1.1",
-              "bundled": true,
-              "requires": {
-                "arrify": "^1.0.1",
-                "micromatch": "^2.3.11",
-                "object-assign": "^4.1.0",
-                "read-pkg-up": "^1.0.1",
-                "require-main-filename": "^1.0.1"
-              }
-            },
-            "to-fast-properties": {
-              "version": "1.0.3",
-              "bundled": true
-            },
-            "trim-right": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "uglify-js": {
-              "version": "2.8.29",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "source-map": "~0.5.1",
-                "uglify-to-browserify": "~1.0.0",
-                "yargs": "~3.10.0"
-              },
-              "dependencies": {
-                "yargs": {
-                  "version": "3.10.0",
-                  "bundled": true,
-                  "optional": true,
-                  "requires": {
-                    "camelcase": "^1.0.2",
-                    "cliui": "^2.1.0",
-                    "decamelize": "^1.0.0",
-                    "window-size": "0.1.0"
-                  }
-                }
-              }
-            },
-            "uglify-to-browserify": {
-              "version": "1.0.2",
-              "bundled": true,
-              "optional": true
-            },
-            "validate-npm-package-license": {
-              "version": "3.0.1",
-              "bundled": true,
-              "requires": {
-                "spdx-correct": "~1.0.0",
-                "spdx-expression-parse": "~1.0.0"
-              }
-            },
-            "which": {
-              "version": "1.3.0",
-              "bundled": true,
-              "requires": {
-                "isexe": "^2.0.0"
-              }
-            },
-            "which-module": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "window-size": {
-              "version": "0.1.0",
-              "bundled": true,
-              "optional": true
-            },
-            "wordwrap": {
-              "version": "0.0.3",
-              "bundled": true
-            },
-            "wrap-ansi": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "string-width": "^1.0.1",
-                "strip-ansi": "^3.0.1"
-              },
-              "dependencies": {
-                "string-width": {
-                  "version": "1.0.2",
-                  "bundled": true,
-                  "requires": {
-                    "code-point-at": "^1.0.0",
-                    "is-fullwidth-code-point": "^1.0.0",
-                    "strip-ansi": "^3.0.0"
-                  }
-                }
-              }
-            },
-            "wrappy": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "write-file-atomic": {
-              "version": "1.3.4",
-              "bundled": true,
-              "requires": {
-                "graceful-fs": "^4.1.11",
-                "imurmurhash": "^0.1.4",
-                "slide": "^1.1.5"
-              }
-            },
-            "y18n": {
-              "version": "3.2.1",
-              "bundled": true
-            },
-            "yallist": {
-              "version": "2.1.2",
-              "bundled": true
-            },
-            "yargs": {
-              "version": "10.0.3",
-              "bundled": true,
-              "requires": {
-                "cliui": "^3.2.0",
-                "decamelize": "^1.1.1",
-                "find-up": "^2.1.0",
-                "get-caller-file": "^1.0.1",
-                "os-locale": "^2.0.0",
-                "require-directory": "^2.1.1",
-                "require-main-filename": "^1.0.1",
-                "set-blocking": "^2.0.0",
-                "string-width": "^2.0.0",
-                "which-module": "^2.0.0",
-                "y18n": "^3.2.1",
-                "yargs-parser": "^8.0.0"
-              },
-              "dependencies": {
-                "cliui": {
-                  "version": "3.2.0",
-                  "bundled": true,
-                  "requires": {
-                    "string-width": "^1.0.1",
-                    "strip-ansi": "^3.0.1",
-                    "wrap-ansi": "^2.0.0"
-                  },
-                  "dependencies": {
-                    "string-width": {
-                      "version": "1.0.2",
-                      "bundled": true,
-                      "requires": {
-                        "code-point-at": "^1.0.0",
-                        "is-fullwidth-code-point": "^1.0.0",
-                        "strip-ansi": "^3.0.0"
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "yargs-parser": {
-              "version": "8.0.0",
-              "bundled": true,
-              "requires": {
-                "camelcase": "^4.1.0"
-              },
-              "dependencies": {
-                "camelcase": {
-                  "version": "4.1.0",
-                  "bundled": true
-                }
-              }
-            }
-          }
-        },
-        "oauth-sign": {
-          "version": "0.8.2",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-          "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
-        },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "opener": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
-          "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg="
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
-        },
-        "own-or": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz",
-          "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw="
-        },
-        "own-or-env": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.0.tgz",
-          "integrity": "sha1-nvkg/IHi5jz1nUEQElg2jPT8pPs="
-        },
-        "package": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz",
-          "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw="
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-        },
-        "pause": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
-          "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
-        },
-        "pinkie": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-          "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
-        },
-        "pinkie-promise": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-          "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-          "requires": {
-            "pinkie": "^2.0.0"
-          }
-        },
-        "pkginfo": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz",
-          "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8="
-        },
-        "process-nextick-args": {
-          "version": "1.0.7",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
-          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
-          "optional": true
-        },
-        "prompt": {
-          "version": "0.1.12",
-          "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.1.12.tgz",
-          "integrity": "sha1-0xFOT7mFrGbqo1WG3Lez+zsnv8Y=",
-          "requires": {
-            "async": "0.1.x",
-            "colors": "0.x.x",
-            "pkginfo": "0.x.x",
-            "winston": "0.5.x"
-          }
-        },
-        "pseudomap": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-          "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
-        },
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        },
-        "qs": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.1.tgz",
-          "integrity": "sha1-n2v12axsdjhOldNtFbSJgOXkrdA="
-        },
-        "range-parser": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz",
-          "integrity": "sha1-wEJ//vUcEKy6B4KkbJYC50T/Ygs="
-        },
-        "readable-stream": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
-          "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~1.0.6",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.0.3",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-          "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
-          "requires": {
-            "glob": "^7.0.5"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-          "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
-          "optional": true
-        },
-        "semver": {
-          "version": "1.0.14",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-1.0.14.tgz",
-          "integrity": "sha1-ysXi1Vpvv5WMsiCuhEBFBxx49nY="
-        },
-        "send": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.0.4.tgz",
-          "integrity": "sha1-LUz3mxifzQlhDhMCUQrJsOTd6AA=",
-          "requires": {
-            "debug": "*",
-            "fresh": "0.1.0",
-            "mime": "1.2.6",
-            "range-parser": "0.0.4"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "3.1.0",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-              "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-              "requires": {
-                "ms": "2.0.0"
-              }
-            }
-          }
-        },
-        "sigmund": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
-          "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
-        },
-        "sntp": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
-          "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        },
-        "source-map-support": {
-          "version": "0.4.18",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
-          "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
-          "requires": {
-            "source-map": "^0.5.6"
-          }
-        },
-        "sprintf-js": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-          "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-        },
-        "sshpk": {
-          "version": "1.13.1",
-          "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
-          "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
-          "requires": {
-            "asn1": "~0.2.3",
-            "assert-plus": "^1.0.0",
-            "bcrypt-pbkdf": "^1.0.0",
-            "dashdash": "^1.12.0",
-            "ecc-jsbn": "~0.1.1",
-            "getpass": "^0.1.1",
-            "jsbn": "~0.1.0",
-            "tweetnacl": "~0.14.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "stack-trace": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
-          "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
-        },
-        "stack-utils": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz",
-          "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA="
-        },
-        "string_decoder": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
-          "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "stringstream": {
-          "version": "0.0.5",
-          "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
-          "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-        },
-        "tap": {
-          "version": "11.0.1",
-          "resolved": "https://registry.npmjs.org/tap/-/tap-11.0.1.tgz",
-          "integrity": "sha512-YfrPp7FFxASC4tK4DEAKnnTxyg+J7T8kh8NiOmICNhiGvSojPAV34Ir4DDElFvnIiDEMzDP7233lw3WacFvIFQ==",
-          "requires": {
-            "bind-obj-methods": "^1.0.0",
-            "bluebird": "^3.5.1",
-            "clean-yaml-object": "^0.1.0",
-            "color-support": "^1.1.0",
-            "coveralls": "^2.13.3",
-            "foreground-child": "^1.3.3",
-            "fs-exists-cached": "^1.0.0",
-            "function-loop": "^1.0.1",
-            "glob": "^7.0.0",
-            "isexe": "^2.0.0",
-            "js-yaml": "^3.10.0",
-            "minipass": "^2.2.1",
-            "mkdirp": "^0.5.1",
-            "nyc": "^11.3.0",
-            "opener": "^1.4.1",
-            "os-homedir": "^1.0.2",
-            "own-or": "^1.0.0",
-            "own-or-env": "^1.0.0",
-            "rimraf": "^2.6.2",
-            "signal-exit": "^3.0.0",
-            "source-map-support": "^0.4.18",
-            "stack-utils": "^1.0.0",
-            "tap-mocha-reporter": "^3.0.6",
-            "tap-parser": "^7.0.0",
-            "tmatch": "^3.1.0",
-            "trivial-deferred": "^1.0.1",
-            "tsame": "^1.1.2",
-            "write-file-atomic": "^2.3.0",
-            "yapool": "^1.0.0"
-          }
-        },
-        "tap-mocha-reporter": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.6.tgz",
-          "integrity": "sha512-UImgw3etckDQCoqZIAIKcQDt0w1JLVs3v0yxLlmwvGLZl6MGFxF7JME5PElXjAoDklVDU42P3vVu5jgr37P4Yg==",
-          "requires": {
-            "color-support": "^1.1.0",
-            "debug": "^2.1.3",
-            "diff": "^1.3.2",
-            "escape-string-regexp": "^1.0.3",
-            "glob": "^7.0.5",
-            "js-yaml": "^3.3.1",
-            "readable-stream": "^2.1.5",
-            "tap-parser": "^5.1.0",
-            "unicode-length": "^1.0.0"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "2.6.9",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-              "requires": {
-                "ms": "2.0.0"
-              }
-            },
-            "tap-parser": {
-              "version": "5.4.0",
-              "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz",
-              "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==",
-              "requires": {
-                "events-to-array": "^1.0.1",
-                "js-yaml": "^3.2.7",
-                "readable-stream": "^2"
-              }
-            }
-          }
-        },
-        "tap-parser": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz",
-          "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==",
-          "requires": {
-            "events-to-array": "^1.0.1",
-            "js-yaml": "^3.2.7",
-            "minipass": "^2.2.0"
-          }
-        },
-        "temporary": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz",
-          "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=",
-          "requires": {
-            "package": ">= 1.0.0 < 1.2.0"
-          }
-        },
-        "timespan": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz",
-          "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk="
-        },
-        "tmatch": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-3.1.0.tgz",
-          "integrity": "sha512-W3MSATOCN4pVu2qFxmJLIArSifeSOFqnfx9hiUaVgOmeRoI2NbU7RNga+6G+L8ojlFeQge+ZPCclWyUpQ8UeNQ=="
-        },
-        "tough-cookie": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
-          "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
-          "requires": {
-            "punycode": "^1.4.1"
-          }
-        },
-        "trivial-deferred": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz",
-          "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM="
-        },
-        "tsame": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/tsame/-/tsame-1.1.2.tgz",
-          "integrity": "sha512-ovCs24PGjmByVPr9tSIOs/yjUX9sJl0grEmOsj9dZA/UknQkgPOKcUqM84aSCvt9awHuhc/boMzTg3BHFalxWw=="
-        },
-        "tunnel-agent": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
-          "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us="
-        },
-        "tweetnacl": {
-          "version": "0.14.5",
-          "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-          "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-          "optional": true
-        },
-        "uglify-js": {
-          "version": "1.3.5",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz",
-          "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0="
-        },
-        "underscore": {
-          "version": "1.2.4",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz",
-          "integrity": "sha1-6NpiQaoG9k3yRzuyWQuMF8hMPH4="
-        },
-        "underscore.string": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.1.1.tgz",
-          "integrity": "sha1-RYOXeZEUubZ/YDC7UnsK+uaJwGE="
-        },
-        "unicode-length": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz",
-          "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=",
-          "requires": {
-            "punycode": "^1.3.2",
-            "strip-ansi": "^3.0.1"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "optional": true
-        },
-        "verror": {
-          "version": "1.10.0",
-          "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-          "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-          "requires": {
-            "assert-plus": "^1.0.0",
-            "core-util-is": "1.0.2",
-            "extsprintf": "^1.2.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "watch": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/watch/-/watch-0.8.0.tgz",
-          "integrity": "sha1-G7DupT3v5uYh6cjGPANYAH7L28w="
-        },
-        "which": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
-          "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "winston": {
-          "version": "0.5.11",
-          "resolved": "https://registry.npmjs.org/winston/-/winston-0.5.11.tgz",
-          "integrity": "sha1-nYTq2YGkl6kt33ZhYTer72YcQU8=",
-          "requires": {
-            "async": "0.1.x",
-            "colors": "0.x.x",
-            "eyes": "0.1.x",
-            "loggly": "0.3.x >=0.3.7",
-            "pkginfo": "0.2.x",
-            "stack-trace": "0.0.x"
-          },
-          "dependencies": {
-            "pkginfo": {
-              "version": "0.2.3",
-              "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz",
-              "integrity": "sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg="
-            }
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-        },
-        "xtend": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-          "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
-        },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
-        },
-        "yapool": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz",
-          "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o="
-        }
-      }
-    },
-    "grunt-exec": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.1.tgz",
-      "integrity": "sha1-5dU6OcXzRpATBe3uXIfbDyr5mcQ="
-    },
-    "grunt-known-options": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
-      "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ=="
-    },
-    "grunt-legacy-log": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
-      "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
-      "requires": {
-        "colors": "~1.1.2",
-        "grunt-legacy-log-utils": "~2.0.0",
-        "hooker": "~0.2.3",
-        "lodash": "~4.17.5"
-      }
-    },
-    "grunt-legacy-log-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
-      "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
-      "requires": {
-        "chalk": "~2.4.1",
-        "lodash": "~4.17.10"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        }
-      }
-    },
-    "grunt-legacy-util": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz",
-      "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==",
-      "requires": {
-        "async": "~1.5.2",
-        "exit": "~0.1.1",
-        "getobject": "~0.1.0",
-        "hooker": "~0.2.3",
-        "lodash": "~4.17.10",
-        "underscore.string": "~3.3.4",
-        "which": "~1.3.0"
-      },
-      "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
-        }
-      }
-    },
-    "grunt-shell": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-2.1.0.tgz",
-      "integrity": "sha1-Q595FZ7RHmSmUaacyKPQK+v17MI=",
-      "requires": {
-        "chalk": "^1.0.0",
-        "npm-run-path": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "npm-run-path": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-          "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-          "requires": {
-            "path-key": "^2.0.0"
-          }
-        },
-        "path-key": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-        }
-      }
-    },
-    "handle-thing": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
-      "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
-    },
-    "har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
-    },
-    "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-      "requires": {
-        "ajv": "^6.5.5",
-        "har-schema": "^2.0.0"
-      }
-    },
-    "has": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
-      "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
-      "requires": {
-        "function-bind": "^1.0.2"
-      }
-    },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
-    },
-    "has-symbols": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
-      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
-    },
-    "has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "requires": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
-    },
-    "has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "hash-base": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
-      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "hash.js": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
-      "requires": {
-        "inherits": "^2.0.3",
-        "minimalistic-assert": "^1.0.1"
-      }
-    },
-    "he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
-    },
-    "hmac-drbg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-      "requires": {
-        "hash.js": "^1.0.3",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.1"
-      }
-    },
-    "hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "requires": {
-        "react-is": "^16.7.0"
-      },
-      "dependencies": {
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "homedir-polyfill": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
-      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
-      "requires": {
-        "parse-passwd": "^1.0.0"
-      }
-    },
-    "hooker": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
-      "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk="
-    },
-    "hosted-git-info": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
-      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
-      "dev": true
-    },
-    "hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
-      }
-    },
-    "html-element-map": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz",
-      "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==",
-      "dev": true,
-      "requires": {
-        "array-filter": "^1.0.0"
-      }
-    },
-    "html-encoding-sniffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
-      "dev": true,
-      "requires": {
-        "whatwg-encoding": "^1.0.1"
-      }
-    },
-    "html-entities": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
-      "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
-    },
-    "html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true
-    },
-    "html-minifier": {
-      "version": "3.5.21",
-      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
-      "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
-      "requires": {
-        "camel-case": "3.0.x",
-        "clean-css": "4.2.x",
-        "commander": "2.17.x",
-        "he": "1.2.x",
-        "param-case": "2.1.x",
-        "relateurl": "0.2.x",
-        "uglify-js": "3.4.x"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
-          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "uglify-js": {
-          "version": "3.4.10",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
-          "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
-          "requires": {
-            "commander": "~2.19.0",
-            "source-map": "~0.6.1"
-          },
-          "dependencies": {
-            "commander": {
-              "version": "2.19.0",
-              "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
-              "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
-            }
-          }
-        }
-      }
-    },
-    "html-webpack-plugin": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
-      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
-      "requires": {
-        "html-minifier": "^3.2.3",
-        "loader-utils": "^0.2.16",
-        "lodash": "^4.17.3",
-        "pretty-error": "^2.0.2",
-        "tapable": "^1.0.0",
-        "toposort": "^1.0.0",
-        "util.promisify": "1.0.0"
-      },
-      "dependencies": {
-        "loader-utils": {
-          "version": "0.2.17",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
-          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0",
-            "object-assign": "^4.0.1"
-          }
-        },
-        "tapable": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-          "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
-        }
-      }
-    },
-    "htmlparser2": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
-      "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
-      "requires": {
-        "domelementtype": "^1.3.0",
-        "domhandler": "^2.3.0",
-        "domutils": "^1.5.1",
-        "entities": "^1.1.1",
-        "inherits": "^2.0.1",
-        "readable-stream": "^3.0.6"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "1.3.0",
-          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
-          "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
-        },
-        "readable-stream": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz",
-          "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc="
-    },
-    "http-errors": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
-      "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
-      "requires": {
-        "depd": "1.1.1",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.0.3",
-        "statuses": ">= 1.3.1 < 2"
-      }
-    },
-    "http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
-      "requires": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "http-proxy-agent": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
-      "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
-      "dev": true,
-      "requires": {
-        "agent-base": "4",
-        "debug": "3.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "http-proxy-middleware": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
-      "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
-      "requires": {
-        "http-proxy": "^1.17.0",
-        "is-glob": "^4.0.0",
-        "lodash": "^4.17.11",
-        "micromatch": "^3.1.10"
-      }
-    },
-    "http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      }
-    },
-    "https-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
-    },
-    "https-proxy-agent": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz",
-      "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==",
-      "dev": true,
-      "requires": {
-        "agent-base": "^4.3.0",
-        "debug": "^3.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      }
-    },
-    "icss-utils": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
-      "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
-      "requires": {
-        "postcss": "^7.0.14"
-      }
-    },
-    "ieee754": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
-      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
-    },
-    "iferr": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
-      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
-    },
-    "ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
-    },
-    "image-size": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
-      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
-      "optional": true
-    },
-    "immediate": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
-    },
-    "import-fresh": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-      "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
-      "requires": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      }
-    },
-    "import-local": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
-      "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
-      "requires": {
-        "pkg-dir": "^3.0.0",
-        "resolve-cwd": "^2.0.0"
-      }
-    },
-    "imports-loader": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz",
-      "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==",
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "source-map": "^0.6.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
-    },
-    "indexes-of": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
-    },
-    "infer-owner": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
-      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-    },
-    "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
-    },
-    "inquirer": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
-      "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
-      "requires": {
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^3.0.0",
-        "cli-cursor": "^3.1.0",
-        "cli-width": "^2.0.0",
-        "external-editor": "^3.0.3",
-        "figures": "^3.0.0",
-        "lodash": "^4.17.15",
-        "mute-stream": "0.0.8",
-        "run-async": "^2.4.0",
-        "rxjs": "^6.5.3",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "through": "^2.3.6"
-      },
-      "dependencies": {
-        "ansi-escapes": {
-          "version": "4.3.1",
-          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
-          "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
-          "requires": {
-            "type-fest": "^0.11.0"
-          }
-        },
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
-        },
-        "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
-          "requires": {
-            "@types/color-name": "^1.1.1",
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-        },
-        "emoji-regex": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
-        },
-        "is-fullwidth-code-point": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
-        },
-        "rxjs": {
-          "version": "6.5.5",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
-          "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "string-width": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
-          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
-          "requires": {
-            "emoji-regex": "^8.0.0",
-            "is-fullwidth-code-point": "^3.0.0",
-            "strip-ansi": "^6.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "type-fest": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
-          "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
-        }
-      }
-    },
-    "internal-ip": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
-      "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
-      "requires": {
-        "default-gateway": "^4.2.0",
-        "ipaddr.js": "^1.9.0"
-      }
-    },
-    "internal-slot": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz",
-      "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==",
-      "requires": {
-        "es-abstract": "^1.17.0-next.1",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.2"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "interpret": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
-      "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
-    },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-      "requires": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
-    },
-    "ip-regex": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
-      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
-    },
-    "ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
-    },
-    "is-absolute": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
-      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
-      "requires": {
-        "is-relative": "^1.0.0",
-        "is-windows": "^1.0.1"
-      }
-    },
-    "is-absolute-url": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
-      "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="
-    },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-arguments": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
-      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
-    },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "is-binary-path": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "requires": {
-        "binary-extensions": "^1.0.0"
-      }
-    },
-    "is-boolean-object": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz",
-      "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==",
-      "dev": true
-    },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
-    },
-    "is-builtin-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
-      "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
-      "dev": true,
-      "requires": {
-        "builtin-modules": "^1.0.0"
-      }
-    },
-    "is-callable": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
-      "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI="
-    },
-    "is-ci": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-      "dev": true,
-      "requires": {
-        "ci-info": "^2.0.0"
-      }
-    },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-date-object": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
-      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
-    },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
-      "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
-        }
-      }
-    },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
-    },
-    "is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
-    },
-    "is-generator-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true
-    },
-    "is-glob": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
-      "requires": {
-        "is-extglob": "^2.1.1"
-      }
-    },
-    "is-interactive": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
-      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-      "dev": true
-    },
-    "is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-number-object": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
-      "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
-      "dev": true
-    },
-    "is-path-cwd": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
-      "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="
-    },
-    "is-path-in-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
-      "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
-      "requires": {
-        "is-path-inside": "^2.1.0"
-      }
-    },
-    "is-path-inside": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
-      "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
-      "requires": {
-        "path-is-inside": "^1.0.2"
-      }
-    },
-    "is-plain-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
-    },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "is-promise": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
-      "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
-    },
-    "is-regex": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
-      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
-      "requires": {
-        "has": "^1.0.1"
-      }
-    },
-    "is-relative": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
-      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
-      "requires": {
-        "is-unc-path": "^1.0.0"
-      }
-    },
-    "is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
-    },
-    "is-string": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
-      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
-    },
-    "is-subset": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
-      "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
-      "dev": true
-    },
-    "is-symbol": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
-      "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI="
-    },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
-    },
-    "is-unc-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
-      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
-      "requires": {
-        "unc-path-regex": "^0.1.2"
-      }
-    },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
-    },
-    "is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
-    },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
-    },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
-    },
-    "istanbul-lib-coverage": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
-      "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
-      "dev": true
-    },
-    "istanbul-lib-instrument": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
-      "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
-      "dev": true,
-      "requires": {
-        "@babel/generator": "^7.4.0",
-        "@babel/parser": "^7.4.3",
-        "@babel/template": "^7.4.0",
-        "@babel/traverse": "^7.4.3",
-        "@babel/types": "^7.4.0",
-        "istanbul-lib-coverage": "^2.0.5",
-        "semver": "^6.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
-    "istanbul-lib-report": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
-      "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
-      "dev": true,
-      "requires": {
-        "istanbul-lib-coverage": "^2.0.5",
-        "make-dir": "^2.1.0",
-        "supports-color": "^6.1.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "istanbul-lib-source-maps": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
-      "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
-      "dev": true,
-      "requires": {
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^2.0.5",
-        "make-dir": "^2.1.0",
-        "rimraf": "^2.6.3",
-        "source-map": "^0.6.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-          "dev": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "istanbul-reports": {
-      "version": "2.2.7",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz",
-      "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==",
-      "dev": true,
-      "requires": {
-        "html-escaper": "^2.0.0"
-      }
-    },
-    "jest": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
-      "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==",
-      "dev": true,
-      "requires": {
-        "import-local": "^2.0.0",
-        "jest-cli": "^24.9.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "get-caller-file": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-          "dev": true
-        },
-        "jest-cli": {
-          "version": "24.9.0",
-          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz",
-          "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==",
-          "dev": true,
-          "requires": {
-            "@jest/core": "^24.9.0",
-            "@jest/test-result": "^24.9.0",
-            "@jest/types": "^24.9.0",
-            "chalk": "^2.0.1",
-            "exit": "^0.1.2",
-            "import-local": "^2.0.0",
-            "is-ci": "^2.0.0",
-            "jest-config": "^24.9.0",
-            "jest-util": "^24.9.0",
-            "jest-validate": "^24.9.0",
-            "prompts": "^2.0.1",
-            "realpath-native": "^1.1.0",
-            "yargs": "^13.3.0"
-          }
-        },
-        "require-main-filename": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "13.3.2",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^5.0.0",
-            "find-up": "^3.0.0",
-            "get-caller-file": "^2.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^2.0.0",
-            "set-blocking": "^2.0.0",
-            "string-width": "^3.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^4.0.0",
-            "yargs-parser": "^13.1.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "13.1.2",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
-          }
-        }
-      }
-    },
-    "jest-changed-files": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz",
-      "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "execa": "^1.0.0",
-        "throat": "^4.0.0"
-      }
-    },
-    "jest-config": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz",
-      "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.1.0",
-        "@jest/test-sequencer": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "babel-jest": "^24.9.0",
-        "chalk": "^2.0.1",
-        "glob": "^7.1.1",
-        "jest-environment-jsdom": "^24.9.0",
-        "jest-environment-node": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "jest-jasmine2": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-resolve": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-validate": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "pretty-format": "^24.9.0",
-        "realpath-native": "^1.1.0"
-      }
-    },
-    "jest-diff": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz",
-      "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1",
-        "diff-sequences": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-docblock": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz",
-      "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==",
-      "dev": true,
-      "requires": {
-        "detect-newline": "^2.1.0"
-      }
-    },
-    "jest-each": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
-      "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "jest-get-type": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-environment-jsdom": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
-      "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jsdom": "^11.5.1"
-      }
-    },
-    "jest-environment-node": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz",
-      "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-util": "^24.9.0"
-      }
-    },
-    "jest-get-type": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
-      "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==",
-      "dev": true
-    },
-    "jest-haste-map": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
-      "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "anymatch": "^2.0.0",
-        "fb-watchman": "^2.0.0",
-        "fsevents": "^1.2.7",
-        "graceful-fs": "^4.1.15",
-        "invariant": "^2.2.4",
-        "jest-serializer": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "sane": "^4.0.3",
-        "walker": "^1.0.7"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "invariant": {
-          "version": "2.2.4",
-          "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-          "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-          "dev": true,
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        }
-      }
-    },
-    "jest-jasmine2": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
-      "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==",
-      "dev": true,
-      "requires": {
-        "@babel/traverse": "^7.1.0",
-        "@jest/environment": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "co": "^4.6.0",
-        "expect": "^24.9.0",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^24.9.0",
-        "jest-matcher-utils": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-snapshot": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "pretty-format": "^24.9.0",
-        "throat": "^4.0.0"
-      }
-    },
-    "jest-leak-detector": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz",
-      "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==",
-      "dev": true,
-      "requires": {
-        "jest-get-type": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-matcher-utils": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz",
-      "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1",
-        "jest-diff": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-message-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
-      "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/stack-utils": "^1.0.1",
-        "chalk": "^2.0.1",
-        "micromatch": "^3.1.10",
-        "slash": "^2.0.0",
-        "stack-utils": "^1.0.1"
-      }
-    },
-    "jest-mock": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
-      "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0"
-      }
-    },
-    "jest-pnp-resolver": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
-      "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
-      "dev": true
-    },
-    "jest-regex-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
-      "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
-      "dev": true
-    },
-    "jest-resolve": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
-      "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "browser-resolve": "^1.11.3",
-        "chalk": "^2.0.1",
-        "jest-pnp-resolver": "^1.2.1",
-        "realpath-native": "^1.1.0"
-      }
-    },
-    "jest-resolve-dependencies": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz",
-      "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-snapshot": "^24.9.0"
-      }
-    },
-    "jest-runner": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz",
-      "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.7.1",
-        "@jest/environment": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.4.2",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.1.15",
-        "jest-config": "^24.9.0",
-        "jest-docblock": "^24.3.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-jasmine2": "^24.9.0",
-        "jest-leak-detector": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-resolve": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.6.0",
-        "source-map-support": "^0.5.6",
-        "throat": "^4.0.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        }
-      }
-    },
-    "jest-runtime": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
-      "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.7.1",
-        "@jest/environment": "^24.9.0",
-        "@jest/source-map": "^24.3.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/yargs": "^13.0.0",
-        "chalk": "^2.0.1",
-        "exit": "^0.1.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.1.15",
-        "jest-config": "^24.9.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-resolve": "^24.9.0",
-        "jest-snapshot": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-validate": "^24.9.0",
-        "realpath-native": "^1.1.0",
-        "slash": "^2.0.0",
-        "strip-bom": "^3.0.0",
-        "yargs": "^13.3.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "get-caller-file": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-          "dev": true
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "require-main-filename": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "13.3.2",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^5.0.0",
-            "find-up": "^3.0.0",
-            "get-caller-file": "^2.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^2.0.0",
-            "set-blocking": "^2.0.0",
-            "string-width": "^3.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^4.0.0",
-            "yargs-parser": "^13.1.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "13.1.2",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
-          }
-        }
-      }
-    },
-    "jest-serializer": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
-      "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
-      "dev": true
-    },
-    "jest-snapshot": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz",
-      "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "expect": "^24.9.0",
-        "jest-diff": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "jest-matcher-utils": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-resolve": "^24.9.0",
-        "mkdirp": "^0.5.1",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^24.9.0",
-        "semver": "^6.2.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
-    "jest-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
-      "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/source-map": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "callsites": "^3.0.0",
-        "chalk": "^2.0.1",
-        "graceful-fs": "^4.1.15",
-        "is-ci": "^2.0.0",
-        "mkdirp": "^0.5.1",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "jest-validate": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
-      "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "camelcase": "^5.3.1",
-        "chalk": "^2.0.1",
-        "jest-get-type": "^24.9.0",
-        "leven": "^3.1.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-watcher": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz",
-      "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/yargs": "^13.0.0",
-        "ansi-escapes": "^3.0.0",
-        "chalk": "^2.0.1",
-        "jest-util": "^24.9.0",
-        "string-length": "^2.0.0"
-      }
-    },
-    "jest-worker": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
-      "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
-      "dev": true,
-      "requires": {
-        "merge-stream": "^2.0.0",
-        "supports-color": "^6.1.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "jquery": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
-      "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
-    },
-    "jquery-param-fn": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/jquery-param-fn/-/jquery-param-fn-1.0.3.tgz",
-      "integrity": "sha1-1YwyX2dBedHkgwV9Qbu4TUqs0F0="
-    },
-    "js-tokens": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
-    },
-    "js-yaml": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
-      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
-      "requires": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      }
-    },
-    "jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "optional": true
-    },
-    "jsdom": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
-      "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "acorn": "^5.5.3",
-        "acorn-globals": "^4.1.0",
-        "array-equal": "^1.0.0",
-        "cssom": ">= 0.3.2 < 0.4.0",
-        "cssstyle": "^1.0.0",
-        "data-urls": "^1.0.0",
-        "domexception": "^1.0.1",
-        "escodegen": "^1.9.1",
-        "html-encoding-sniffer": "^1.0.2",
-        "left-pad": "^1.3.0",
-        "nwsapi": "^2.0.7",
-        "parse5": "4.0.0",
-        "pn": "^1.1.0",
-        "request": "^2.87.0",
-        "request-promise-native": "^1.0.5",
-        "sax": "^1.2.4",
-        "symbol-tree": "^3.2.2",
-        "tough-cookie": "^2.3.4",
-        "w3c-hr-time": "^1.0.1",
-        "webidl-conversions": "^4.0.2",
-        "whatwg-encoding": "^1.0.3",
-        "whatwg-mimetype": "^2.1.0",
-        "whatwg-url": "^6.4.1",
-        "ws": "^5.2.0",
-        "xml-name-validator": "^3.0.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "5.7.4",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
-          "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
-          "dev": true
-        },
-        "parse5": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
-          "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
-          "dev": true
-        }
-      }
-    },
-    "jsesc": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz",
-      "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4="
-    },
-    "json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
-    },
-    "json-schema": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
-    },
-    "json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-    },
-    "json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
-    },
-    "json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
-    },
-    "json3": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
-      "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA=="
-    },
-    "json5": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
-    },
-    "jsondiffpatch": {
-      "version": "0.3.11",
-      "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.3.11.tgz",
-      "integrity": "sha512-Xi3Iygdt/BGhml6bdUFhgDki1TgOsp3hG3iiH3KtzP+CahtGcdPfKRLlnZbSw+3b1umZkhmKrqXUgUcKenyhtA==",
-      "requires": {
-        "chalk": "^2.3.0",
-        "diff-match-patch": "^1.0.0"
-      }
-    },
-    "jsprim": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-      "requires": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.2.3",
-        "verror": "1.10.0"
-      }
-    },
-    "jsx-ast-utils": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
-      "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
-      "requires": {
-        "array-includes": "^3.1.1",
-        "object.assign": "^4.1.0"
-      }
-    },
-    "just-extend": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz",
-      "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==",
-      "dev": true
-    },
-    "killable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
-      "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
-    },
-    "kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "requires": {
-        "is-buffer": "^1.1.5"
-      }
-    },
-    "kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "dev": true
-    },
-    "left-pad": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
-      "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
-      "dev": true
-    },
-    "less": {
-      "version": "3.11.3",
-      "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz",
-      "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==",
-      "requires": {
-        "clone": "^2.1.2",
-        "errno": "^0.1.1",
-        "graceful-fs": "^4.1.2",
-        "image-size": "~0.5.0",
-        "make-dir": "^2.1.0",
-        "mime": "^1.4.1",
-        "promise": "^7.1.1",
-        "request": "^2.83.0",
-        "source-map": "~0.6.0",
-        "tslib": "^1.10.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "optional": true
-        }
-      }
-    },
-    "less-loader": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz",
-      "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==",
-      "requires": {
-        "clone": "^2.1.1",
-        "loader-utils": "^1.1.0",
-        "pify": "^4.0.1"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        }
-      }
-    },
-    "leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
-    },
-    "levenary": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
-      "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
-      "requires": {
-        "leven": "^3.1.0"
-      }
-    },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      }
-    },
-    "liftoff": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
-      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
-      "requires": {
-        "extend": "^3.0.0",
-        "findup-sync": "^2.0.0",
-        "fined": "^1.0.1",
-        "flagged-respawn": "^1.0.0",
-        "is-plain-object": "^2.0.4",
-        "object.map": "^1.0.0",
-        "rechoir": "^0.6.2",
-        "resolve": "^1.1.7"
-      },
-      "dependencies": {
-        "findup-sync": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
-          "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
-          "requires": {
-            "detect-file": "^1.0.0",
-            "is-glob": "^3.1.0",
-            "micromatch": "^3.0.4",
-            "resolve-dir": "^1.0.1"
-          }
-        },
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
-    },
-    "load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "dependencies": {
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
-          }
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
-      }
-    },
-    "loader-fs-cache": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
-      "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
-      "requires": {
-        "find-cache-dir": "^0.1.1",
-        "mkdirp": "^0.5.1"
-      },
-      "dependencies": {
-        "find-cache-dir": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
-          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
-          "requires": {
-            "commondir": "^1.0.1",
-            "mkdirp": "^0.5.1",
-            "pkg-dir": "^1.0.0"
-          }
-        },
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.5",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "pkg-dir": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
-          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
-          "requires": {
-            "find-up": "^1.0.0"
-          }
-        }
-      }
-    },
-    "loader-runner": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
-      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
-    },
-    "loader-utils": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-      "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-      "requires": {
-        "big.js": "^3.1.3",
-        "emojis-list": "^2.0.0",
-        "json5": "^0.5.0"
-      }
-    },
-    "locate-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-      "requires": {
-        "p-locate": "^3.0.0",
-        "path-exists": "^3.0.0"
-      }
-    },
-    "lodash": {
-      "version": "4.17.17",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.17.tgz",
-      "integrity": "sha512-/B2DjOphAoqi5BX4Gg2oh4UR0Gy/A7xYAMh3aSECEKzwS3eCDEpS0Cals1Ktvxwlal3bBJNc+5W9kNIcADdw5Q=="
-    },
-    "lodash._arraycopy": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
-      "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=",
-      "dev": true
-    },
-    "lodash._arrayeach": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
-      "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=",
-      "dev": true
-    },
-    "lodash._baseassign": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
-      "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
-      "dev": true,
-      "requires": {
-        "lodash._basecopy": "^3.0.0",
-        "lodash.keys": "^3.0.0"
-      }
-    },
-    "lodash._baseclone": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz",
-      "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=",
-      "dev": true,
-      "requires": {
-        "lodash._arraycopy": "^3.0.0",
-        "lodash._arrayeach": "^3.0.0",
-        "lodash._baseassign": "^3.0.0",
-        "lodash._basefor": "^3.0.0",
-        "lodash.isarray": "^3.0.0",
-        "lodash.keys": "^3.0.0"
-      }
-    },
-    "lodash._basecopy": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
-      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
-      "dev": true
-    },
-    "lodash._basefor": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
-      "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=",
-      "dev": true
-    },
-    "lodash._bindcallback": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
-      "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
-      "dev": true
-    },
-    "lodash._getnative": {
-      "version": "3.9.1",
-      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
-      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
-      "dev": true
-    },
-    "lodash._isiterateecall": {
-      "version": "3.0.9",
-      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
-      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
-      "dev": true
-    },
-    "lodash.clone": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz",
-      "integrity": "sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=",
-      "dev": true,
-      "requires": {
-        "lodash._baseclone": "^3.0.0",
-        "lodash._bindcallback": "^3.0.0",
-        "lodash._isiterateecall": "^3.0.0"
-      }
-    },
-    "lodash.defaultsdeep": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
-      "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
-      "dev": true
-    },
-    "lodash.escape": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
-      "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
-      "dev": true
-    },
-    "lodash.flattendeep": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
-      "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
-      "dev": true
-    },
-    "lodash.isarguments": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
-      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
-      "dev": true
-    },
-    "lodash.isarray": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
-      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
-      "dev": true
-    },
-    "lodash.isempty": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
-      "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4="
-    },
-    "lodash.isequal": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
-      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
-      "dev": true
-    },
-    "lodash.isplainobject": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
-      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
-      "dev": true
-    },
-    "lodash.keys": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
-      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
-      "dev": true,
-      "requires": {
-        "lodash._getnative": "^3.0.0",
-        "lodash.isarguments": "^3.0.0",
-        "lodash.isarray": "^3.0.0"
-      }
-    },
-    "lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "lodash.sortby": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
-      "dev": true
-    },
-    "log-symbols": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
-      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^2.0.1"
-      }
-    },
-    "loglevel": {
-      "version": "1.6.8",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
-      "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA=="
-    },
-    "lolex": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz",
-      "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==",
-      "dev": true
-    },
-    "loose-envify": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-      "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-      "requires": {
-        "js-tokens": "^3.0.0"
-      }
-    },
-    "lower-case": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
-      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
-    },
-    "lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "requires": {
-        "yallist": "^3.0.2"
-      }
-    },
-    "make-dir": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-      "requires": {
-        "pify": "^4.0.1",
-        "semver": "^5.6.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        },
-        "semver": {
-          "version": "5.7.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
-          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
-        }
-      }
-    },
-    "make-iterator": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
-      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
-      "requires": {
-        "kind-of": "^6.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "makeerror": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
-      "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
-      "dev": true,
-      "requires": {
-        "tmpl": "1.0.x"
-      }
-    },
-    "map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
-    },
-    "map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-      "requires": {
-        "object-visit": "^1.0.0"
-      }
-    },
-    "md5.js": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        }
-      }
-    },
-    "media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
-    },
-    "memory-fs": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
-      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
-      "requires": {
-        "errno": "^0.1.3",
-        "readable-stream": "^2.0.1"
-      }
-    },
-    "merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
-    },
-    "merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
-    },
-    "methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
-    },
-    "micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "miller-rabin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
-      "requires": {
-        "bn.js": "^4.0.0",
-        "brorand": "^1.0.1"
-      }
-    },
-    "mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
-    },
-    "mime-db": {
-      "version": "1.35.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
-      "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
-    },
-    "mime-types": {
-      "version": "2.1.19",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
-      "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
-      "requires": {
-        "mime-db": "~1.35.0"
-      }
-    },
-    "min-document": {
-      "version": "2.19.0",
-      "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
-      "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
-      "dev": true,
-      "requires": {
-        "dom-walk": "^0.1.0"
-      }
-    },
-    "mini-css-extract-plugin": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz",
-      "integrity": "sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ==",
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "normalize-url": "1.9.1",
-        "schema-utils": "^1.0.0",
-        "webpack-sources": "^1.1.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.10.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
-      }
-    },
-    "minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
-    },
-    "minimalistic-crypto-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
-    },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
-    },
-    "minipass": {
-      "version": "2.3.5",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
-      "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
-      "requires": {
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.0"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
-          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
-        }
-      }
-    },
-    "mississippi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
-      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
-      "requires": {
-        "concat-stream": "^1.5.0",
-        "duplexify": "^3.4.2",
-        "end-of-stream": "^1.1.0",
-        "flush-write-stream": "^1.0.0",
-        "from2": "^2.1.0",
-        "parallel-transform": "^1.1.0",
-        "pump": "^3.0.0",
-        "pumpify": "^1.3.3",
-        "stream-each": "^1.1.0",
-        "through2": "^2.0.0"
-      }
-    },
-    "mixin-deep": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
-      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
-      "requires": {
-        "for-in": "^1.0.2",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-      "requires": {
-        "minimist": "^1.2.5"
-      }
-    },
-    "mkpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-1.0.0.tgz",
-      "integrity": "sha1-67Opd+evHGg65v2hK1Raa6bFhT0=",
-      "dev": true
-    },
-    "mocha": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz",
-      "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "ansi-colors": "3.2.3",
-        "browser-stdout": "1.3.1",
-        "debug": "3.2.6",
-        "diff": "3.5.0",
-        "escape-string-regexp": "1.0.5",
-        "find-up": "3.0.0",
-        "glob": "7.1.3",
-        "growl": "1.10.5",
-        "he": "1.2.0",
-        "js-yaml": "3.13.1",
-        "log-symbols": "2.2.0",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.4",
-        "ms": "2.1.1",
-        "node-environment-flags": "1.0.5",
-        "object.assign": "4.1.0",
-        "strip-json-comments": "2.0.1",
-        "supports-color": "6.0.0",
-        "which": "1.3.1",
-        "wide-align": "1.1.3",
-        "yargs": "13.3.2",
-        "yargs-parser": "13.1.2",
-        "yargs-unparser": "1.6.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
-          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.4",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
-          "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-          "dev": true,
-          "optional": true
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
-          "dev": true,
-          "optional": true
-        },
-        "supports-color": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
-          "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
-      }
-    },
-    "mock-local-storage": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.12.tgz",
-      "integrity": "sha512-LBxvtbUE384RV+rQbeklJ/Ii08qmDpod65XkcnFybZD9o4YaT1CBwk77kjtCQxi4CKzjqr5dStUuy2KynOQvNg==",
-      "dev": true,
-      "requires": {
-        "core-js": "^0.8.3",
-        "global": "^4.3.2"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "0.8.4",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-0.8.4.tgz",
-          "integrity": "sha1-wiZl8eDRucPF4bCNq9HxCGleT88=",
-          "dev": true
-        }
-      }
-    },
-    "moment": {
-      "version": "2.27.0",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
-      "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ=="
-    },
-    "moo": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz",
-      "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==",
-      "dev": true
-    },
-    "move-concurrently": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
-      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
-      "requires": {
-        "aproba": "^1.1.1",
-        "copy-concurrently": "^1.0.0",
-        "fs-write-stream-atomic": "^1.0.8",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.3"
-      }
-    },
-    "ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-    },
-    "multicast-dns": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
-      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
-      "requires": {
-        "dns-packet": "^1.3.1",
-        "thunky": "^1.0.2"
-      }
-    },
-    "multicast-dns-service-types": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
-    },
-    "mute-stream": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
-    },
-    "nan": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
-      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
-      "optional": true
-    },
-    "nano": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/nano/-/nano-8.0.1.tgz",
-      "integrity": "sha512-q9q8894oLNyWHhsUjF4Nk9gAvGorsCrmx0aeA7AG9pYRnM+xtAKVX5GtWfW8c2qx4mJftXHeN1/6RR8Oo9eQaQ==",
-      "requires": {
-        "@types/request": "^2.47.1",
-        "cloudant-follow": "^0.18.0",
-        "debug": "^2.2.0",
-        "errs": "^0.3.2",
-        "request": "^2.85.0"
-      },
-      "dependencies": {
-        "aws4": {
-          "version": "1.9.1",
-          "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-          "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
-        },
-        "cloudant-follow": {
-          "version": "0.18.2",
-          "resolved": "https://registry.npmjs.org/cloudant-follow/-/cloudant-follow-0.18.2.tgz",
-          "integrity": "sha512-qu/AmKxDqJds+UmT77+0NbM7Yab2K3w0qSeJRzsq5dRWJTEJdWeb+XpG4OpKuTE9RKOa/Awn2gR3TTnvNr3TeA==",
-          "requires": {
-            "browser-request": "~0.3.0",
-            "debug": "^4.0.1",
-            "request": "^2.88.0"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "4.1.1",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-              "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-              "requires": {
-                "ms": "^2.1.1"
-              }
-            },
-            "request": {
-              "version": "2.88.2",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-              "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-              "requires": {
-                "aws-sign2": "~0.7.0",
-                "aws4": "^1.8.0",
-                "caseless": "~0.12.0",
-                "combined-stream": "~1.0.6",
-                "extend": "~3.0.2",
-                "forever-agent": "~0.6.1",
-                "form-data": "~2.3.2",
-                "har-validator": "~5.1.3",
-                "http-signature": "~1.2.0",
-                "is-typedarray": "~1.0.0",
-                "isstream": "~0.1.2",
-                "json-stringify-safe": "~5.0.1",
-                "mime-types": "~2.1.19",
-                "oauth-sign": "~0.9.0",
-                "performance-now": "^2.1.0",
-                "qs": "~6.5.2",
-                "safe-buffer": "^5.1.2",
-                "tough-cookie": "~2.5.0",
-                "tunnel-agent": "^0.6.0",
-                "uuid": "^3.3.2"
-              }
-            }
-          }
-        },
-        "har-validator": {
-          "version": "5.1.3",
-          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-          "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-          "requires": {
-            "ajv": "^6.5.5",
-            "har-schema": "^2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "oauth-sign": {
-          "version": "0.9.0",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-          "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
-        },
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        },
-        "uuid": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
-        }
-      }
-    },
-    "nanomatch": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "fragment-cache": "^0.2.1",
-        "is-windows": "^1.0.2",
-        "kind-of": "^6.0.2",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
-    },
-    "nearley": {
-      "version": "2.19.4",
-      "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.4.tgz",
-      "integrity": "sha512-oqj3m4oqwKsN77pETa9IPvxHHHLW68KrDc2KYoWMUOhDlrNUo7finubwffQMBRnwNCOXc4kRxCZO0Rvx4L6Zrw==",
-      "dev": true,
-      "requires": {
-        "commander": "^2.19.0",
-        "moo": "^0.5.0",
-        "railroad-diagrams": "^1.0.0",
-        "randexp": "0.4.6",
-        "semver": "^5.4.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-          "dev": true
-        }
-      }
-    },
-    "negotiator": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
-      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
-    },
-    "neo-async": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
-      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
-    },
-    "netmask": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
-      "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
-      "dev": true
-    },
-    "nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
-    },
-    "nightwatch": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-1.3.6.tgz",
-      "integrity": "sha512-61kz2mw3Ng8Rrs2CDZv6aVB+bW+oNIFXL543L9kOvOqft3zVh2j08W8ww6BxGDzmWZe1HGRXNEI5U8+I4hO4KA==",
-      "dev": true,
-      "requires": {
-        "assertion-error": "^1.1.0",
-        "chai-nightwatch": "^0.4.0",
-        "ci-info": "^2.0.0",
-        "dotenv": "7.0.0",
-        "ejs": "^2.7.4",
-        "envinfo": "^7.5.1",
-        "lodash.clone": "3.0.3",
-        "lodash.defaultsdeep": "^4.6.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "3.0.4",
-        "minimist": "^1.2.5",
-        "mkpath": "1.0.0",
-        "mocha": "^6.2.2",
-        "ora": "^4.0.3",
-        "proxy-agent": "^3.1.1",
-        "request": "^2.88.2",
-        "request-promise": "^4.2.5",
-        "semver": "^6.3.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        }
-      }
-    },
-    "nise": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
-      "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/formatio": "^3.2.1",
-        "@sinonjs/text-encoding": "^0.7.1",
-        "just-extend": "^4.0.2",
-        "lolex": "^5.0.1",
-        "path-to-regexp": "^1.7.0"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        },
-        "lolex": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
-          "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
-          "dev": true,
-          "requires": {
-            "@sinonjs/commons": "^1.7.0"
-          }
-        },
-        "path-to-regexp": {
-          "version": "1.8.0",
-          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
-          "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
-          "dev": true,
-          "requires": {
-            "isarray": "0.0.1"
-          }
-        }
-      }
-    },
-    "no-case": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
-      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
-      "requires": {
-        "lower-case": "^1.1.1"
-      }
-    },
-    "node-environment-flags": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
-      "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "object.getownpropertydescriptors": "^2.0.3",
-        "semver": "^5.7.0"
-      }
-    },
-    "node-fetch": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
-      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
-      "dev": true
-    },
-    "node-forge": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
-      "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ=="
-    },
-    "node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
-      "dev": true
-    },
-    "node-libs-browser": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
-      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
-      "requires": {
-        "assert": "^1.1.1",
-        "browserify-zlib": "^0.2.0",
-        "buffer": "^4.3.0",
-        "console-browserify": "^1.1.0",
-        "constants-browserify": "^1.0.0",
-        "crypto-browserify": "^3.11.0",
-        "domain-browser": "^1.1.1",
-        "events": "^3.0.0",
-        "https-browserify": "^1.0.0",
-        "os-browserify": "^0.3.0",
-        "path-browserify": "0.0.1",
-        "process": "^0.11.10",
-        "punycode": "^1.2.4",
-        "querystring-es3": "^0.2.0",
-        "readable-stream": "^2.3.3",
-        "stream-browserify": "^2.0.1",
-        "stream-http": "^2.7.2",
-        "string_decoder": "^1.0.0",
-        "timers-browserify": "^2.0.4",
-        "tty-browserify": "0.0.0",
-        "url": "^0.11.0",
-        "util": "^0.11.0",
-        "vm-browserify": "^1.0.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        },
-        "url": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-          "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-          "requires": {
-            "punycode": "1.3.2",
-            "querystring": "0.2.0"
-          },
-          "dependencies": {
-            "punycode": {
-              "version": "1.3.2",
-              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-              "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
-            }
-          }
-        }
-      }
-    },
-    "node-modules-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
-      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
-    },
-    "node-notifier": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
-      "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
-      "dev": true,
-      "requires": {
-        "growly": "^1.3.0",
-        "is-wsl": "^1.1.0",
-        "semver": "^5.5.0",
-        "shellwords": "^0.1.1",
-        "which": "^1.3.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        }
-      }
-    },
-    "node-releases": {
-      "version": "1.1.59",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz",
-      "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw=="
-    },
-    "nopt": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-      "requires": {
-        "abbrev": "1"
-      }
-    },
-    "normalize-package-data": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
-      "dev": true,
-      "requires": {
-        "hosted-git-info": "^2.1.4",
-        "is-builtin-module": "^1.0.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "requires": {
-        "remove-trailing-separator": "^1.0.1"
-      }
-    },
-    "normalize-url": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
-      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
-      "requires": {
-        "object-assign": "^4.0.1",
-        "prepend-http": "^1.0.0",
-        "query-string": "^4.1.0",
-        "sort-keys": "^1.0.0"
-      }
-    },
-    "npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "requires": {
-        "path-key": "^2.0.0"
-      }
-    },
-    "nth-check": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
-      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
-      "requires": {
-        "boolbase": "~1.0.0"
-      }
-    },
-    "nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
-      "dev": true
-    },
-    "oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
-    },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
-    },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "requires": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "object-hash": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
-    },
-    "object-inspect": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
-      "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
-    },
-    "object-is": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
-      "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "object-keys": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
-      "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
-    },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "requires": {
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
-      }
-    },
-    "object.defaults": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
-      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
-      "requires": {
-        "array-each": "^1.0.1",
-        "array-slice": "^1.0.0",
-        "for-own": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.entries": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz",
-      "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "object.fromentries": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
-      "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "object.getownpropertydescriptors": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
-      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.5.1"
-      }
-    },
-    "object.map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
-      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
-      "requires": {
-        "for-own": "^1.0.0",
-        "make-iterator": "^1.0.0"
-      }
-    },
-    "object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "object.values": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
-      "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
-    },
-    "on-finished": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-      "requires": {
-        "ee-first": "1.1.1"
-      }
-    },
-    "on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "onetime": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
-      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
-      "requires": {
-        "mimic-fn": "^2.1.0"
-      },
-      "dependencies": {
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
-        }
-      }
-    },
-    "opn": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
-      "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
-      "requires": {
-        "is-wsl": "^1.1.0"
-      }
-    },
-    "optimist": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
-      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
-      "requires": {
-        "minimist": "~0.0.1",
-        "wordwrap": "~0.0.2"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
-          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
-        },
-        "wordwrap": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
-        }
-      }
-    },
-    "optionator": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
-      "dev": true,
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.4",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "wordwrap": "~1.0.0"
-      }
-    },
-    "ora": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz",
-      "integrity": "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==",
-      "dev": true,
-      "requires": {
-        "chalk": "^3.0.0",
-        "cli-cursor": "^3.1.0",
-        "cli-spinners": "^2.2.0",
-        "is-interactive": "^1.0.0",
-        "log-symbols": "^3.0.0",
-        "mute-stream": "0.0.8",
-        "strip-ansi": "^6.0.0",
-        "wcwidth": "^1.0.1"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
-          "dev": true,
-          "requires": {
-            "@types/color-name": "^1.1.1",
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
-        },
-        "log-symbols": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
-          "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2"
-          },
-          "dependencies": {
-            "ansi-styles": {
-              "version": "3.2.1",
-              "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-              "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-              "dev": true,
-              "requires": {
-                "color-convert": "^1.9.0"
-              }
-            },
-            "chalk": {
-              "version": "2.4.2",
-              "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-              "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-              "dev": true,
-              "requires": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-              }
-            },
-            "color-convert": {
-              "version": "1.9.3",
-              "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-              "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-              "dev": true,
-              "requires": {
-                "color-name": "1.1.3"
-              }
-            },
-            "color-name": {
-              "version": "1.1.3",
-              "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-              "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-              "dev": true
-            },
-            "has-flag": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-              "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-              "dev": true
-            },
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "dev": true,
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
-          }
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
-    "original": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
-      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
-      "requires": {
-        "url-parse": "^1.4.3"
-      }
-    },
-    "os-browserify": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
-    },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
-    "p-each-series": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
-      "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
-      "dev": true,
-      "requires": {
-        "p-reduce": "^1.0.0"
-      }
-    },
-    "p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
-    },
-    "p-limit": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
-      "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
-      "requires": {
-        "p-try": "^2.0.0"
-      }
-    },
-    "p-locate": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-      "requires": {
-        "p-limit": "^2.0.0"
-      }
-    },
-    "p-map": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
-      "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
-    },
-    "p-reduce": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
-      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
-      "dev": true
-    },
-    "p-retry": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
-      "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
-      "requires": {
-        "retry": "^0.12.0"
-      }
-    },
-    "p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-    },
-    "pac-proxy-agent": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz",
-      "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==",
-      "dev": true,
-      "requires": {
-        "agent-base": "^4.2.0",
-        "debug": "^4.1.1",
-        "get-uri": "^2.0.0",
-        "http-proxy-agent": "^2.1.0",
-        "https-proxy-agent": "^3.0.0",
-        "pac-resolver": "^3.0.0",
-        "raw-body": "^2.2.0",
-        "socks-proxy-agent": "^4.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "pac-resolver": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz",
-      "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==",
-      "dev": true,
-      "requires": {
-        "co": "^4.6.0",
-        "degenerator": "^1.0.4",
-        "ip": "^1.1.5",
-        "netmask": "^1.0.6",
-        "thunkify": "^2.1.2"
-      }
-    },
-    "pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
-    },
-    "parallel-transform": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
-      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
-      "requires": {
-        "cyclist": "^1.0.1",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.1.5"
-      }
-    },
-    "param-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
-      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
-      "requires": {
-        "no-case": "^2.2.0"
-      }
-    },
-    "parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "requires": {
-        "callsites": "^3.0.0"
-      }
-    },
-    "parse-asn1": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
-      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
-      "requires": {
-        "asn1.js": "^4.0.0",
-        "browserify-aes": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.0",
-        "pbkdf2": "^3.0.3",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "parse-filepath": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
-      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
-      "requires": {
-        "is-absolute": "^1.0.0",
-        "map-cache": "^0.2.0",
-        "path-root": "^0.1.1"
-      }
-    },
-    "parse-passwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
-      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
-    },
-    "parse5": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
-      "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "parseurl": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
-      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
-    },
-    "path-browserify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
-    },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
-    },
-    "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-    },
-    "path-is-inside": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
-    },
-    "path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
-    },
-    "path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
-    },
-    "path-root": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
-      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
-      "requires": {
-        "path-root-regex": "^0.1.0"
-      }
-    },
-    "path-root-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
-      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
-    },
-    "path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
-    },
-    "path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-      "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
-      }
-    },
-    "pbkdf2": {
-      "version": "3.0.17",
-      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
-      "requires": {
-        "create-hash": "^1.1.2",
-        "create-hmac": "^1.1.4",
-        "ripemd160": "^2.0.1",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-    },
-    "pify": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-    },
-    "pinkie": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
-    },
-    "pinkie-promise": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "requires": {
-        "pinkie": "^2.0.0"
-      }
-    },
-    "pirates": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
-      "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
-      "requires": {
-        "node-modules-regexp": "^1.0.0"
-      }
-    },
-    "pkg-dir": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-      "requires": {
-        "find-up": "^3.0.0"
-      }
-    },
-    "pn": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
-      "dev": true
-    },
-    "portfinder": {
-      "version": "1.0.26",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
-      "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
-      "requires": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.1"
-      },
-      "dependencies": {
-        "async": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
-          "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
-          "requires": {
-            "lodash": "^4.17.14"
-          }
-        },
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
-    },
-    "postcss": {
-      "version": "7.0.32",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-      "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-      "requires": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-modules-extract-imports": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
-      "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
-      "requires": {
-        "postcss": "^7.0.5"
-      }
-    },
-    "postcss-modules-local-by-default": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
-      "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
-      "requires": {
-        "icss-utils": "^4.1.1",
-        "postcss": "^7.0.16",
-        "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.0.0"
-      }
-    },
-    "postcss-modules-scope": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
-      "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
-      "requires": {
-        "postcss": "^7.0.6",
-        "postcss-selector-parser": "^6.0.0"
-      }
-    },
-    "postcss-modules-values": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
-      "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
-      "requires": {
-        "icss-utils": "^4.0.0",
-        "postcss": "^7.0.6"
-      }
-    },
-    "postcss-selector-parser": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
-      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
-      "requires": {
-        "cssesc": "^3.0.0",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      }
-    },
-    "postcss-value-parser": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-      "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
-    },
-    "pouchdb-adapter-http": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-adapter-http/-/pouchdb-adapter-http-7.2.1.tgz",
-      "integrity": "sha512-+JAoRkqPLneyrOj7oLCnGKtE+aei8mBiN4Id3bWxmSSBOKCoTDDO4iLAsqOEQGqd2fe1qujh0zFhjeJgg2UMPA==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "pouchdb-binary-utils": "7.2.1",
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-fetch": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      }
-    },
-    "pouchdb-binary-utils": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.2.1.tgz",
-      "integrity": "sha512-kbzOOYti/3d8s2bQY5EfJVd7c9E84q4oEpr1M8fOOHKnINZFteKkZQywD4roblUnew0Obyhvozif4LAr3CMZFg==",
-      "requires": {
-        "buffer-from": "1.1.0"
-      },
-      "dependencies": {
-        "buffer-from": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
-          "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="
-        }
-      }
-    },
-    "pouchdb-changes-filter": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-changes-filter/-/pouchdb-changes-filter-7.2.1.tgz",
-      "integrity": "sha512-cXrkDSIqgG3WniIHac97OzFDHnN00RL26X9t0RoTCZo7s3wZ8lCunIPWaZLu5GoaueLzkKqyaBTNISe6wK0AhQ==",
-      "requires": {
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-selector-core": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      }
-    },
-    "pouchdb-collate": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.2.1.tgz",
-      "integrity": "sha512-vE1wGPOSJy1QLpHG4Jo6c7/Fronc5zEwILP6vMw/tY3BbpRHKVFKcbdf7g1FICR1mb8WPqkSwzlQbniuNMYMGQ=="
-    },
-    "pouchdb-collections": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.2.1.tgz",
-      "integrity": "sha512-cqe3GY3wDq2j59tnh+5ZV0bZj1O+YWiBz4qM7HEcgrEXnc29ADvXXPp71tmcpZUCR39bzLKyYtadAQu7FpOeOA=="
-    },
-    "pouchdb-core": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-core/-/pouchdb-core-7.2.1.tgz",
-      "integrity": "sha512-YY5OJEfrLPb9eCuPmemYcFnDMVKvk3sTaROzRu3crrhN9WD0wWbVpYgRj5KleW1O9kMqfYHxi2NQ6xv9vocGRA==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "inherits": "2.0.4",
-        "pouchdb-changes-filter": "7.2.1",
-        "pouchdb-collections": "7.2.1",
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-fetch": "7.2.1",
-        "pouchdb-merge": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        }
-      }
-    },
-    "pouchdb-errors": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.2.1.tgz",
-      "integrity": "sha512-/tBP+eWY6a62UoZnJ6JJlNmbNpNS5FgVimkqwLMrFQkXpbJlhshYDeJ5PHR0W3Rlfc54GMZC7m4KhJt9kG/CkA==",
-      "requires": {
-        "inherits": "2.0.4"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        }
-      }
-    },
-    "pouchdb-fetch": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.2.1.tgz",
-      "integrity": "sha512-5P77dwl5qF6GLZk36N65RNIsCwcNX79NSmQJnnbx9KGSH2R9yuvADqPCUSAYanX0+YDWizv3BBC/0V/oe8qSGQ==",
-      "requires": {
-        "abort-controller": "3.0.0",
-        "fetch-cookie": "0.7.3",
-        "node-fetch": "2.4.1"
-      },
-      "dependencies": {
-        "node-fetch": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.4.1.tgz",
-          "integrity": "sha512-P9UbpFK87NyqBZzUuDBDz4f6Yiys8xm8j7ACDbi6usvFm6KItklQUKjeoqTrYS/S1k6I8oaOC2YLLDr/gg26Mw=="
-        }
-      }
-    },
-    "pouchdb-md5": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.2.1.tgz",
-      "integrity": "sha512-TJqGtNguctPiSai5b4+oTPi9oOcxSbNolkUtxRBxklf8kw+PNsDUi1H0DIFmA57n0qHCU19PXdbEVYlUhv/PAA==",
-      "requires": {
-        "pouchdb-binary-utils": "7.2.1",
-        "spark-md5": "3.0.0"
-      }
-    },
-    "pouchdb-merge": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.2.1.tgz",
-      "integrity": "sha512-TgxXPw1sZERwihoWSzLIdvn5MP1YKhYNaB0UuvYjboK+WUpCLh5WEeNTJi6WwUD9Yoc66QxP9D3qmfNEjd1BHQ=="
-    },
-    "pouchdb-selector-core": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.2.1.tgz",
-      "integrity": "sha512-omD/dSQIQjS0SIBCKJiACeoaPjJek+iDvQEUoTd51SjQR9aRGdKxkEO0+9qN1DJcf+mL4T/eSYYjqdeRwJ4L1A==",
-      "requires": {
-        "pouchdb-collate": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      }
-    },
-    "pouchdb-utils": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.2.1.tgz",
-      "integrity": "sha512-ZInfRpKtJ2HwLz2Dv3NEona9khvGud0rWzvQGwUs1zoaOoSB5XxK3ui5s5fLpBrONgz0WcTB49msOUq4oAUzFg==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "clone-buffer": "1.0.0",
-        "immediate": "3.0.6",
-        "inherits": "2.0.4",
-        "pouchdb-collections": "7.2.1",
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-md5": "7.2.1",
-        "uuid": "3.3.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "uuid": {
-          "version": "3.3.3",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
-          "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
-        }
-      }
-    },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
-    },
-    "prepend-http": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
-    },
-    "pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
-      "requires": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
-      }
-    },
-    "pretty-format": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
-      "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "ansi-regex": "^4.0.0",
-        "ansi-styles": "^3.2.0",
-        "react-is": "^16.8.4"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-          "dev": true
-        }
-      }
-    },
-    "process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
-    },
-    "process-nextick-args": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-      "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
-    },
-    "progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
-    },
-    "promise": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
-      "optional": true,
-      "requires": {
-        "asap": "~2.0.3"
-      }
-    },
-    "promise-inflight": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
-    },
-    "prompts": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz",
-      "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==",
-      "dev": true,
-      "requires": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.4"
-      }
-    },
-    "prop-types": {
-      "version": "15.7.2",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.8.1"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "prop-types-exact": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
-      "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3",
-        "object.assign": "^4.1.0",
-        "reflect.ownkeys": "^0.2.0"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "proxy-addr": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
-      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
-      "requires": {
-        "forwarded": "~0.1.2",
-        "ipaddr.js": "1.9.1"
-      }
-    },
-    "proxy-agent": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz",
-      "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==",
-      "dev": true,
-      "requires": {
-        "agent-base": "^4.2.0",
-        "debug": "4",
-        "http-proxy-agent": "^2.1.0",
-        "https-proxy-agent": "^3.0.0",
-        "lru-cache": "^5.1.1",
-        "pac-proxy-agent": "^3.0.1",
-        "proxy-from-env": "^1.0.0",
-        "socks-proxy-agent": "^4.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "proxy-from-env": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
-      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
-      "dev": true
-    },
-    "prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
-    },
-    "psl": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
-    },
-    "public-encrypt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "parse-asn1": "^5.0.0",
-        "randombytes": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        }
-      }
-    },
-    "pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "pumpify": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
-      "requires": {
-        "duplexify": "^3.6.0",
-        "inherits": "^2.0.3",
-        "pump": "^2.0.0"
-      },
-      "dependencies": {
-        "pump": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-          "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
-          }
-        }
-      }
-    },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-    },
-    "qs": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
-    },
-    "query-string": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
-      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
-      "requires": {
-        "object-assign": "^4.1.0",
-        "strict-uri-encode": "^1.0.0"
-      }
-    },
-    "querystring": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
-    },
-    "querystring-es3": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
-    },
-    "querystringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
-      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
-    },
-    "raf": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
-      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
-      "requires": {
-        "performance-now": "^2.1.0"
-      }
-    },
-    "railroad-diagrams": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
-      "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
-      "dev": true
-    },
-    "randexp": {
-      "version": "0.4.6",
-      "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
-      "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
-      "dev": true,
-      "requires": {
-        "discontinuous-range": "1.0.0",
-        "ret": "~0.1.10"
-      }
-    },
-    "randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-      "requires": {
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "randomfill": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
-      "requires": {
-        "randombytes": "^2.0.5",
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "range-parser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
-      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
-    },
-    "raw-body": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
-      "requires": {
-        "bytes": "3.1.0",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "http-errors": {
-          "version": "1.7.2",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-          "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "rc-align": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.1.tgz",
-      "integrity": "sha512-RQ5Fhxl0LW+zsxbY8dxAcpXdaHkHH2jzRSSpvBTS7G9LMK3T+WRcn4ovjg/eqAESM6TdTx0hfqWF2S1pO75jxQ==",
-      "requires": {
-        "@babel/runtime": "^7.10.1",
-        "classnames": "2.x",
-        "dom-align": "^1.7.0",
-        "rc-util": "^5.0.1",
-        "resize-observer-polyfill": "^1.5.1"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
-          "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "rc-animate": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz",
-      "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==",
-      "requires": {
-        "@ant-design/css-animation": "^1.7.2",
-        "classnames": "^2.2.6",
-        "raf": "^3.4.0",
-        "rc-util": "^5.0.1"
-      },
-      "dependencies": {
-        "classnames": {
-          "version": "2.2.6",
-          "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-          "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        }
-      }
-    },
-    "rc-slider": {
-      "version": "9.3.1",
-      "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.3.1.tgz",
-      "integrity": "sha512-c52PWPyrfJWh28K6dixAm0906L3/4MUIxqrNQA4TLnC/Z+cBNycWJUZoJerpwSOE1HdM3XDwixCsmtFc/7aWlQ==",
-      "requires": {
-        "@babel/runtime": "^7.10.1",
-        "classnames": "^2.2.5",
-        "rc-tooltip": "^4.0.0",
-        "rc-util": "^5.0.0",
-        "shallowequal": "^1.1.0"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
-          "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "rc-tooltip": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-4.2.1.tgz",
-      "integrity": "sha512-oykuaGsHg7RFvPUaxUpxo7ScEqtH61C66x4JUmjlFlSS8gSx2L8JFtfwM1D68SLBxUqGqJObtxj4TED75gQTiA==",
-      "requires": {
-        "rc-trigger": "^4.2.1"
-      }
-    },
-    "rc-trigger": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.3.0.tgz",
-      "integrity": "sha512-jnGNzosXmDdivMBjPCYe/AfOXTpJU2/xQ9XukgoXDQEoZq/9lcI1r7eUIfq70WlWpLxlUEqQktiV3hwyy6Nw9g==",
-      "requires": {
-        "@babel/runtime": "^7.10.1",
-        "classnames": "^2.2.6",
-        "raf": "^3.4.1",
-        "rc-align": "^4.0.0",
-        "rc-animate": "^3.0.0",
-        "rc-util": "^5.0.1"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
-          "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "classnames": {
-          "version": "2.2.6",
-          "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-          "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        },
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "rc-util": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.0.5.tgz",
-      "integrity": "sha512-zLIdNm6qz+hQbB5T1fmzHFFgPuRl3uB2eS2iLR/mewUWvgC3l7NzRYRVlHoCEEFVUkKEEsHuJXG1J52FInl5lA==",
-      "requires": {
-        "react-is": "^16.12.0",
-        "shallowequal": "^1.1.0"
-      },
-      "dependencies": {
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
-      "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2"
-      },
-      "dependencies": {
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          },
-          "dependencies": {
-            "loose-envify": {
-              "version": "1.4.0",
-              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-              "requires": {
-                "js-tokens": "^3.0.0 || ^4.0.0"
-              }
-            }
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react-bootstrap": {
-      "version": "0.31.5",
-      "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.31.5.tgz",
-      "integrity": "sha512-xgDihgX4QvYHmHzL87faDBMDnGfYyqcrqV0TEbWY+JizePOG1vfb8M3xJN+6MJ3kUYqDtQSZ7v/Q6Y5YDrkMdA==",
-      "requires": {
-        "babel-runtime": "^6.11.6",
-        "classnames": "^2.2.5",
-        "dom-helpers": "^3.2.0",
-        "invariant": "^2.2.1",
-        "keycode": "^2.1.2",
-        "prop-types": "^15.5.10",
-        "prop-types-extra": "^1.0.1",
-        "react-overlays": "^0.7.4",
-        "uncontrollable": "^4.1.0",
-        "warning": "^3.0.0"
-      },
-      "dependencies": {
-        "babel-runtime": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-          "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-          "requires": {
-            "core-js": "^2.4.0",
-            "regenerator-runtime": "^0.11.0"
-          }
-        },
-        "dom-helpers": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
-          "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
-        },
-        "invariant": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
-          "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
-        },
-        "keycode": {
-          "version": "2.1.9",
-          "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz",
-          "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo="
-        },
-        "loose-envify": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-          "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-          "requires": {
-            "js-tokens": "^3.0.0"
-          }
-        },
-        "prop-types-extra": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.0.1.tgz",
-          "integrity": "sha1-pXvUgQ6C0no/9DF+zBtK0AX3moI=",
-          "requires": {
-            "warning": "^3.0.0"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
-        },
-        "uncontrollable": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-4.1.0.tgz",
-          "integrity": "sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak=",
-          "requires": {
-            "invariant": "^2.1.0"
-          }
-        },
-        "warning": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
-          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        }
-      }
-    },
-    "react-dom": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
-      "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "scheduler": "^0.19.1"
-      },
-      "dependencies": {
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          },
-          "dependencies": {
-            "loose-envify": {
-              "version": "1.4.0",
-              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-              "requires": {
-                "js-tokens": "^3.0.0 || ^4.0.0"
-              }
-            }
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        },
-        "scheduler": {
-          "version": "0.19.1",
-          "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
-          "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
-          "requires": {
-            "loose-envify": "^1.1.0",
-            "object-assign": "^4.1.1"
-          }
-        }
-      }
-    },
-    "react-input-autosize": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.2.tgz",
-      "integrity": "sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw==",
-      "requires": {
-        "prop-types": "^15.5.8"
-      }
-    },
-    "react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-      "dev": true
-    },
-    "react-motion": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz",
-      "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==",
-      "requires": {
-        "performance-now": "^0.2.0",
-        "prop-types": "^15.5.8",
-        "raf": "^3.1.0"
-      },
-      "dependencies": {
-        "performance-now": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
-          "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU="
-        },
-        "raf": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
-          "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==",
-          "requires": {
-            "performance-now": "^2.1.0"
-          },
-          "dependencies": {
-            "performance-now": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-              "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-            }
-          }
-        }
-      }
-    },
-    "react-overlays": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.7.4.tgz",
-      "integrity": "sha512-7vsooMx3siLAuEfTs8FYeP/lAORWWFXTO8PON3KgX0Htq1Oa+po6ioSjGyO0/GO5CVSMNhpWt6V2opeexHgBuQ==",
-      "requires": {
-        "classnames": "^2.2.5",
-        "dom-helpers": "^3.2.1",
-        "prop-types": "^15.5.10",
-        "prop-types-extra": "^1.0.1",
-        "warning": "^3.0.0"
-      },
-      "dependencies": {
-        "dom-helpers": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
-          "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
-        },
-        "loose-envify": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-          "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-          "requires": {
-            "js-tokens": "^3.0.0"
-          }
-        },
-        "prop-types-extra": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.0.1.tgz",
-          "integrity": "sha1-pXvUgQ6C0no/9DF+zBtK0AX3moI=",
-          "requires": {
-            "warning": "^3.0.0"
-          }
-        },
-        "warning": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
-          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        }
-      }
-    },
-    "react-redux": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz",
-      "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==",
-      "requires": {
-        "@babel/runtime": "^7.5.5",
-        "hoist-non-react-statics": "^3.3.0",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.7.2",
-        "react-is": "^16.9.0"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react-select": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.3.0.tgz",
-      "integrity": "sha512-g/QAU1HZrzSfxkwMAo/wzi6/ezdWye302RGZevsATec07hI/iSxcpB1hejFIp7V63DJ8mwuign6KmB3VjdlinQ==",
-      "requires": {
-        "classnames": "^2.2.4",
-        "prop-types": "^15.5.8",
-        "react-input-autosize": "^2.1.2"
-      }
-    },
-    "react-test-renderer": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz",
-      "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==",
-      "dev": true,
-      "requires": {
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "react-is": "^16.8.6",
-        "scheduler": "^0.19.1"
-      }
-    },
-    "react-toastify": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-5.5.0.tgz",
-      "integrity": "sha512-jsVme7jALIFGRyQsri/g4YTsRuaaGI70T6/ikjwZMB4mwTZaCWqj5NqxhGrRStKlJc5npXKKvKeqTiRGQl78LQ==",
-      "requires": {
-        "@babel/runtime": "^7.4.2",
-        "classnames": "^2.2.6",
-        "prop-types": "^15.7.2",
-        "react-transition-group": "^4"
-      },
-      "dependencies": {
-        "classnames": {
-          "version": "2.2.6",
-          "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-          "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        },
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react-transition-group": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz",
-      "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==",
-      "requires": {
-        "@babel/runtime": "^7.5.5",
-        "dom-helpers": "^5.0.1",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.6.2"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
-      "dev": true,
-      "requires": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      }
-    },
-    "read-pkg-up": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
-      "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
-      "dev": true,
-      "requires": {
-        "find-up": "^3.0.0",
-        "read-pkg": "^3.0.0"
-      }
-    },
-    "readable-stream": {
-      "version": "2.3.5",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
-      "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.0.3",
-        "util-deprecate": "~1.0.1"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        }
-      }
-    },
-    "readdirp": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
-      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "realpath-native": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
-      "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
-      "dev": true,
-      "requires": {
-        "util.promisify": "^1.0.0"
-      }
-    },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "requires": {
-        "resolve": "^1.1.6"
-      }
-    },
-    "redux": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
-      "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "symbol-observable": "^1.2.0"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        }
-      }
-    },
-    "redux-mock-store": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.4.tgz",
-      "integrity": "sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA==",
-      "dev": true,
-      "requires": {
-        "lodash.isplainobject": "^4.0.6"
-      }
-    },
-    "redux-thunk": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
-      "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
-    },
-    "reflect.ownkeys": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
-      "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=",
-      "dev": true
-    },
-    "regenerate": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
-      "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A=="
-    },
-    "regenerate-unicode-properties": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
-      "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
-      "requires": {
-        "regenerate": "^1.4.0"
-      }
-    },
-    "regenerator-runtime": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
-    },
-    "regenerator-transform": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
-      "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
-      "requires": {
-        "@babel/runtime": "^7.8.4"
-      }
-    },
-    "regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-      "requires": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "regexp.prototype.flags": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
-      "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "regexpp": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
-    },
-    "regexpu-core": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
-      "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
-      "requires": {
-        "regenerate": "^1.4.0",
-        "regenerate-unicode-properties": "^8.2.0",
-        "regjsgen": "^0.5.1",
-        "regjsparser": "^0.6.4",
-        "unicode-match-property-ecmascript": "^1.0.4",
-        "unicode-match-property-value-ecmascript": "^1.2.0"
-      }
-    },
-    "regjsgen": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
-      "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
-    },
-    "regjsparser": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
-      "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
-      "requires": {
-        "jsesc": "~0.5.0"
-      },
-      "dependencies": {
-        "jsesc": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
-        }
-      }
-    },
-    "relateurl": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
-      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
-    },
-    "remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
-    },
-    "renderkid": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
-      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
-      "requires": {
-        "css-select": "^1.1.0",
-        "dom-converter": "^0.2",
-        "htmlparser2": "^3.3.0",
-        "strip-ansi": "^3.0.0",
-        "utila": "^0.4.0"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        }
-      }
-    },
-    "repeat-element": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
-      "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
-    },
-    "request": {
-      "version": "2.88.2",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-      "requires": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.3",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        }
-      }
-    },
-    "request-promise": {
-      "version": "4.2.5",
-      "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.5.tgz",
-      "integrity": "sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.5.0",
-        "request-promise-core": "1.1.3",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
-      }
-    },
-    "request-promise-core": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
-      "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.15"
-      }
-    },
-    "request-promise-native": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
-      "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
-      "dev": true,
-      "requires": {
-        "request-promise-core": "1.1.3",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
-      }
-    },
-    "require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
-    },
-    "require-main-filename": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
-    },
-    "requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
-    },
-    "resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
-    },
-    "resolve": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
-      "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
-      "requires": {
-        "path-parse": "^1.0.6"
-      }
-    },
-    "resolve-cwd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
-      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
-      "requires": {
-        "resolve-from": "^3.0.0"
-      },
-      "dependencies": {
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
-        }
-      }
-    },
-    "resolve-dir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
-      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
-      "requires": {
-        "expand-tilde": "^2.0.0",
-        "global-modules": "^1.0.0"
-      },
-      "dependencies": {
-        "global-modules": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
-          "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
-          "requires": {
-            "global-prefix": "^1.0.1",
-            "is-windows": "^1.0.1",
-            "resolve-dir": "^1.0.0"
-          }
-        }
-      }
-    },
-    "resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
-    },
-    "resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
-    },
-    "restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "requires": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      }
-    },
-    "ret": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
-    },
-    "retry": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
-      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
-    },
-    "rimraf": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-      "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
-      "requires": {
-        "glob": "^7.0.5"
-      }
-    },
-    "ripemd160": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1"
-      }
-    },
-    "rst-selector-parser": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
-      "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
-      "dev": true,
-      "requires": {
-        "lodash.flattendeep": "^4.4.0",
-        "nearley": "^2.7.10"
-      }
-    },
-    "rsvp": {
-      "version": "4.8.5",
-      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
-      "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
-      "dev": true
-    },
-    "run-async": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
-      "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
-      "requires": {
-        "is-promise": "^2.1.0"
-      }
-    },
-    "run-queue": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
-      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
-      "requires": {
-        "aproba": "^1.1.1"
-      }
-    },
-    "rxjs": {
-      "version": "5.5.12",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
-      "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
-      "requires": {
-        "symbol-observable": "1.0.1"
-      },
-      "dependencies": {
-        "symbol-observable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
-          "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ="
-        }
-      }
-    },
-    "safe-buffer": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-      "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
-    },
-    "safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-      "requires": {
-        "ret": "~0.1.10"
-      }
-    },
-    "safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "sane": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
-      "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
-      "dev": true,
-      "requires": {
-        "@cnakazawa/watch": "^1.0.3",
-        "anymatch": "^2.0.0",
-        "capture-exit": "^2.0.0",
-        "exec-sh": "^0.3.2",
-        "execa": "^1.0.0",
-        "fb-watchman": "^2.0.0",
-        "micromatch": "^3.1.4",
-        "minimist": "^1.1.1",
-        "walker": "~1.0.5"
-      }
-    },
-    "sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-      "dev": true
-    },
-    "scheduler": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
-      "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
-      "dev": true,
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
-      }
-    },
-    "schema-utils": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
-      "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
-      "requires": {
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.5.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
-          "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.1"
-          }
-        },
-        "ajv-keywords": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
-          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-        }
-      }
-    },
-    "select-hose": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo="
-    },
-    "selfsigned": {
-      "version": "1.10.7",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
-      "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
-      "requires": {
-        "node-forge": "0.9.0"
-      }
-    },
-    "semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-    },
-    "send": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
-      "requires": {
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "destroy": "~1.0.4",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "~1.6.2",
-        "mime": "1.4.1",
-        "ms": "2.0.0",
-        "on-finished": "~2.3.0",
-        "range-parser": "~1.2.0",
-        "statuses": "~1.4.0"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "mime": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
-          "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
-        },
-        "statuses": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
-          "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
-        }
-      }
-    },
-    "serialize-javascript": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
-      "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ=="
-    },
-    "serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
-      "requires": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      }
-    },
-    "serve-static": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-      "requires": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.17.1"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "http-errors": {
-          "version": "1.7.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
-          "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.4",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
-        },
-        "parseurl": {
-          "version": "1.3.3",
-          "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-          "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
-        },
-        "range-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        },
-        "send": {
-          "version": "0.17.1",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-          "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-          "requires": {
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "destroy": "~1.0.4",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "fresh": "0.5.2",
-            "http-errors": "~1.7.2",
-            "mime": "1.6.0",
-            "ms": "2.1.1",
-            "on-finished": "~2.3.0",
-            "range-parser": "~1.2.1",
-            "statuses": "~1.5.0"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
-    },
-    "set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "setimmediate": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
-    },
-    "setprototypeof": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
-      "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
-    },
-    "sha.js": {
-      "version": "2.4.11",
-      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "shallowequal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
-      "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
-    },
-    "shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-      "requires": {
-        "shebang-regex": "^1.0.0"
-      }
-    },
-    "shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
-    },
-    "shellwords": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
-      "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
-      "dev": true
-    },
-    "side-channel": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
-      "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
-      "requires": {
-        "es-abstract": "^1.17.0-next.1",
-        "object-inspect": "^1.7.0"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
-    },
-    "sinon": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz",
-      "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1.4.0",
-        "@sinonjs/formatio": "^3.2.1",
-        "@sinonjs/samsam": "^3.3.3",
-        "diff": "^3.5.0",
-        "lolex": "^4.2.0",
-        "nise": "^1.5.2",
-        "supports-color": "^5.5.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "sisteransi": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
-      "dev": true
-    },
-    "slash": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
-    },
-    "slice-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
-      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
-      "requires": {
-        "ansi-styles": "^3.2.0",
-        "astral-regex": "^1.0.0",
-        "is-fullwidth-code-point": "^2.0.0"
-      }
-    },
-    "smart-buffer": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz",
-      "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==",
-      "dev": true
-    },
-    "snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-      "requires": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-      "requires": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
-        }
-      }
-    },
-    "snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-      "requires": {
-        "kind-of": "^3.2.0"
-      }
-    },
-    "sockjs": {
-      "version": "0.3.20",
-      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
-      "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
-      "requires": {
-        "faye-websocket": "^0.10.0",
-        "uuid": "^3.4.0",
-        "websocket-driver": "0.6.5"
-      }
-    },
-    "sockjs-client": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
-      "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
-      "requires": {
-        "debug": "^3.2.5",
-        "eventsource": "^1.0.7",
-        "faye-websocket": "~0.11.1",
-        "inherits": "^2.0.3",
-        "json3": "^3.3.2",
-        "url-parse": "^1.4.3"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "faye-websocket": {
-          "version": "0.11.3",
-          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
-          "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
-          "requires": {
-            "websocket-driver": ">=0.5.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "socks": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz",
-      "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==",
-      "dev": true,
-      "requires": {
-        "ip": "1.1.5",
-        "smart-buffer": "^4.1.0"
-      }
-    },
-    "socks-proxy-agent": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz",
-      "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==",
-      "dev": true,
-      "requires": {
-        "agent-base": "~4.2.1",
-        "socks": "~2.3.2"
-      },
-      "dependencies": {
-        "agent-base": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
-          "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
-          "dev": true,
-          "requires": {
-            "es6-promisify": "^5.0.0"
-          }
-        }
-      }
-    },
-    "sort-keys": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
-      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
-      "requires": {
-        "is-plain-obj": "^1.0.0"
-      }
-    },
-    "source-list-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
-      "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
-    },
-    "source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
-    },
-    "source-map-resolve": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
-      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
-      "requires": {
-        "atob": "^2.1.1",
-        "decode-uri-component": "^0.2.0",
-        "resolve-url": "^0.2.1",
-        "source-map-url": "^0.4.0",
-        "urix": "^0.1.0"
-      }
-    },
-    "source-map-support": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
-      "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "source-map-url": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
-    },
-    "spark-md5": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
-      "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8="
-    },
-    "spdx-correct": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
-      "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
-      "dev": true,
-      "requires": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-exceptions": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
-      "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
-      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
-      "dev": true,
-      "requires": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-license-ids": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
-      "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
-      "dev": true
-    },
-    "spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-      "requires": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-      "requires": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
-        },
-        "string_decoder": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-          "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-          "requires": {
-            "safe-buffer": "~5.2.0"
-          }
-        }
-      }
-    },
-    "split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-      "requires": {
-        "extend-shallow": "^3.0.0"
-      }
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-    },
-    "sshpk": {
-      "version": "1.14.2",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
-      "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
-      "requires": {
-        "asn1": "~0.2.3",
-        "assert-plus": "^1.0.0",
-        "bcrypt-pbkdf": "^1.0.0",
-        "dashdash": "^1.12.0",
-        "ecc-jsbn": "~0.1.1",
-        "getpass": "^0.1.1",
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.0.2",
-        "tweetnacl": "~0.14.0"
-      }
-    },
-    "ssri": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
-      "requires": {
-        "figgy-pudding": "^3.5.1"
-      }
-    },
-    "stack-utils": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
-      "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
-      "dev": true
-    },
-    "static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-      "requires": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "statuses": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
-      "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
-    },
-    "stealthy-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
-      "dev": true
-    },
-    "stream-browserify": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
-      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
-      "requires": {
-        "inherits": "~2.0.1",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "stream-each": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
-      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "stream-http": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
-      "requires": {
-        "builtin-status-codes": "^3.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.3.6",
-        "to-arraybuffer": "^1.0.0",
-        "xtend": "^4.0.0"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "stream-shift": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
-      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
-    },
-    "strict-uri-encode": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
-      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
-    },
-    "string-length": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
-      "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
-      "dev": true,
-      "requires": {
-        "astral-regex": "^1.0.0",
-        "strip-ansi": "^4.0.0"
-      }
-    },
-    "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
-      }
-    },
-    "string.prototype.matchall": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz",
-      "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "has-symbols": "^1.0.1",
-        "internal-slot": "^1.0.2",
-        "regexp.prototype.flags": "^1.3.0",
-        "side-channel": "^1.0.2"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "string.prototype.trim": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz",
-      "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "string.prototype.trimend": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
-      "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "string.prototype.trimstart": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
-      "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "string_decoder": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
-      "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-          "dev": true
-        }
-      }
-    },
-    "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true
-    },
-    "strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
-    },
-    "strip-json-comments": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
-      "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w=="
-    },
-    "style-loader": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
-      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.10.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
-      }
-    },
-    "supports-color": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-      "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
-      "requires": {
-        "has-flag": "^3.0.0"
-      }
-    },
-    "symbol-observable": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
-      "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
-    },
-    "symbol-tree": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-      "dev": true
-    },
-    "table": {
-      "version": "5.4.6",
-      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
-      "requires": {
-        "ajv": "^6.10.2",
-        "lodash": "^4.17.14",
-        "slice-ansi": "^2.1.0",
-        "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "tapable": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
-    },
-    "terser": {
-      "version": "4.6.12",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz",
-      "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==",
-      "requires": {
-        "commander": "^2.20.0",
-        "source-map": "~0.6.1",
-        "source-map-support": "~0.5.12"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "terser-webpack-plugin": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
-      "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
-      "requires": {
-        "cacache": "^12.0.2",
-        "find-cache-dir": "^2.1.0",
-        "is-wsl": "^1.1.0",
-        "schema-utils": "^1.0.0",
-        "serialize-javascript": "^2.1.2",
-        "source-map": "^0.6.1",
-        "terser": "^4.1.2",
-        "webpack-sources": "^1.4.0",
-        "worker-farm": "^1.7.0"
-      },
-      "dependencies": {
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "webpack-sources": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
-          "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
-          "requires": {
-            "source-list-map": "^2.0.0",
-            "source-map": "~0.6.1"
-          }
-        }
-      }
-    },
-    "test-exclude": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
-      "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
-      "dev": true,
-      "requires": {
-        "glob": "^7.1.3",
-        "minimatch": "^3.0.4",
-        "read-pkg-up": "^4.0.0",
-        "require-main-filename": "^2.0.0"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "require-main-filename": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-          "dev": true
-        }
-      }
-    },
-    "text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
-    },
-    "throat": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
-      "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
-      "dev": true
-    },
-    "through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
-    },
-    "through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-      "requires": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "thunkify": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz",
-      "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=",
-      "dev": true
-    },
-    "thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="
-    },
-    "timers-browserify": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
-      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
-      "requires": {
-        "setimmediate": "^1.0.4"
-      }
-    },
-    "tmp": {
-      "version": "0.0.33",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
-      "requires": {
-        "os-tmpdir": "~1.0.2"
-      }
-    },
-    "tmpl": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
-      "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
-      "dev": true
-    },
-    "to-arraybuffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
-    },
-    "to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
-    },
-    "to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-      "requires": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "requires": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      }
-    },
-    "toidentifier": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
-    },
-    "toposort": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
-      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk="
-    },
-    "tough-cookie": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
-      "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
-      "requires": {
-        "punycode": "^1.4.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        }
-      }
-    },
-    "tr46": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
-      "dev": true,
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "trim-right": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
-    },
-    "tslib": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
-      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
-    },
-    "tty-browserify": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
-      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
-    },
-    "tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-      "requires": {
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "optional": true
-    },
-    "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "requires": {
-        "prelude-ls": "~1.1.2"
-      }
-    },
-    "type-detect": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
-      "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
-      "dev": true
-    },
-    "type-fest": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
-    },
-    "type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-      "requires": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        },
-        "mime-types": {
-          "version": "2.1.27",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-          "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-          "requires": {
-            "mime-db": "1.44.0"
-          }
-        }
-      }
-    },
-    "typedarray": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
-    },
-    "unc-path-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
-      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
-    },
-    "underscore.string": {
-      "version": "3.3.5",
-      "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz",
-      "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==",
-      "requires": {
-        "sprintf-js": "^1.0.3",
-        "util-deprecate": "^1.0.2"
-      }
-    },
-    "unicode-canonical-property-names-ecmascript": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
-    },
-    "unicode-match-property-ecmascript": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
-      "requires": {
-        "unicode-canonical-property-names-ecmascript": "^1.0.4",
-        "unicode-property-aliases-ecmascript": "^1.0.4"
-      }
-    },
-    "unicode-match-property-value-ecmascript": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
-      "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
-    },
-    "unicode-property-aliases-ecmascript": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
-      "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
-    },
-    "union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
-      "requires": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      }
-    },
-    "uniq": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
-    },
-    "unique-filename": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
-      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
-      "requires": {
-        "unique-slug": "^2.0.0"
-      }
-    },
-    "unique-slug": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
-      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
-      "requires": {
-        "imurmurhash": "^0.1.4"
-      }
-    },
-    "unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
-    },
-    "unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-      "requires": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
-      "dependencies": {
-        "has-value": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-          "requires": {
-            "get-value": "^2.0.3",
-            "has-values": "^0.1.4",
-            "isobject": "^2.0.0"
-          },
-          "dependencies": {
-            "isobject": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            }
-          }
-        },
-        "has-values": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
-        }
-      }
-    },
-    "upath": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
-      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
-    },
-    "upper-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
-      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
-    },
-    "uri-js": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
-    },
-    "url": {
-      "version": "0.7.9",
-      "resolved": "https://registry.npmjs.org/url/-/url-0.7.9.tgz",
-      "integrity": "sha1-GVmxqLNh/AF7WVE6fH+pgn9eTtA=",
-      "requires": {
-        "punycode": ">=1.0.0 <1.1.0",
-        "querystring": ">=0.1.0 <0.2.0"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.0.0.tgz",
-          "integrity": "sha1-zp5sbpwdtYJxdPzrEv9JOHAKG9M="
-        },
-        "querystring": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.1.0.tgz",
-          "integrity": "sha1-y3aibNoKEKlBY/zbPhMoJ/BLexA="
-        }
-      }
-    },
-    "url-loader": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
-      "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
-      "requires": {
-        "loader-utils": "^1.2.3",
-        "mime": "^2.4.4",
-        "schema-utils": "^2.5.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "mime": {
-          "version": "2.4.6",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
-          "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
-      }
-    },
-    "url-parse": {
-      "version": "1.4.7",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
-      "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
-      "requires": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "urls": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/urls/-/urls-0.0.4.tgz",
-      "integrity": "sha1-xBT/RAJFbxxUh4grKxiDreDx2ek="
-    },
-    "use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
-    },
-    "util": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
-      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
-      "requires": {
-        "inherits": "2.0.3"
-      }
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "util.promisify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
-      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "object.getownpropertydescriptors": "^2.0.3"
-      }
-    },
-    "utila": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
-      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
-    },
-    "utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
-    },
-    "uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
-    },
-    "v8-compile-cache": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
-      "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w=="
-    },
-    "v8flags": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
-      "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
-      "requires": {
-        "homedir-polyfill": "^1.0.1"
-      }
-    },
-    "validate-npm-package-license": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
-      "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
-      "dev": true,
-      "requires": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
-    },
-    "verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "^1.2.0"
-      }
-    },
-    "visualize-rev-tree": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/visualize-rev-tree/-/visualize-rev-tree-0.0.1.tgz",
-      "integrity": "sha512-FWGun8R+BCINc7GBAWS8cEu9Nry40ZH3mM8XGgsqMFNJ0nFzeF9YecesK45EO5Pwgt8rBntdTdZfCV/JS1gjVw=="
-    },
-    "vm-browserify": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
-      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
-    },
-    "w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
-      "dev": true,
-      "requires": {
-        "browser-process-hrtime": "^1.0.0"
-      }
-    },
-    "walker": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
-      "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
-      "dev": true,
-      "requires": {
-        "makeerror": "1.0.x"
-      }
-    },
-    "watchpack": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
-      "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
-      "requires": {
-        "chokidar": "^2.1.8",
-        "graceful-fs": "^4.1.2",
-        "neo-async": "^2.5.0"
-      }
-    },
-    "wbuf": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
-      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
-      "requires": {
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "wcwidth": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
-      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
-      "dev": true,
-      "requires": {
-        "defaults": "^1.0.3"
-      }
-    },
-    "webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-      "dev": true
-    },
-    "webpack": {
-      "version": "4.43.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz",
-      "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-module-context": "1.9.0",
-        "@webassemblyjs/wasm-edit": "1.9.0",
-        "@webassemblyjs/wasm-parser": "1.9.0",
-        "acorn": "^6.4.1",
-        "ajv": "^6.10.2",
-        "ajv-keywords": "^3.4.1",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^4.1.0",
-        "eslint-scope": "^4.0.3",
-        "json-parse-better-errors": "^1.0.2",
-        "loader-runner": "^2.4.0",
-        "loader-utils": "^1.2.3",
-        "memory-fs": "^0.4.1",
-        "micromatch": "^3.1.10",
-        "mkdirp": "^0.5.3",
-        "neo-async": "^2.6.1",
-        "node-libs-browser": "^2.2.1",
-        "schema-utils": "^1.0.0",
-        "tapable": "^1.1.3",
-        "terser-webpack-plugin": "^1.4.3",
-        "watchpack": "^1.6.1",
-        "webpack-sources": "^1.4.1"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "eslint-scope": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
-          "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "webpack-sources": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
-          "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
-          "requires": {
-            "source-list-map": "^2.0.0",
-            "source-map": "~0.6.1"
-          }
-        }
-      }
-    },
-    "webpack-cli": {
-      "version": "3.3.12",
-      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
-      "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
-      "requires": {
-        "chalk": "^2.4.2",
-        "cross-spawn": "^6.0.5",
-        "enhanced-resolve": "^4.1.1",
-        "findup-sync": "^3.0.0",
-        "global-modules": "^2.0.0",
-        "import-local": "^2.0.0",
-        "interpret": "^1.4.0",
-        "loader-utils": "^1.4.0",
-        "supports-color": "^6.1.0",
-        "v8-compile-cache": "^2.1.1",
-        "yargs": "^13.3.2"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
-          }
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "findup-sync": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
-          "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
-          "requires": {
-            "detect-file": "^1.0.0",
-            "is-glob": "^4.0.0",
-            "micromatch": "^3.0.4",
-            "resolve-dir": "^1.0.1"
-          }
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "v8-compile-cache": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
-          "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ=="
-        }
-      }
-    },
-    "webpack-dev-middleware": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
-      "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
-      "requires": {
-        "memory-fs": "^0.4.1",
-        "mime": "^2.4.4",
-        "mkdirp": "^0.5.1",
-        "range-parser": "^1.2.1",
-        "webpack-log": "^2.0.0"
-      },
-      "dependencies": {
-        "mime": {
-          "version": "2.4.6",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
-          "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
-        },
-        "range-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        }
-      }
-    },
-    "webpack-dev-server": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
-      "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
-      "requires": {
-        "ansi-html": "0.0.7",
-        "bonjour": "^3.5.0",
-        "chokidar": "^2.1.8",
-        "compression": "^1.7.4",
-        "connect-history-api-fallback": "^1.6.0",
-        "debug": "^4.1.1",
-        "del": "^4.1.1",
-        "express": "^4.17.1",
-        "html-entities": "^1.3.1",
-        "http-proxy-middleware": "0.19.1",
-        "import-local": "^2.0.0",
-        "internal-ip": "^4.3.0",
-        "ip": "^1.1.5",
-        "is-absolute-url": "^3.0.3",
-        "killable": "^1.0.1",
-        "loglevel": "^1.6.8",
-        "opn": "^5.5.0",
-        "p-retry": "^3.0.1",
-        "portfinder": "^1.0.26",
-        "schema-utils": "^1.0.0",
-        "selfsigned": "^1.10.7",
-        "semver": "^6.3.0",
-        "serve-index": "^1.9.1",
-        "sockjs": "0.3.20",
-        "sockjs-client": "1.4.0",
-        "spdy": "^4.0.2",
-        "strip-ansi": "^3.0.1",
-        "supports-color": "^6.1.0",
-        "url": "^0.11.0",
-        "webpack-dev-middleware": "^3.7.2",
-        "webpack-log": "^2.0.0",
-        "ws": "^6.2.1",
-        "yargs": "^13.3.2"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "punycode": {
-          "version": "1.3.2",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "url": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-          "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-          "requires": {
-            "punycode": "1.3.2",
-            "querystring": "0.2.0"
-          }
-        },
-        "ws": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
-          "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
-          "requires": {
-            "async-limiter": "~1.0.0"
-          }
-        }
-      }
-    },
-    "webpack-log": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
-      "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
-      "requires": {
-        "ansi-colors": "^3.0.0",
-        "uuid": "^3.3.2"
-      }
-    },
-    "webpack-sources": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
-      "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
-      "requires": {
-        "source-list-map": "^2.0.0",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "websocket-driver": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
-      "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
-      "requires": {
-        "websocket-extensions": ">=0.1.1"
-      }
-    },
-    "websocket-extensions": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
-    },
-    "whatwg-encoding": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
-      "dev": true,
-      "requires": {
-        "iconv-lite": "0.4.24"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.4.24",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-          "dev": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        }
-      }
-    },
-    "whatwg-fetch": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
-      "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
-    },
-    "whatwg-mimetype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true
-    },
-    "whatwg-url": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
-      "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
-      "dev": true,
-      "requires": {
-        "lodash.sortby": "^4.7.0",
-        "tr46": "^1.0.1",
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "which": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
-      "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
-      "requires": {
-        "isexe": "^2.0.0"
-      }
-    },
-    "which-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
-    },
-    "wide-align": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
-      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "string-width": "^1.0.2 || 2"
-      }
-    },
-    "word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
-    },
-    "wordwrap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-      "dev": true
-    },
-    "worker-farm": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
-      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
-      "requires": {
-        "errno": "~0.1.7"
-      }
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "write": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
-      "requires": {
-        "mkdirp": "^0.5.1"
-      }
-    },
-    "write-file-atomic": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
-      "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^3.0.2"
-      }
-    },
-    "ws": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-      "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
-      "dev": true,
-      "requires": {
-        "async-limiter": "~1.0.0"
-      }
-    },
-    "xml-name-validator": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-      "dev": true
-    },
-    "xregexp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
-      "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=",
-      "dev": true
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-    },
-    "y18n": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
-    },
-    "yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
-    },
-    "yargs": {
-      "version": "13.3.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-      "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-      "requires": {
-        "cliui": "^5.0.0",
-        "find-up": "^3.0.0",
-        "get-caller-file": "^2.0.1",
-        "require-directory": "^2.1.1",
-        "require-main-filename": "^2.0.0",
-        "set-blocking": "^2.0.0",
-        "string-width": "^3.0.0",
-        "which-module": "^2.0.0",
-        "y18n": "^4.0.0",
-        "yargs-parser": "^13.1.2"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "yargs-parser": {
-      "version": "13.1.2",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-      "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-      "requires": {
-        "camelcase": "^5.0.0",
-        "decamelize": "^1.2.0"
-      }
-    },
-    "yargs-unparser": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
-      "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "flat": "^4.1.0",
-        "lodash": "^4.17.15",
-        "yargs": "^13.3.0"
-      }
-    }
-  }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index a30a7e2..0000000
--- a/package.json
+++ /dev/null
@@ -1,155 +0,0 @@
-{
-  "name": "fauxton",
-  "version": "1.2.6",
-  "description": "Fauxton is a modular CouchDB dashboard and Futon replacement.",
-  "main": "./index.js",
-  "directories": {
-    "test": "test"
-  },
-  "bin": {
-    "fauxton": "./bin/fauxton"
-  },
-  "devDependencies": {
-    "babel-jest": "^24.9.0",
-    "bootstrap": "^3.4.1",
-    "enzyme": "^3.11.0",
-    "enzyme-adapter-react-16": "^1.15.2",
-    "es5-shim": "4.5.4",
-    "fetch-mock": "^9.10.3",
-    "jest": "^24.9.0",
-    "mock-local-storage": "^1.1.12",
-    "nightwatch": "^1.3.6",
-    "node-fetch": "^2.6.0",
-    "redux-mock-store": "^1.5.4",
-    "sinon": "^7.5.0"
-  },
-  "dependencies": {
-    "@babel/cli": "^7.10.4",
-    "@babel/core": "^7.10.4",
-    "@babel/plugin-proposal-class-properties": "^7.10.4",
-    "@babel/plugin-proposal-object-rest-spread": "^7.10.4",
-    "@babel/plugin-transform-async-to-generator": "^7.10.4",
-    "@babel/plugin-transform-object-assign": "^7.10.4",
-    "@babel/preset-env": "^7.10.4",
-    "@babel/preset-react": "^7.10.4",
-    "@babel/register": "^7.10.4",
-    "@webcomponents/url": "^0.7.5",
-    "acorn": "^6.4.1",
-    "ajv": "^6.12.3",
-    "async": "~0.2.6",
-    "babel-eslint": "^9.0.0",
-    "babel-loader": "^8.1.0",
-    "babel-plugin-array-includes": "^2.0.3",
-    "backbone": "^1.4.0",
-    "base-64": "^0.1.0",
-    "bluebird": "^3.7.2",
-    "brace": "^0.11.0",
-    "classnames": "^2.2.6",
-    "clean-css": "^4.2.3",
-    "clipboard": "^1.5.16",
-    "cookie": "^0.3.1",
-    "core-js": "^2.6.11",
-    "couchapp": "~0.11.0",
-    "css-loader": "^3.6.0",
-    "d3": "^3.4.11",
-    "eslint": "^6.8.0",
-    "eslint-loader": "^2.2.1",
-    "eslint-plugin-react": "^7.20.3",
-    "exports-loader": "~0.6.4",
-    "expose-loader": "^0.7.5",
-    "express": "^4.17.1",
-    "file-loader": "^1.1.11",
-    "fs-extra": "^2.0.0",
-    "grunt": "^1.2.1",
-    "grunt-cli": "~1.3.2",
-    "grunt-contrib-clean": "~1.1.0",
-    "grunt-contrib-copy": "~1.0.0",
-    "grunt-couchapp": "~0.2.1",
-    "grunt-exec": "~1.0.1",
-    "grunt-shell": "^2.1.0",
-    "html-webpack-plugin": "^3.2.0",
-    "http-proxy": "^1.18.1",
-    "imports-loader": "^0.8.0",
-    "jquery": "^3.5.1",
-    "jquery-param-fn": "^1.0.0",
-    "jsondiffpatch": "^0.3.11",
-    "less": "^3.11.3",
-    "less-loader": "^5.0.0",
-    "lodash": "^4.17.17",
-    "mini-css-extract-plugin": "^0.7.0",
-    "mkdirp": "^0.5.1",
-    "moment": "^2.27.0",
-    "nano": "~8.0.0",
-    "optimist": "^0.6.1",
-    "pouchdb-adapter-http": "^7.2.1",
-    "pouchdb-core": "^7.2.1",
-    "prop-types": "^15.7.2",
-    "rc-slider": "^9.3.1",
-    "react": "^16.13.1",
-    "react-bootstrap": "^0.31.3",
-    "react-dom": "^16.13.1",
-    "react-motion": "^0.5.0",
-    "react-overlays": "^0.7.0",
-    "react-redux": "^7.2.0",
-    "react-select": "^1.3.0",
-    "react-toastify": "^5.5.0",
-    "redux": "^4.0.5",
-    "redux-thunk": "^2.3.0",
-    "regenerator-runtime": "^0.11.1",
-    "request": "^2.88.2",
-    "rxjs": "^5.5.12",
-    "semver": "^5.7.1",
-    "send": "^0.16.2",
-    "style-loader": "^0.23.1",
-    "url": "~0.7.9",
-    "url-loader": "^2.3.0",
-    "urls": "~0.0.3",
-    "uuid": "^3.4.0",
-    "visualize-rev-tree": "0.0.1",
-    "webpack": "^4.43.0",
-    "webpack-cli": "^3.3.12",
-    "webpack-dev-server": "^3.11.0",
-    "whatwg-fetch": "^2.0.4"
-  },
-  "scripts": {
-    "stylecheck": "eslint --ext=js,jsx .",
-    "webpack:dev": "webpack --debug --progress --colors --config ./webpack.config.dev.js",
-    "webpack:test": "webpack --debug --progress --colors --config ./webpack.config.test.js",
-    "webpack:release": "webpack --optimize-minimize --debug --progress --colors --config ./webpack.config.release.js",
-    "jest": "jest --config ./jest-config.json",
-    "test": "grunt test && npm run jest",
-    "phantomjs": "./node_modules/.bin/mocha-phantomjs --debug=false --ssl-protocol=sslv2 --web-security=false --ignore-ssl-errors=true ./test/runner.html",
-    "couchdebug": "grunt couchdebug",
-    "couchdb": "grunt couchdb",
-    "couchapp": "grunt couchapp_deploy",
-    "dev": "node ./devserver.js",
-    "devtests": "webpack-dev-server --config webpack.config.test-dev.js --debug --progress",
-    "nightwatch": "grunt nightwatch",
-    "nightwatch_retries": "grunt nightwatch_retries",
-    "start": "node ./bin/fauxton",
-    "start-debug": "DIST=./dist/debug node ./bin/fauxton",
-    "preversion": "node version-check.js && grunt release",
-    "test-before-publish": "npm run preversion && npm install . -g",
-    "create:animaldb": "node ./bin/create-animal-db",
-    "docker:couchdb-up": "docker-compose -f ./docker/dc.selenium.yml up -d couchdb",
-    "docker:selenium-up": "docker-compose -f ./docker/dc.selenium.yml up -d selenium",
-    "docker:selenium-debug-up": "docker-compose -f ./docker/dc.selenium-debug.yml up -d selenium",
-    "docker:reset": "npm run docker:down && npm run docker:up",
-    "docker:logs": "docker logs couchdb",
-    "docker:up": "docker-compose -f ./docker/dc.selenium.yml up -d",
-    "docker:debug-up": "docker-compose -f ./docker/dc.selenium-debug.yml up -d",
-    "docker:down": "docker-compose -f ./docker/dc.selenium.yml down",
-    "remove-test-dbs": "node ./bin/remove-test-dbs.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/apache/couchdb-fauxton.git"
-  },
-  "keywords": [
-    "couchdb",
-    "futon",
-    "fauxton"
-  ],
-  "author": "The Apache CouchDB contributors",
-  "license": "Apache-2.0"
-}
diff --git a/readme.md b/readme.md
index a01c769..8a2c4a4 100644
--- a/readme.md
+++ b/readme.md
@@ -1,102 +1,3 @@
-[![Build Status](https://travis-ci.org/apache/couchdb-fauxton.svg?branch=master)](https://travis-ci.org/apache/couchdb-fauxton)
+# CouchDB Fauxton
 
-# Fauxton
-
-
-Fauxton is the new Web UI for CouchDB. To get it running in development on your machine. Follow the steps below.
-
-## Install as standalone server via npm
-
-You can use the latest release of Fauxton via npm:
-
-    npm install -g fauxton
-    fauxton
-
-See `fauxton --help` for extra options.
-
-
-## Setting up Fauxton
-
-Please note that [node.js](http://nodejs.org/) and npm is required. Specifically, Fauxton requires at least Node 6 and npm 3.
-
-1. Fork this repo (see [GitHub help](https://help.github.com/articles/fork-a-repo/) for details)
-1. Clone your fork: `git clone https://github.com/YOUR-USERNAME/couchdb-fauxton.git`
-1. Go to your cloned copy: `cd couchdb-fauxton`
-1. Set up the upstream repo: 
-    * `git remote add upstream https://github.com/apache/couchdb-fauxton.git`
-    * `git fetch upstream`
-    * `git branch --set-upstream-to=upstream/master master`
-1. Download all dependencies: `npm install`
-1. Make sure you have CouchDB installed.
-    - Option 1 (**recommended**): Use `npm run docker:up` to start a Docker container running CouchDB with user `tester` and password `testerpass`.
-      - You need to have [Docker](https://docs.docker.com/engine/installation/) installed to use this option. 
-    - Option 2: Follow instructions 
-[found here](http://couchdb.readthedocs.org/en/latest/install/index.html)
-
-
-## Running Fauxton
-
-**NOTE: Before you run Fauxton, don't forget to start CouchDB!**
-
-
-### The Dev Server
-
-Using the dev server is the easiest way to use Fauxton, especially when developing for it. In the cloned repo folder,
-type:
-
-```
-npm run dev
-```
-
-You should be able to access Fauxton at `http://localhost:8000`
-
-
-### Preparing a Fauxton Release
-
-Follow the "Setting up Fauxton" section above, then edit the `settings.json` variable root where the document will live, 
-e.g. `/_utils/`. Then type:
-
-```
-npm run couchdb
-```
-This will install the latest version of Fauxton into `/share/www/`
-
-
-### To Deploy Fauxton
-
-To deploy to your local [CouchDB instance](http://localhost:5984/fauxton/_design/fauxton/index.html):
-
-    grunt couchapp_deploy
-
-### Build pipeline overview
-
-During a release build we are creating a folder called `dist/tmp-out`.
-It contains all files that are just intermediate results for the final
-release artifact. Once everything is finished the files are copied from
-`tmp-out` to their final destination, `dist/release` where they are
-part of the deployable release artifact.
-
-### (Optional) To avoid a npm global install
-    # Development mode, non minified files
-    npm run couchdebug
-
-    # Or fully compiled install
-    npm run couchdb
-
-
-
-## More information 
-
-Check out the following pages for a lot more information about Fauxton:
-
-- [The Fauxton Code Layout](https://github.com/apache/couchdb-fauxton/blob/master/code-layout.md)
-- [Style Guide](https://github.com/apache/couchdb-fauxton/blob/master/styleguide.md)
-- [Testing Fauxton](https://github.com/apache/couchdb-fauxton/blob/master/tests.md)
-- [Extensions](https://github.com/apache/couchdb-fauxton/blob/master/extensions.md)
-- [How to contribute](https://github.com/apache/couchdb-fauxton/blob/master/CONTRIBUTING.md)
-
-
-------
-
-
--- The Fauxton Team
+You are on the wrong branch. You want the `main` branch instead.
diff --git a/settings.json.default.json b/settings.json.default.json
deleted file mode 100644
index 02979f9..0000000
--- a/settings.json.default.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "deps": [
-  { "name": "fauxton" },
-  { "name": "components" },
-  { "name": "databases" },
-  { "name": "documents" },
-  { "name": "setup" },
-  { "name": "activetasks" },
-  { "name": "cluster" },
-  { "name": "config" },
-  { "name": "replication" },
-  { "name": "search" },
-  { "name": "cors" },
-  { "name": "permissions" },
-  { "name": "auth" },
-  { "name": "verifyinstall" },
-  { "name": "documentation" },
-  { "name": "news" }
-  ],
-    "template": {
-      "development": {
-        "src": "./assets/index.underscore",
-        "dest": "dist/debug/index.html",
-        "variables": {
-          "title": "Project Fauxton",
-          "generationLabel": "Fauxton Dev",
-          "largeLogoPath": "../../../../../assets/img/CouchDB-negative-logo.png",
-          "smallLogoPath": "../../../../../assets/img/couchdb-logo.png"
-        },
-        "app": {
-          "root": "/",
-          "host": "./",
-          "version": "1.0.dev"
-        }
-      },
-      "release": {
-        "src": "assets/index.underscore",
-        "dest": "dist/debug/index.html",
-        "variables": {
-          "title": "Project Fauxton",
-          "generationLabel": "Fauxton Release",
-          "largeLogoPath": "../../../../../assets/img/CouchDB-negative-logo.png",
-          "smallLogoPath": "../../../../../assets/img/couchdb-logo.png"
-        },
-        "app": {
-          "root": "/",
-          "host": "../",
-          "version": "1.0"
-        }
-      },
-      "couchapp": {
-        "src": "assets/index.underscore",
-        "dest": "dist/debug/index.html",
-        "variables": {
-          "title": "Project Fauxton",
-          "generationLabel": "Fauxton Couchapp",
-          "largeLogoPath": "../../../../../assets/img/CouchDB-negative-logo.png",
-          "smallLogoPath": "../../../../../assets/img/couchdb-logo.png"
-        },
-        "app": {
-          "root": "/",
-          "host": "../../..",
-          "version": "1.0"
-        }
-      }
-    },
-
-    "couch_config": {
-      "fauxton": {
-        "db": "http://localhost:5984/fauxton",
-        "app": "./couchapp.js",
-        "options": {
-          "okay_if_missing": true
-        }
-      }
-    },
-
-    "nightwatch": {
-      "fauxton_username": "tester",
-      "password": "testerpass",
-      "fauxton_port": "8000",
-      "db_protocol": "http",
-      "db_host": "localhost",
-      "db_port": "5984",
-      "custom_commands_path": ["test/nightwatch_tests/custom-commands", "test/nightwatch_tests/custom-commands/auth"],
-      "globals_path": "./helpers/helpers.js",
-      "selenium_port": "4444"
-    }
-}
diff --git a/styleguide.md b/styleguide.md
deleted file mode 100644
index 9d11b3a..0000000
--- a/styleguide.md
+++ /dev/null
@@ -1,261 +0,0 @@
-# Style Guide
-
-This document attempts to codify the JavaScript, HTML and CSS style rules for Fauxton. This has been patched together from
-a few sources, including [Pootle's style guide](http://pootle.readthedocs.org/en/latest/developers/styleguide.html),
-[Google JS style guide](https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml), and from
-reverse-engineering our own codebase.
-
-This is intended to be a living document: any disagreements about style should be brought to the community via the
-[mailing list](http://markmail.org/search/?q=couchdb#query:couchdb%20list%3Aorg.apache.couchdb.dev%20order%3Adate-backward),
-discussed, agreed upon and documented here.
-
-- [Javascript](#js)
-- [HTML](#html)
-- [CSS / Less](#css)
-
-
-<a name="js" />
-
-## JavaScript
-
-Note: We have JSHint running as a grunt task which will catch the more egregious errors (missing `vars`, missing
-semicolons etc). See the `Gruntfile.js` for the settings being used.
-
-### Programming Style
-
-#### Indentation
-- 2-space indentation. Don't use tabs. JSHint will whine if you have mixed tabs and spaces.
-- Avoid lines longer than 120 characters.
-
-#### Whitespace
-- For anonymous function calls there should be one space between the word `function` and the `(` (left parenthesis).
-Similarly, for named functions there should be a space between the function name `myFunction` and the opening parenthesis.
-- Control statements should have one space between the control keyword and opening parenthesis.
-- Each `;` (semicolon) in the control part of a for statement should be followed with a space.
-- Every `,` (comma) should be followed with whitespace.
-
-#### Strings
-Use `'` single quote character for strings, because HTML markup uses `"`. Eg. `var greeting = 'Hello World!'`;
-
-#### Numbers
-When using `parseInt` always explicitly include the second radix argument (usually 10).
-
-#### Variables
-- use camel case for variables and methods: `myVariable`, `myMethod`
-- use upper camel case (Pascal) for classes / uninstantiated objects: `MyModel`, `MyView`
-- If a variable holds a jQuery object, prefix it by a dollar sign `$`. For example:
-
-```javascript
-var $ul = $('#myList');
-```
-
-#### Selectors
-- Prefix selectors that deal with JavaScript with `js-`. This way it’s clear the separation between class selectors that
-deal with presentation (CSS) and functionality (JavaScript).
-- Use the same naming criterion as with CSS selector names, ie, lowercase and consequent words separated by dashes.
-- Inside Backbone Views, always use `this.$("...")` to target elements, even IDs.
-
-#### Control statements
-Use Underscore's more concise looping methods (`_.each`, `_.filter`) over plain vanilla `for` loops.
-
-Control statements such as `if`, `while`, `switch` should follow these rules:
-- The enclosed statements should be indented.
-- The `{` (left curly brace) should be at the end of the line that begins the compound statement.
-- The `}` (right curly brace) should begin a line and be indented to align with the beginning of the line containing
-the matching `{` (left curly brace).
-- Braces should be used around all statements, even single statements, when they are part of a control structure,
-such as an `if` or `while` statement. This makes it easier to add statements without accidentally introducing bugs.
-
-#### expr ? yay : nay ternary operator
-- use only for simple logic; anything more complex can become difficult to read.
-
-#### Avoid changing a variable's type
-Once you have create a variable and assigned a value, it is set as a type, stick with that type for that variable. This
-has performance benefits as well as making it easier for someone to understand your code.
-
-Bad:
-```javascript
-var greeting = 'Hello World!';
-greeting = function () {
-  return 'Goodbye World';
-};
-```
-
-Special cases for `null` and `undefined` since they're their own type. It's fine to assign a new value to an undefined
-or null var.
-
-#### Binding
-To maintain calling context, favour `_.bind` over storing a reference to `this`. If you do, use `that` as a var name
-(`var that = this;`)
-
-#### Object Prototypes
-Do not modify any native objects' prototype. eg. `Array.prototype`.
-
-#### Object Constructors
-Avoid using constructors for the built-in object types: Number, String, Boolean, Array, Object.
-
-Number:
-```javascript
-var x = 10; // good
-var x = new Number(10); // bad
-```
-
-String:
-```javascript
-var greeting = 'Hello'; // good
-var greeting = new String('Hello'); // bad
-```
-
-Boolean:
-```javascript
-var yes = true; // good
-var yes = new Boolean(1); // bad
-```
-
-Array:
-```javascript
-var myList = new Array(1, 2, 3); // nope
-var myList = [1, 2, 3]; // yay!
-```
-
-Object:
-```javascript
-var myObj = { size: 10 }; // hurrah!
-var myObj = new Object(); // boooo!
-```
-
-#### Associative Arrays
-Use object literal notation for map/hash/associative arrays.
-
-
-### Examples
-
-#### `if` statements
-
-```javascript
-if (condition) {
-  statements
-}
-
-if (condition) {
-  statements
-} else {
-  statements
-}
-
-if (condition) {
-  statements
-} else if (condition) {
-  statements
-} else {
-  statements
-}
-```
-
-#### `for` statements
-
-As mentioned above, using Underscore's looping methods is favoured here.
-
-```javascript
-for (initialization; condition; update) {
-  statements;
-}
-
-for (variable in object) {
-  if (condition) {
-    statements
-  }
-}
-```
-
-#### `switch` statements
-
-```javascript
-switch (condition) {
-  case 1:
-    statements
-    break;
-
-  case 2:
-    statements
-    break;
-
-  default:
-    statements
-}
-```
-
-#### Functions
-
-```javascript
-function myFunction () {
-  // stuff!
-}
-
-function anotherFunction (firstParam, secondParam, thirdParam) {
-  // stuff!
-}
-
-var yetAnotherFunction = function (firstParam) {
-  // stuff!
-}
-
-var anonymousFunction = function () {
-  // more stuff!
-}
-```
-
-
-<a name="html" />
-
-## HTML
-
-In Fauxton, all our HTML documents are all Underscore templates so this section contains a few Underscore-related 
-style recommendations as well.
-
-#### Indentation
-- 2-space indentation using spaces, not tabs.
-- Avoid lines longer than 120 characters.
-
-### Naming
-- IDs and class names with multiple words should be lowercase and separated with hyphens (`-`), like `my-class` and 
-`fixed-header`.
-- Please try to name your classes and IDs something that makes sense for the current component and won't conflict with
-other markup in the page.
-- IDs or classes that are to be used for javascript only should be named with a `js-` prefix. Note: these should NOT be 
-styled; they should be used for JS hooks only.
-
-#### Other
-- Always use double quotes for attribute strings.
-
-### Underscore-related
-- If a template name consists of multiple words, separate it with underscores, like `my_template.html`.
-- Unless they're explicitly needed, always use `<%- %>` over `<%= %>`.
-
-
-
-<a name="css" />
-
-## CSS / Less
-
-We use Less to generate our CSS.
-
-#### Indentation / Whitespace
-- Indent using 2 spaces. Don’t use tabs.
-- Put selectors and braces on their own lines.
-- One space between the end of the selector and the opening brace, e.g. 
- 
-```
-.my-class {
-    /* rules here */
-}
-```
-
-#### Naming 
-- As noted in the HTML section above, selectors should be lowercase. 
-- Selectors with multiple words should be separated with hyphens (`-`), like `.my-class` and `.fixed-header`. 
-
-#### Other
-- Avoid deep-nesting of rules. Always try to style an element with the minimum specificity required.
-
-
diff --git a/tasks/fauxton.js b/tasks/fauxton.js
deleted file mode 100644
index dce4a96..0000000
--- a/tasks/fauxton.js
+++ /dev/null
@@ -1,222 +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.
-
-module.exports = function (grunt) {
-  var _ = grunt.util._,
-      fs = require('fs'),
-      os = require('os');
-
-  grunt.registerMultiTask('get_deps', 'Fetch external dependencies', function () {
-
-    grunt.log.writeln('Fetching external dependencies');
-    const data = this.data,
-          target = data.target || 'app/addons/',
-          settingsFile = fs.existsSync(data.src) ? data.src : 'settings.json.default.json',
-          settings = grunt.file.readJSON(settingsFile);
-
-    const fetch = deps => {
-      var fs = require('fs-extra');
-      deps.forEach(dep => {
-        const path = target + dep.name;
-        const location = dep.url || dep.path;
-        grunt.log.writeln('Fetching: ' + dep.name + ' (' + location + ')');
-        try {
-          fs.copySync(dep.path, path);
-        } catch (e) {
-          grunt.log.writeln('ERROR: ' + e.message);
-        }
-      });
-    };
-
-    const localDeps = settings.deps.filter(dep => !!dep.path);
-    grunt.log.writeln(localDeps.length + ' local dependencies');
-    fetch(localDeps);
-  });
-
-  grunt.registerMultiTask('gen_load_addons', 'Generate the load_addons.js file', function () {
-    var data = this.data,
-        _ = grunt.util._,
-        settingsFile = fs.existsSync(data.src) ? data.src : 'settings.json.default.json',
-        settings = grunt.file.readJSON(settingsFile),
-        template = 'app/load_addons.js.underscore',
-        dest = 'app/load_addons.js',
-        deps = _.map(settings.deps, function (dep) {
-          return './addons/' + dep.name + '/base';
-        });
-
-    var tmpl = _.template(grunt.file.read(template));
-    grunt.file.write(dest, tmpl({deps: deps}));
-  });
-
-  grunt.registerMultiTask('gen_initialize', 'Generate the app.js file', function () {
-    var _ = grunt.util._,
-        settings = this.data,
-        template = 'app/initialize.js.underscore',
-        dest = 'app/initialize.js',
-        tmpl = _.template(grunt.file.read(template)),
-        app = {};
-
-    _.defaults(app, settings.app, {
-      root: '/',
-      host: '../..',
-      version: "0.0"
-    });
-
-    grunt.file.write(dest, tmpl(app));
-  });
-
-  // run every time nightwatch is executed from the command line
-  grunt.registerMultiTask('initNightwatch', 'Sets up Nightwatch', function () {
-    // perform a little validation on the settings
-    _validateNightwatchSettings(this.data.settings);
-
-    // figure out what tests we need to run by examining the settings.json file content. This method returns
-    // the list of addon folders to test, plus a list of files to exclude
-    var result = _getNightwatchTests(this.data.settings);
-    var addonsWithTests = result.addonFolders;
-    var excludeTests = result.excludeTests;
-    var skipTags = result.skipTags;
-    console.info('addons and excluded', addonsWithTests, excludeTests);
-    console.info('skipTags', skipTags);
-
-    // if the user passed a --file="X" on the command line, filter out
-    var singleTestToRun = grunt.option('file');
-    if (singleTestToRun) {
-      addonsWithTests = _findSpecificNightwatchTest(addonsWithTests, singleTestToRun);
-    }
-
-    // now generate the new nightwatch.json file
-    var nightwatchTemplate = _.template(grunt.file.read(this.data.template));
-    grunt.file.write(this.data.dest, nightwatchTemplate({
-      src_folders: JSON.stringify(addonsWithTests),
-      exclude_tests: JSON.stringify(excludeTests, null, '\t'),
-      custom_commands_path: JSON.stringify(this.data.settings.nightwatch.custom_commands_path),
-      globals_path: this.data.settings.nightwatch.globals_path,
-      fauxton_username: this.data.settings.nightwatch.fauxton_username,
-      password: this.data.settings.nightwatch.password,
-      launch_url: this.data.settings.nightwatch.launch_url,
-      fauxton_host: _getHost(this.data.settings.nightwatch.fauxton_ip),
-      fauxton_port: this.data.settings.nightwatch.fauxton_port,
-      db_protocol: this.data.settings.nightwatch.db_protocol,
-      db_host: this.data.settings.nightwatch.db_host,
-      db_port: this.data.settings.nightwatch.db_port,
-      selenium_port: this.data.settings.nightwatch.selenium_port,
-      skiptags: skipTags
-    }));
-  });
-
-  // HELPERS
-
-  //if FAUXTON_HOST not set use ip address
-  function _getHost (fauxton_ip) {
-    if (fauxton_ip) {
-      return fauxton_ip;
-    }
-    //making some assumptions here
-    const interfaces = os.networkInterfaces();
-    const eth0 = interfaces[Object.keys(interfaces)[2]];
-    return eth0.find(function (item) {
-      return item.family === 'IPv4';
-    }).address;
-  }
-
-  function _validateNightwatchSettings (data) {
-    var error = '';
-
-    // if the settings file didn't contain any addons, it points to bigger problems!
-    if (!data.deps.length) {
-      error = 'No addons listed in settings.json - no tests to run!';
-
-    // check the requires nightwatch settings. These should always exist in the settings.json file
-    } else if (!_.has(data, 'nightwatch') ||
-      !_.has(data.nightwatch, 'fauxton_username') ||
-      !_.has(data.nightwatch, 'password')) {
-      error = 'Your settings.json file doesn\'t contain valid nightwatch settings. Please check the user doc.';
-    }
-
-    if (error) {
-      grunt.fail.fatal(error);
-    }
-  }
-
-  function _findSpecificNightwatchTest (addonsWithTests, file) {
-    var filename = file + '.js';
-
-    var paths = addonsWithTests.reduce(function (acc, dir) {
-      if (fs.existsSync(dir + '/' + filename)) {
-        acc.push(dir + '/' + filename);
-      }
-      return acc;
-    }, []);
-
-    if (paths.length > 1) {
-      grunt.fail.fatal('Found multiple nightwatch tests with that filename.');
-    } else if (!paths.length) {
-      grunt.fail.fatal('Found no testfile named ' + filename);
-    }
-
-    return paths[0];
-  }
-
-  function _getNightwatchTests (settings) {
-    var testBlacklist = (_.has(settings.nightwatch, 'testBlacklist')) ? settings.nightwatch.testBlacklist : {};
-    var addonFolders = [],
-        excludeTests = [];
-
-    _.each(settings.deps, function (addon) {
-      var addonTestsFolder = 'app/addons/' + addon.name + '/tests/nightwatch';
-      if (_.has(addon, 'path')) {
-        addonTestsFolder = addon.path + '/tests/nightwatch';
-      }
-
-      // if this addon doesn't have any tests, just move along. Nothing to see here.
-      if (!fs.existsSync(addonTestsFolder)) {
-        return;
-      }
-
-      // next up: see if this addon has anything blacklisted
-      if (_.has(testBlacklist, addon.name) && _.isArray(testBlacklist[addon.name]) && testBlacklist[addon.name].length > 0) {
-
-        // a '*' means the user wants to blacklist all tests in the addon
-        if (_.includes(testBlacklist[addon.name], '*')) {
-          return;
-        }
-
-        // add the folder to test. Any specific files will be blacklisted separately
-        addonFolders.push(addonTestsFolder);
-
-        _.each(fs.readdirSync(addonTestsFolder), function (file) {
-          if (_.includes(testBlacklist[addon.name], file)) {
-            // the relative path is added to work around an oddity with nightwatch. It evaluates all exclude paths
-            // relative to the current src_folder being examined, so we need to return to the root first
-            excludeTests.push('../../../../../' + addonTestsFolder + '/' + file);
-          }
-        });
-
-      } else {
-
-        // add the whole folder
-        addonFolders.push(addonTestsFolder);
-      }
-    });
-
-    var skipTags = process.env.NIGHTWATCH_SKIPTAGS || 'nonpartitioned';
-    var skipTagsJSON = JSON.stringify(skipTags.split(',').map(s => s.trim()));
-
-    return {
-      addonFolders: addonFolders,
-      excludeTests: excludeTests,
-      skipTags: skipTagsJSON
-    };
-  }
-
-};
diff --git a/tasks/helper.js b/tasks/helper.js
deleted file mode 100644
index d880ae5..0000000
--- a/tasks/helper.js
+++ /dev/null
@@ -1,58 +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'),
-    path = require('path');
-
-exports.devServerPort = 8000;
-exports.couch = 'http://couch:5984/';
-
-exports.init = function () {
-
-  return {
-    readSettingsFile: function () {
-      if (fs.existsSync(path.join(__dirname, "../settings.json"))) {
-        return require(path.join(__dirname, "../settings.json"));
-      } else if (fs.existsSync(path.join(__dirname, '../settings.json.default.json'))) {
-        return require(path.join(__dirname, '../settings.json.default.json'));
-      }
-
-      throw new Error('settings.json file missing');
-    },
-
-    readI18nFile: function () {
-      if (fs.existsSync(path.join(__dirname, '../i18n.json'))) {
-        return require(path.join(__dirname, '../i18n.json'));
-      }
-      if (fs.existsSync(path.join(__dirname, '../i18n.json.default.json'))) {
-        return require(path.join(__dirname, '../i18n.json.default.json'));
-      }
-
-      throw new Error('i18n file missing');
-    },
-
-    processAddons: function (callback) {
-      this.readSettingsFile().deps.forEach(callback);
-    },
-
-    getFileList: function (fileExtensions, defaults) {
-      return this.readSettingsFile().deps.reduce((files, dep) => {
-        if (dep.path) {
-          fileExtensions.forEach(fileExtension => {
-            files.push(path.join(dep.path, '**/*' + fileExtension));
-          });
-        }
-        return files;
-      }, defaults);
-    }
-  };
-};
diff --git a/test/animal-db.json b/test/animal-db.json
deleted file mode 100644
index a8d7ad7..0000000
--- a/test/animal-db.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
-{"_id":"aardvark","min_weight":40,"max_weight":65,"min_length":1,"max_length":2.2,"latin_name":"Orycteropus afer","wiki_page":"http://en.wikipedia.org/wiki/Aardvark","class":"mammal","diet":"omnivore"},
-{"_id":"badger","wiki_page":"http://en.wikipedia.org/wiki/Badger","min_weight":7,"max_weight":30,"min_length":0.6,"max_length":0.9,"latin_name":"Meles meles","class":"mammal","diet":"omnivore"},
-{"_id":"elephant","wiki_page":"http://en.wikipedia.org/wiki/African_elephant","min_weight":4700,"max_weight":6050,"min_length":3.2,"max_length":4,"class":"mammal","diet":"herbivore"},
-{"_id":"flamingo","min_weight":1,"min_length":1.2,"max_weight":2.8,"max_length":1.45,"wiki_page":"https://en.wikipedia.org/wiki/American_flamingo","class":"aves","diet":"omnivore"},
-{"_id":"giraffe","min_weight":830,"min_length":5,"max_weight":1600,"max_length":6,"wiki_page":"http://en.wikipedia.org/wiki/Giraffe","class":"mammal","diet":"herbivore"},
-{"_id":"kookaburra","min_length":0.28,"max_length":0.42,"wiki_page":"http://en.wikipedia.org/wiki/Kookaburra","class":"bird","diet":"carnivore","latin_name":"Dacelo novaeguineae"},
-{"_id":"lemur","wiki_page":"http://en.wikipedia.org/wiki/Ring-tailed_lemur","min_weight":2.2,"max_weight":2.2,"min_length":0.95,"max_length":1.1,"class":"mammal","diet":"omnivore"},
-{"_id":"llama","min_weight":130,"max_weight":200,"min_length":1.7,"max_length":1.8,"latin_name":"Lama glama","wiki_page":"http://en.wikipedia.org/wiki/Llama","class":"mammal","diet":"herbivore"},
-{"_id":"panda","wiki_page":"http://en.wikipedia.org/wiki/Panda","min_weight":75,"max_weight":115,"min_length":1.2,"max_length":1.8,"class":"mammal","diet":"carnivore"},
-{"_id":"snipe","min_weight":0.08,"max_weight":0.14,"min_length":0.25,"max_length":0.27,"latin_name":"Gallinago gallinago","wiki_page":"http://en.wikipedia.org/wiki/Common_Snipe","class":"bird","diet":"omnivore"},
-{"_id":"zebra","wiki_page":"http://en.wikipedia.org/wiki/Plains_zebra","min_length":2,"max_length":2.5,"min_weight":175,"max_weight":387,"class":"mammal","diet":"herbivore"},
-{"_id":"_design/animals", "language":"javascript","views":{"by-latin-name":{"map":"function(doc){if(doc.latin_name)emit(doc.latin_name);}"}}}
-]
diff --git a/test/create-animal-db.js b/test/create-animal-db.js
deleted file mode 100644
index 1e5205a..0000000
--- a/test/create-animal-db.js
+++ /dev/null
@@ -1,188 +0,0 @@
-const request = require('request');
-const async = require('async');
-
-const animals = require('../test/animal-db.json');
-
-module.exports = createAnimalDb;
-
-function createAnimalDb (url, cb) {
-
-  deleteDatabase('animaldb', () => {
-    createAnimalDb();
-  });
-
-
-  function deleteDatabase (db, cb) {
-    request({
-      uri: `${url}/${db}`,
-      method: 'DELETE',
-      json: true,
-      body: {}
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      cb();
-    });
-  }
-
-  function createAnimalDb () {
-    request({
-      uri: `${url}/animaldb/`,
-      method: 'PUT',
-      json: true,
-      body: {}
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      bulkLoadDocs();
-    });
-  }
-
-  function bulkLoadDocs () {
-    request({
-      uri: `${url}/animaldb/_bulk_docs`,
-      method: 'POST',
-      json: true,
-      body: {
-        docs: animals
-      }
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      async.waterfall([
-        (cb) => {
-          replicate(`${url}/animaldb`, `${url}/animaldb-copy`, true, cb);
-        },
-        (cb) => {
-          replicate(`${url}/animaldb`, `${url}/animaldb-copy-2`, true, cb);
-        },
-        (cb) => {
-          alterZebraDocs(cb);
-        },
-        (cb) => {
-            alterAnimalDesignDoc(cb)
-        },
-        (cb) => {
-          replicate(`${url}/animaldb-copy`, `${url}/animaldb`, false, cb);
-        },
-        (cb) => {
-          replicate(`${url}/animaldb-copy-2`, `${url}/animaldb`, false, cb);
-        },
-        (cb) => {
-          deleteDatabase('animaldb-copy', cb);
-        },
-        (cb) => {
-          deleteDatabase('animaldb-copy-2', cb);
-        },
-        (cb) => {
-
-          request({
-            uri: `${url}/animaldb/${encodeURIComponent('_design/conflicts')}`,
-            method: 'PUT',
-            json: true,
-            body: {
-              _id: "_design/conflicts",
-              language: "javascript",
-              "views":{"new-view":{"map":"function (doc) {\n  emit(doc._id, 1);\n}"}}
-            }
-          }, (err, res, body) => {
-            if (err) {
-              throw err;
-            }
-
-            cb();
-          });
-
-        }
-      ], (err, result) => {
-        cb();
-      });
-    });
-  }
-
-  function replicate (source, target, createTarget, cb) {
-    request({
-      uri: `${url}/_replicate`,
-      method: 'POST',
-      json: true,
-      body: {
-        source: source,
-        target: target,
-        create_target: createTarget
-      }
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      cb(null);
-
-    });
-  }
-
-  function getRev (db, id, cb) {
-    request({
-      uri: `${url}/${db}/${id}`,
-      json: true
-    }, (err, res, body) => {
-      cb(null, body._rev);
-    });
-  }
-
-  function updateDoc (db, id, data, cb) {
-
-    getRev(db, id, (err, rev) => {
-      alterDoc(db,id, data, rev, cb);
-    });
-  }
-
-  function alterDoc (db, id, data, rev, cb) {
-    data._rev = rev;
-
-    request({
-      uri: `${url}/${db}/${id}`,
-      json: true,
-      method: 'PUT',
-      body: data
-    }, (err, res, body) => {
-      cb(null);
-    });
-  }
-
-  function alterZebraDocs (cb) {
-
-    updateDoc('animaldb','zebra', {
-      color: 'black & white'
-    }, () => {
-      updateDoc('animaldb-copy', 'zebra', {
-        color: 'white'
-      }, () => {
-        updateDoc('animaldb-copy-2', 'zebra', {
-          color: 'green'
-        }, cb);
-      });
-    });
-}
-
-    function alterAnimalDesignDoc (cb) {
-
-        updateDoc('animaldb','_design/animals', {
-            color: 'black & white'
-        }, () => {
-            updateDoc('animaldb-copy', '_design/animals', {
-                color: 'white'
-            }, () => {
-                updateDoc('animaldb-copy-2', '_design/animals', {
-                    color: 'green'
-                }, cb);
-            });
-        });
-    }
-
-}
diff --git a/test/mocha/testUtils.js b/test/mocha/testUtils.js
deleted file mode 100644
index 792d2dd..0000000
--- a/test/mocha/testUtils.js
+++ /dev/null
@@ -1,23 +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.
-
-import _ from 'lodash';
-
-var restore = function (fn) {
-  if (fn.restore) {
-    fn.restore();
-  }
-};
-
-export default {
-  restore: restore
-};
diff --git a/test/nightwatch_tests/custom-commands/auth/loginToGUI.js b/test/nightwatch_tests/custom-commands/auth/loginToGUI.js
deleted file mode 100644
index eb14595..0000000
--- a/test/nightwatch_tests/custom-commands/auth/loginToGUI.js
+++ /dev/null
@@ -1,46 +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.
-
-exports.command = LoginToGui;
-
-function LoginToGui (user, pw) {
-
-  const client = this;
-  const waitTime = client.globals.maxWaitTime;
-  const baseUrl = client.options.launch_url;
-
-  const username = user || client.options.fauxton_username;
-  const password = pw || client.options.password;
-
-  client
-    .resizeWindow(1200, 1200)
-    .url(baseUrl + '/#/login')
-    .waitForElementPresent('a[href="#/login"]', 50000, false)
-    .click('a[href="#/login"]')
-    .waitForElementVisible('.couch-login-wrapper', waitTime, false)
-    .waitForElementVisible('#username', waitTime, false)
-    .setValue('.couch-login-wrapper #username', [username])
-
-    .waitForElementVisible('#password', waitTime, false)
-    .setValue('.couch-login-wrapper #password', [password])
-
-    .clickWhenVisible('#submit')
-
-    .closeNotification()
-    .waitForElementPresent('[data-name="jump-to-db"]', waitTime, false)
-
-    // important! wait for the db page to fully load. This was the cause of many bugs
-    .waitForElementVisible('#dashboard-content table.databases', waitTime, false);
-
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/checkForDatabaseCreated.js b/test/nightwatch_tests/custom-commands/checkForDatabaseCreated.js
deleted file mode 100644
index 1de4abd..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDatabaseCreated.js
+++ /dev/null
@@ -1,42 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDatabaseCreated = commandHelper.checkForDatabaseCreated;
-
-function CheckForDatabaseCreated () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDatabaseCreated, events.EventEmitter);
-
-CheckForDatabaseCreated.prototype.command = function (databaseName, timeout) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  checkForDatabaseCreated(couchUrl, databaseName, timeout, () => {
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CheckForDatabaseCreated;
diff --git a/test/nightwatch_tests/custom-commands/checkForDatabaseDeleted.js b/test/nightwatch_tests/custom-commands/checkForDatabaseDeleted.js
deleted file mode 100644
index a48362c..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDatabaseDeleted.js
+++ /dev/null
@@ -1,53 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-function CheckForDatabaseDeleted () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDatabaseDeleted, events.EventEmitter);
-
-CheckForDatabaseDeleted.prototype.command = function (databaseName, timeout) {
-  var couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  var timeOutId = setTimeout(function () {
-    throw new Error('timeout waiting for db to disappear');
-  }, timeout);
-
-  var intervalId = setInterval(function () {
-    request(couchUrl + '/_all_dbs', function (er, res, body) {
-      if (body) {
-        var reg = new RegExp('"' + databaseName + '"', 'g');
-        if (!reg.test(body)) {
-          clearTimeout(timeOutId);
-          console.log('database not there: ' + databaseName);
-          clearInterval(intervalId);
-          this.emit('complete');
-        }
-      }
-    }.bind(this));
-  }.bind(this), 1000);
-
-  return this;
-};
-
-module.exports = CheckForDatabaseDeleted;
diff --git a/test/nightwatch_tests/custom-commands/checkForDocumentCreated.js b/test/nightwatch_tests/custom-commands/checkForDocumentCreated.js
deleted file mode 100644
index 87d6b4e..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDocumentCreated.js
+++ /dev/null
@@ -1,49 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDocumentCreated = commandHelper.checkForDocumentCreated;
-
-function CheckForDocumentCreated () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDocumentCreated, events.EventEmitter);
-
-CheckForDocumentCreated.prototype.command = function (doc, timeout, db) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!db) {
-    db = helpers.testDatabaseName;
-  }
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  const url = [couchUrl, db, doc].join('/');
-
-  console.log('checking this doc exists: ', url);
-  checkForDocumentCreated(url, timeout, () => {
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CheckForDocumentCreated;
diff --git a/test/nightwatch_tests/custom-commands/checkForDocumentDeleted.js b/test/nightwatch_tests/custom-commands/checkForDocumentDeleted.js
deleted file mode 100644
index 7b28821..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDocumentDeleted.js
+++ /dev/null
@@ -1,49 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDocumentDeleted = commandHelper.checkForDocumentDeleted;
-
-function CheckForDocumentDeleted () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDocumentDeleted, events.EventEmitter);
-
-CheckForDocumentDeleted.prototype.command = function (doc, timeout, db) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!db) {
-    db = helpers.testDatabaseName;
-  }
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  const url = [couchUrl, db, doc].join('/');
-
-  console.log('checking this doc is deleted: ', url);
-  checkForDocumentDeleted(url, timeout, () => {
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CheckForDocumentDeleted;
diff --git a/test/nightwatch_tests/custom-commands/checkForStringNotPresent.js b/test/nightwatch_tests/custom-commands/checkForStringNotPresent.js
deleted file mode 100644
index d02d95b..0000000
--- a/test/nightwatch_tests/custom-commands/checkForStringNotPresent.js
+++ /dev/null
@@ -1,54 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-function CheckForStringNotPresent () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForStringNotPresent, events.EventEmitter);
-
-CheckForStringNotPresent.prototype.command = function (path, string, timeout) {
-  var couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  var timeOutId = setTimeout(function () {
-    throw new Error('timeout waiting for string to disappear');
-  }, timeout);
-
-  var intervalId = setInterval(function () {
-    var url = [couchUrl, path].join('/');
-
-    request(url, function (er, res, body) {
-      if (body) {
-        if (body.indexOf(string) === -1) {
-          clearTimeout(timeOutId);
-          console.log('string disappeared: ' + string);
-          clearInterval(intervalId);
-          this.emit('complete');
-        }
-      }
-    }.bind(this));
-  }.bind(this), 1000);
-
-  return this;
-};
-
-module.exports = CheckForStringNotPresent;
diff --git a/test/nightwatch_tests/custom-commands/checkForStringPresent.js b/test/nightwatch_tests/custom-commands/checkForStringPresent.js
deleted file mode 100644
index 78dfbb8..0000000
--- a/test/nightwatch_tests/custom-commands/checkForStringPresent.js
+++ /dev/null
@@ -1,54 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-function CheckForStringPresent () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForStringPresent, events.EventEmitter);
-
-CheckForStringPresent.prototype.command = function (path, string, timeout) {
-  var couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  var timeOutId = setTimeout(function () {
-    throw new Error('timeout waiting for string to appear');
-  }, timeout);
-
-  var intervalId = setInterval(function () {
-    var url = [couchUrl, path].join('/');
-
-    request(url, function (er, res, body) {
-      if (body) {
-        if (body.indexOf(string) !== -1) {
-          clearTimeout(timeOutId);
-          console.log('string found: ' + string);
-          clearInterval(intervalId);
-          this.emit('complete');
-        }
-      }
-    }.bind(this));
-  }.bind(this), 1000);
-
-  return this;
-};
-
-module.exports = CheckForStringPresent;
diff --git a/test/nightwatch_tests/custom-commands/clickWhenVisible.js b/test/nightwatch_tests/custom-commands/clickWhenVisible.js
deleted file mode 100644
index b7953e3..0000000
--- a/test/nightwatch_tests/custom-commands/clickWhenVisible.js
+++ /dev/null
@@ -1,32 +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.
-
-const helpers = require('../helpers/helpers.js');
-
-exports.command = function(element, waitTime, scrollIntoView = true) {
-
-  if (waitTime === undefined) {
-    waitTime = helpers.maxWaitTime;
-  }
-
-  this.waitForElementVisible(element);
-
-  if (scrollIntoView) {
-    this.execute(function(selector) {
-      document.querySelector(selector).scrollIntoView();
-    }, [element]);
-  }
-
-  this.pause(200).click(element);
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/closeNotification.js b/test/nightwatch_tests/custom-commands/closeNotification.js
deleted file mode 100644
index 7b3fc66..0000000
--- a/test/nightwatch_tests/custom-commands/closeNotification.js
+++ /dev/null
@@ -1,25 +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 helpers = require('../helpers/helpers.js');
-
-exports.command = function () {
-  var client = this,
-      dismissSelector = '.Toastify__toast-container .Toastify__toast-body';
-
-  client
-    .waitForElementVisible(dismissSelector, helpers.maxWaitTime, false)
-    .click(dismissSelector)
-    .waitForElementNotPresent(dismissSelector, helpers.maxWaitTime, false);
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/closeNotifications.js b/test/nightwatch_tests/custom-commands/closeNotifications.js
deleted file mode 100644
index 0116366..0000000
--- a/test/nightwatch_tests/custom-commands/closeNotifications.js
+++ /dev/null
@@ -1,25 +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 helpers = require('../helpers/helpers.js');
-
-exports.command = function () {
-  var client = this,
-      dismissSelector = '.Toastify__toast-container .Toastify__toast-body';
-
-  client
-    .waitForElementVisible(dismissSelector, helpers.maxWaitTime, false)
-    .keys(client.Keys.ESCAPE)
-    .waitForElementNotPresent(dismissSelector, helpers.maxWaitTime, false);
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/createAnimalDb.js b/test/nightwatch_tests/custom-commands/createAnimalDb.js
deleted file mode 100644
index e897272..0000000
--- a/test/nightwatch_tests/custom-commands/createAnimalDb.js
+++ /dev/null
@@ -1,43 +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.
-
-const util = require('util');
-const events = require('events');
-const helpers = require('../helpers/helpers.js');
-
-const commandHelper = require('./helper.js');
-const checkForDatabaseCreated = commandHelper.checkForDatabaseCreated;
-
-const createAnimalDbHelper = require('../../create-animal-db.js');
-function CreateAnimalDb () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateAnimalDb, events.EventEmitter);
-
-CreateAnimalDb.prototype.command = function (databaseName) {
-
-  const couchUrl = this.client.options.db_url;
-
-  createAnimalDbHelper(couchUrl, () => {
-
-    checkForDatabaseCreated(couchUrl, 'animaldb', helpers.maxWaitTime, () => {
-      this.emit('complete');
-    });
-
-  });
-
-  return this;
-};
-
-module.exports = CreateAnimalDb;
diff --git a/test/nightwatch_tests/custom-commands/createDatabase.js b/test/nightwatch_tests/custom-commands/createDatabase.js
deleted file mode 100644
index 617a84a..0000000
--- a/test/nightwatch_tests/custom-commands/createDatabase.js
+++ /dev/null
@@ -1,47 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-const commandHelper = require('./helper.js');
-const checkForDatabaseCreated = commandHelper.checkForDatabaseCreated;
-
-function CreateDatabase () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateDatabase, events.EventEmitter);
-
-CreateDatabase.prototype.command = function (databaseName) {
-  const nano = helpers.getNanoInstance(this.client.options.db_url);
-
-
-  nano.db.create(databaseName).then(() => {
-    console.log('nano - created a database: ' + databaseName);
-    const timeout = helpers.maxWaitTime;
-    const couchUrl = this.client.options.db_url;
-
-    checkForDatabaseCreated(couchUrl, databaseName, timeout, () => {
-      this.emit('complete');
-    });
-  }).catch(err => {
-    console.log('Error in CreateDatabase custom command. Db: ' + databaseName, 'Reason:', err.message);
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CreateDatabase;
diff --git a/test/nightwatch_tests/custom-commands/createDocument.js b/test/nightwatch_tests/custom-commands/createDocument.js
deleted file mode 100644
index bd39afb..0000000
--- a/test/nightwatch_tests/custom-commands/createDocument.js
+++ /dev/null
@@ -1,66 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDocumentCreated = commandHelper.checkForDocumentCreated;
-
-function CreateDocument () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateDocument, events.EventEmitter);
-
-CreateDocument.prototype.command = function (documentName, databaseName, docContents) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!docContents) {
-    docContents = { dummyKey: 'testingValue' };
-  }
-  docContents._id = documentName;
-
-  request({
-    method: 'POST',
-    uri: couchUrl + '/' + databaseName + '?w=3',
-    body: docContents,
-    json: true
-  }, (err, res, body) => {
-    if (err) {
-      console.log('Error in nano CreateDocument Function: ' + documentName + ', in database: ' + databaseName, err.message);
-    }
-    console.log('nano  - created a doc: ' + documentName + ', in database: ' + databaseName);
-
-    if (!databaseName) {
-      databaseName = helpers.testDatabaseName;
-    }
-    if (documentName.startsWith('_design/')) {
-      documentName = '_design/' + encodeURIComponent(documentName.substr(8));
-    } else {
-      documentName = encodeURIComponent(documentName);
-    }
-    const url = [couchUrl, databaseName, documentName].join('/');
-
-    checkForDocumentCreated(url, helpers.maxWaitTime, () => {
-      this.emit('complete');
-    });
-
-  });
-
-  return this;
-};
-
-module.exports = CreateDocument;
diff --git a/test/nightwatch_tests/custom-commands/createManyDocuments.js b/test/nightwatch_tests/custom-commands/createManyDocuments.js
deleted file mode 100644
index 4aa55da..0000000
--- a/test/nightwatch_tests/custom-commands/createManyDocuments.js
+++ /dev/null
@@ -1,44 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function CreateManyDocuments () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateManyDocuments, events.EventEmitter);
-
-CreateManyDocuments.prototype.command = function (amount, databaseName) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url),
-      database = nano.use(databaseName),
-      docs = [];
-
-  for (var i = 0; i < 100; i++) {
-    docs.push({"_id": "" + i, "dummyKey": "testingValue"});
-  }
-
-  database.bulk({docs: docs}, function (err, body, header) {
-    if (err) {
-      throw err;
-    }
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CreateManyDocuments;
diff --git a/test/nightwatch_tests/custom-commands/deleteDatabase.js b/test/nightwatch_tests/custom-commands/deleteDatabase.js
deleted file mode 100644
index 407b22c..0000000
--- a/test/nightwatch_tests/custom-commands/deleteDatabase.js
+++ /dev/null
@@ -1,39 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function DeleteDatabase () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(DeleteDatabase, events.EventEmitter);
-
-DeleteDatabase.prototype.command = function (databaseName) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url);
-
-  nano.db.destroy(databaseName, function (err, body, header) {
-    if (err) {
-      console.log('Error in nano DeleteDatabase Function: ' + databaseName, err.message);
-    }
-    console.log('nano - database: ' + databaseName + ' is deleted: ', body);
-    // emit the complete event
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = DeleteDatabase;
diff --git a/test/nightwatch_tests/custom-commands/deleteDocument.js b/test/nightwatch_tests/custom-commands/deleteDocument.js
deleted file mode 100644
index 3e39897..0000000
--- a/test/nightwatch_tests/custom-commands/deleteDocument.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function DeleteDocument () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(DeleteDocument, events.EventEmitter);
-
-//  !!!!!   documentName must be all lowercase for this to work
-
-DeleteDocument.prototype.command = function (databaseName, documentName) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url),
-      database = nano.use(databaseName),
-      documentRev;
-
-  database.get(documentName, function (err, body) {
-    if (!err) {
-      documentRev = body._rev;
-
-      database.destroy(documentName, documentRev, function (err, body, header) {
-        if (err) {
-          console.log('Error in nano DeleteDocument Function: (' + databaseName + ')', err.message);
-        }
-        console.log('nano - document: ' + documentName + ' in ' + databaseName + ' is deleted: ', body);
-      });
-
-    } else {
-      console.log("Error in nano- Get documentRev", err.message);
-    }
-    // emit the complete event
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = DeleteDocument;
diff --git a/test/nightwatch_tests/custom-commands/helper.js b/test/nightwatch_tests/custom-commands/helper.js
deleted file mode 100644
index 1c3c187..0000000
--- a/test/nightwatch_tests/custom-commands/helper.js
+++ /dev/null
@@ -1,56 +0,0 @@
-const request = require('request');
-
-exports.checkForDocumentCreated = function checkForDocumentCreated (url, timeout, cb) {
-
-  const timeOutId = setTimeout(() => {
-    throw new Error('timeout waiting for doc to appear (' + url + ')');
-  }, timeout);
-
-  const intervalId = setInterval(() => {
-
-    request(url, (er, res, body) => {
-      if (res && /^2..$/.test(res.statusCode)) {
-        clearTimeout(timeOutId);
-        clearInterval(intervalId);
-
-        cb(null);
-      }
-    });
-  }, 1000);
-};
-
-exports.checkForDatabaseCreated = function checkForDatabaseCreated (couchUrl, databaseName, timeout, cb) {
-  const timeOutId = setTimeout(() => {
-    throw new Error('Timeout ('+timeout+') waiting for db to appear');
-  }, timeout);
-
-  const intervalId = setInterval(() => {
-    request(couchUrl + '/_all_dbs', function (er, res, body) {
-      if (body) {
-        const reg = new RegExp('"' + databaseName + '"', 'g');
-        if (reg.test(body)) {
-          clearTimeout(timeOutId);
-          clearInterval(intervalId);
-          cb(null);
-        }
-      }
-    });
-  }, 1000);
-};
-
-exports.checkForDocumentDeleted = function checkForDocumentDeleted (couchUrl, timeout, cb) {
-  const timeOutId = setTimeout(() => {
-    throw new Error('timeout waiting for doc to be deleted');
-  }, timeout);
-
-  const intervalId = setInterval(() => {
-    request(couchUrl, function (er, res, body) {
-      if (res.statusCode === 404) {
-        clearTimeout(timeOutId);
-        clearInterval(intervalId);
-        cb(null);
-      }
-    });
-  }, 1000);
-
-};
diff --git a/test/nightwatch_tests/custom-commands/populateDatabase.js b/test/nightwatch_tests/custom-commands/populateDatabase.js
deleted file mode 100644
index 65a1cbf..0000000
--- a/test/nightwatch_tests/custom-commands/populateDatabase.js
+++ /dev/null
@@ -1,154 +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.
-'use strict';
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    async = require('async'),
-    request = require('request');
-
-function PopulateDatabase () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(PopulateDatabase, events.EventEmitter);
-
-PopulateDatabase.prototype.command = function (databaseName, count) {
-  const nano = helpers.getNanoInstance(this.client.options.db_url);
-  const database = nano.use(databaseName);
-  const db_url = this.client.options.db_url;
-  let i = 0;
-
-  async.whilst(
-    () => { return i < (count ? count : 20); },
-    (cb)  => {
-      i++;
-      var documentId = 'document_' + i;
-      database.insert({
-        number: i,
-        ente_ente_mango_ananas: i,
-        ente_ente_mango_ananas_res: 'foo'
-      }, documentId, cb);
-    },
-    (err) => {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          ' in database: ' + databaseName, err.message);
-      }
-
-      database.insert({
-        views: {
-          "stubview": {
-            "map": "function(doc) {\n  emit('stub', 2);\n}",
-            "reduce": "_count"
-          }
-        }
-      },
-      '_design/testdesigndoc', (er) => {
-        if (err) {
-          console.log('Error in nano populateDatabase Function: ' +
-            err.message);
-        }
-
-        createKeyView(null, () => {
-          createBrokenView(null, () => {
-            createMangoIndex(null, db_url, () => {
-              this.emit('complete');
-            });
-          });
-        });
-      });
-    }
-  );
-
-  function createKeyView (err, cb) {
-    database.insert({
-      views: {
-        "keyview": {
-          "map": "function(doc) {\n  emit(doc._id, 1);\n}"
-        }
-      }
-    },
-    '_design/keyview', function (er) {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-      cb();
-    });
-  }
-
-  function createBrokenView (err, cb) {
-    database.insert({
-      views: {
-        'brokenview': {
-          'map': 'function (doc) {\n emit(doc._id, doc._id); \n}',
-          'reduce': '_sum'
-        }
-      }
-    },
-    '_design/brokenview', function (er) {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-      cb();
-    });
-  }
-
-  function createConflictDesignDoc (err, db_url, cb) {
-    request({
-      uri: db_url + '/' + databaseName + '/_index',
-      method: 'PUT',
-      json: true,
-      body: {
-        _id: "_design/conflicts",
-        language: "javascript",
-        "views":{"new-view":{"map":"function (doc) {\n  emit(doc._id, 1);\n}"}}
-      }
-    }, (err, res, body) => {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-
-      cb(null);
-    });
-  }
-
-  function createMangoIndex (err, db_url, cb) {
-    request({
-      uri: db_url + '/' + databaseName + '/_index',
-      method: 'POST',
-      json: true,
-      body: {
-        index: {
-          fields: ['ente_ente_mango_ananas']
-        },
-        name: 'rocko-artischockbert',
-        type: 'json'
-      }
-    }, function (err, res, body) {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-
-      cb && cb();
-    });
-  }
-
-  return this;
-};
-
-module.exports = PopulateDatabase;
diff --git a/test/nightwatch_tests/custom-commands/populateDatabaseWithConflicts.js b/test/nightwatch_tests/custom-commands/populateDatabaseWithConflicts.js
deleted file mode 100644
index 38efec8..0000000
--- a/test/nightwatch_tests/custom-commands/populateDatabaseWithConflicts.js
+++ /dev/null
@@ -1,75 +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.
-
-const util = require('util');
-const events = require('events');
-const helpers = require('../helpers/helpers.js');
-const request = require('request');
-
-function PopulateDatabaseWithConflicts () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(PopulateDatabaseWithConflicts, events.EventEmitter);
-
-PopulateDatabaseWithConflicts.prototype.command = function (databaseName) {
-  const nano = helpers.getNanoInstance(this.client.options.db_url);
-  const database = nano.use(databaseName);
-  const dbUrl = this.client.options.db_url;
-
-
-  database.insert({
-    hat: 'flamingo'
-  }, 'outfit1', function () {
-    createConflictingDoc(null, function () {
-      this.emit('complete');
-    }.bind(this));
-  }.bind(this));
-
-  function createConflictingDoc (err, cb) {
-    request({
-      uri: dbUrl + '/' + databaseName + '/conflictingdoc',
-      method: 'PUT',
-      json: true,
-      body: {
-        id: 'conflictingdoc',
-        rocko: 'dances'
-      }
-    }, function (err, res, body) {
-      if (err) {
-        console.log(
-          'Error in nano populateDatabase Function: ' + err.message
-        );
-      }
-      request({
-        uri: dbUrl + '/' + databaseName + '/conflictingdoc?new_edits=false',
-        method: 'PUT',
-        json: true,
-        body: {
-          _rev: '4-afae890a0310210db079b0f49fb2569d',
-          rocko: 'jumps'
-        }
-      }, function (err, res, body) {
-        if (err) {
-          console.log('Error in nano populateDatabase Function: ' +
-            err.message);
-        }
-
-        cb && cb();
-      });
-    });
-  }
-
-  return this;
-};
-
-module.exports = PopulateDatabaseWithConflicts;
diff --git a/test/nightwatch_tests/custom-commands/replicateDatabase.js b/test/nightwatch_tests/custom-commands/replicateDatabase.js
deleted file mode 100644
index 2662ebb..0000000
--- a/test/nightwatch_tests/custom-commands/replicateDatabase.js
+++ /dev/null
@@ -1,46 +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 util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function ReplicateDatabase () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(ReplicateDatabase, events.EventEmitter);
-
-ReplicateDatabase.prototype.command = function (source, target, options, callback) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url),
-      opts = options;
-
-
-  if (opts === undefined) {
-    opts = { create_target: false };
-  }
-
-  nano.db.replicate(source, target, { create_target: opts.create_target }, function (err, body) {
-    if (err) {
-      console.log('Nano Error in nano ReplicateDatabase Function: s:' + source + ', t:' + target, err.message);
-    }
-    console.log('Nano - replicated source: ' + source + " target:" + target);
-    // emit the complete event
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = ReplicateDatabase;
diff --git a/test/nightwatch_tests/custom-commands/waitForAttribute.js b/test/nightwatch_tests/custom-commands/waitForAttribute.js
deleted file mode 100644
index d4ec0dd..0000000
--- a/test/nightwatch_tests/custom-commands/waitForAttribute.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) 2014 Dave Koo
-//
-// 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.
-
-const util = require('util');
-const events = require('events');
-const helpers = require('../helpers/helpers.js');
-const assert = require('assert');
-
-/*
- * This custom command allows us to locate an HTML element on the page and then wait until the value of a specified
- * attribute matches the provided expression (aka. the 'checker' function). It retries executing the checker function
- * every 100ms until either it evaluates to true or it reaches maxTimeInMilliseconds (which fails the test).
- * Nightwatch uses the Node.js EventEmitter pattern to handle asynchronous code so this command is also an EventEmitter.
- */
-
-function WaitForAttribute() {
-  events.EventEmitter.call(this);
-  this.startTimeInMilliseconds = null;
-}
-
-util.inherits(WaitForAttribute, events.EventEmitter);
-
-WaitForAttribute.prototype.command = function(
-  element, attribute, checker, timeoutInMilliseconds) {
-  this.startTimeInMilliseconds = new Date().getTime();
-  const self = this;
-  let message;
-
-  if (typeof timeoutInMilliseconds !== 'number') {
-    timeoutInMilliseconds = helpers.maxWaitTime;
-  }
-
-  this.check(element, attribute, checker,
-    function(result, loadedTimeInMilliseconds) {
-      if (result) {
-        message = 'waitForAttribute: ' + element + '@' + attribute +
-          '. Expression was true after ' +
-          (loadedTimeInMilliseconds - self.startTimeInMilliseconds) + ' ms.';
-      } else {
-        message = 'waitForAttribute: ' + element + '@' + attribute +
-          '. Expression wasn\'t true in ' + timeoutInMilliseconds + ' ms.';
-      }
-      assert.equal(result, true, message);
-      self.emit('complete');
-    }, timeoutInMilliseconds);
-
-  return this;
-};
-
-WaitForAttribute.prototype.check = function(
-  element, attribute, checker, callback, maxTimeInMilliseconds) {
-  const self = this;
-
-  this.api.getAttribute(element, attribute, function(result) {
-    const now = new Date().getTime();
-    if (result.status === 0 && checker(result.value)) {
-      callback(true, now);
-    } else if (now - self.startTimeInMilliseconds < maxTimeInMilliseconds) {
-      setTimeout(function() {
-        self.check(element, attribute, checker, callback,
-          maxTimeInMilliseconds);
-      }, 100);
-    } else {
-      callback(false);
-    }
-  });
-};
-
-module.exports = WaitForAttribute;
diff --git a/test/nightwatch_tests/helpers/helpers.js b/test/nightwatch_tests/helpers/helpers.js
deleted file mode 100644
index 817c22d..0000000
--- a/test/nightwatch_tests/helpers/helpers.js
+++ /dev/null
@@ -1,117 +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 nano = require('nano');
-var async = require('async');
-
-
-function getRandomInt(min, max) {
-  return Math.floor(Math.random() * (max - min)) + min;
-}
-
-const dbName = 'fauxton-selenium-tests-' + getRandomInt(1, 20000);
-
-function createDatabase(nano, database) {
-  return nano.db.create(database).catch(err => {
-    //Tolerate database already existing
-    if (err && err.statusCode !== 412) {
-      throw err;
-    }
-  });
-}
-
-module.exports = {
-  asyncHookTimeout: 20000,
-  maxWaitTime: 30000,
-  testDatabaseName: dbName,
-
-  getNanoInstance: function (dbURL) {
-    console.log('DBURL:', dbURL);
-    return nano(dbURL);
-  },
-
-  beforeEach: function (browser, done) {
-    var nano = module.exports.getNanoInstance(browser.options.db_url),
-      database = module.exports.testDatabaseName;
-
-    console.log('nano setting up database', database);
-    // clean up the database we created previously
-    nano.db.destroy(database).catch(err => {
-      if (err && err.message !== 'Database does not exist.' && err.message !== 'missing') {
-        console.log('Error in setting up ' + database, err.message);
-      }
-    }).then(() => {
-      // create a new database
-      nano.db.create(database).catch(err => {
-        console.log('Error in setting up ' + database, err.message);
-      }).then(() => {
-        // Create required dbs
-        const databaseToCreate = ["_users", "_replicator", "_global_changes"];
-        const promises = databaseToCreate.map(db => createDatabase(nano, db).catch(() => {}));
-
-        Promise.all(promises).then(function () {
-          done();
-        }).catch(function (err) {
-          console.log("Unable to create required databases:" + JSON.stringify(err));
-          done();
-        });
-      });
-    });
-  },
-
-  afterEach: function (browser, done) {
-    // Delete test database
-    var nano = module.exports.getNanoInstance(browser.options.db_url),
-      database = module.exports.testDatabaseName;
-
-    console.log('nano cleaning up', database);
-    var destroyDbProm = nano.db.destroy(database).catch(err => {
-      if (err && err.message !== 'Database does not exist.') {
-        console.warn('Error in cleaning up ' + database, err.message);
-      }
-    });
-
-    // Prints the browser's console logs in case it's a failure
-    var promGetLog = Promise.resolve();
-    if (browser && browser.sessionId && browser.currentTest && browser.currentTest.results) {
-      var res = browser.currentTest.results;
-      if (res.errors > 0 || res.failed > 0) {
-        promGetLog = new Promise((resolve, reject) => {
-          try {
-            browser.getLog('browser', (logEntriesArray) => {
-              // !! IMPORTANT: Ends the session since the Nightwatch settings have "end_session_on_fail: false"
-              try {
-                browser.end();
-              } catch (e) {}
-              resolve(logEntriesArray);
-            });
-          } catch (err) {
-            reject(err);
-          }
-        }).catch(err => {
-          console.warn('Failed to fetch browser logs', err);
-        }).then(logEntriesArray => {
-          if (logEntriesArray) {
-            console.warn('Browser logs for failed test:');
-            logEntriesArray.forEach(function(log) {
-              console.warn('   [' + log.level + '] ' + ' : ' + log.message);
-            });
-          }
-        });
-      }
-    }
-
-    Promise.all([promGetLog, destroyDbProm]).then(() => {
-      done();
-    });
-  }
-};
diff --git a/test/nightwatch_tests/nightwatch.json.underscore b/test/nightwatch_tests/nightwatch.json.underscore
deleted file mode 100644
index 8a9bb30..0000000
--- a/test/nightwatch_tests/nightwatch.json.underscore
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "src_folders": <%= src_folders %>,
-  "custom_commands_path": <%= custom_commands_path %>,
-  "globals_path": "<%- globals_path %>",
-
-  "output_folder" : "./test/nightwatch_tests/reports",
-  "custom_assertions_path" : "",
-  "live_output" : false,
-
-  "webdriver": {
-    "ssl": false,
-    "password": "<%- password %>"
-  },
-  "selenium" : {
-    "start_process" : false,
-    "server_path" : "",
-    "log_path" : "",
-    "host" : "127.0.0.1",
-    "port" : "<%- selenium_port %>",
-    "cli_args" : {
-      "webdriver.chrome.driver" : "",
-      "webdriver.ie.driver" : "",
-      "webdriver.firefox.profile" : ""
-    }
-  },
-
-  "test_settings" : {
-    "default" : {
-      "fauxton_username": "<%- fauxton_username %>",
-      "password": "<%- password %>",
-      "launch_url": "http://<%- fauxton_host %>:<%- fauxton_port %>",
-      "db_url": "<%- db_protocol %>://<%- fauxton_username %>:<%- password %>@<%- db_host %>:<%- db_port %>",
-      "end_session_on_fail": false,
-      "skip_testcases_on_fail": true,
-      "selenium_host" : "127.0.0.1",
-      "selenium_port" : "<%- selenium_port %>",
-      "silent" : true,
-      "disable_colors": false,
-      "screenshots" : {
-        "enabled" : true,
-        "path" : "./test/nightwatch_tests/reports"
-      },
-      "desiredCapabilities" : {
-        "browserName" : "chrome",
-        "javascriptEnabled" : true,
-        "acceptSslCerts" : true,
-        "chromeOptions": {
-          "w3c": false
-        }
-      },
-      "exclude": <%= exclude_tests %>,
-      "skiptags": <%= skiptags %>
-    },
-
-    "chrome" : {
-      "desiredCapabilities" : {
-        "browserName" : "chrome",
-        "javascriptEnabled" : true,
-        "acceptSslCerts" : true,
-        "chromeOptions" : {
-          "args" : ["window-size=1400,900", "--no-sandbox"]
-        }
-      }
-    },
-
-    "saucelabs" : {
-      "selenium_host" : "ondemand.saucelabs.com",
-      "selenium_port" : 80,
-      "username" : "${SAUCE_USERNAME}",
-      "access_key" : "${SAUCE_ACCESS_KEY}",
-      "silent" : true,
-      "output" : true,
-      "screenshots" : {
-        "enabled" : false,
-        "path" : ""
-      },
-      "desiredCapabilities": {
-        "name" : "test-example",
-        "browserName": "chrome",
-        "tunnel-identifier":"${TRAVIS_JOB_NUMBER}"
-      },
-      "globals" : {
-        "myGlobal" : "some_sauce_global"
-      },
-      "selenium" : {
-        "start_process" : false
-      }
-    },
-
-    "phantomjs" : {
-      "desiredCapabilities" : {
-        "browserName" : "phantomjs",
-        "javascriptEnabled" : true,
-        "acceptSslCerts" : true,
-        "phantomjs.binary.path" : "/path/to/phantomjs"
-      }
-    },
-
-    "browserstack" : {
-      "selenium" : {
-        "start_process" : false
-      },
-      "selenium_host" : "hub.browserstack.com",
-      "selenium_port" : 80,
-      "silent" : true,
-      "desiredCapabilities": {
-        "name" : "test-example",
-        "browserName": "firefox",
-        "browserstack.user" : "...",
-        "browserstack.key" : "..."
-      }
-    }
-  }
-}
diff --git a/test/nightwatch_tests/nightwatch_README.md b/test/nightwatch_tests/nightwatch_README.md
deleted file mode 100644
index a9482de..0000000
--- a/test/nightwatch_tests/nightwatch_README.md
+++ /dev/null
@@ -1,87 +0,0 @@
-## Nightwatch Functional Browser Test
-
-Hello.
-
-[Nightwatch Homepage](http://nightwatchjs.org/)   
-[Nightwatch GitHub Repo](https://github.com/beatfactor/nightwatch)
-
-There are several nightwatch tests already written for Fauxton.
-
-Before running the browser tests, you need to first set it up. Editing your `settings.json` file (or
-`settings.json.default` or whatever you're using) and find the following section near the bottom:  
-
-```javascript
-    "nightwatch": {
-      "username": "",
-      "password": "",
-      "launch_url": "",
-      "custom_commands_path": "test/nightwatch_tests/custom-commands",
-      "globals_path": "test/nightwatch_tests/helpers/helpers.js"
-    }
-```
-
-There, add the `username`, `password` and `launch_url` values. The username and password needs to be an admin
-account already setup on your CouchDB installation. The `launch_url` should be the base URL of your local installation,
-minus the "http://" prefix, e.g. `localhost:8000` or `thomas.dev:8000`.
-
-To run the test:
-
-    $ npm install
-    $ grunt nightwatch
-
-
-You can run individual single tests by running
-
-    $ grunt nightwatch --file="createsDatabase"
-
-if you want to run the testfile `createsDatabase.js`.
-
-## Writing Tests
-You can contribute by writing tests for Fauxton as well.  
-
-Please take a look at the existing examples in the `app/addons/documents/tests` or `app/addons/databases/tests` folders.
-
-Below are a few caveats to writing tests.
-
-1. When you write a new test, if the component you are testing doesn't have any nightwatch tests already, you will
-need to create a folder for it, and add its file path to the list of test folders in `tests/nightwatch_test/nightwatch.json`.
-1. Before each test is run, a database called'fauxton-selenium-test' is created, then deleted after each test.
-2. Use `.verify()` instead of `.assert()` in your tests. This will allow the tests to continue, even if the browser
-has failed, and will not exit or skip subsequent tests.
-3. `.waitForElementNotPresent()`, `.waitForElementNotVisible()`, `.waitForElementPresent()`, `.waitForElementVisible()`,
-will exit testing by default if the Element is not found. There is a third argument, 'abortOnFailure', if you set this
-to 'false', the rest of the tests will continue even if this assertion fails.
-> there is a custom function called clickWhenReady which will wait for an element to visible, then click on it
-
-4. Sometimes `.click()` doesn't work reliably (most likely if the element you are clicking on doesn't have an
-individual ID selector). You can use dom selectors to simulate a click by using `.execute('document.querySelector("#CSS Selector.HERE").click();')`.  
-5. The function `.pause(time)` is sometimes necessary, although we have tried to avoid excessive use of a hard coded 
-pausing. Instead try and make use of the `.waitForElement` functions instead of `.pause(time)`.
-
-## Nightwatch Files in Fauxton
-There are several Nightwatch related files spread out in the couchdb-fauxton folder.
-
-1. Individual browser tests are kept in
-
-        couchdb-fauxton/app/addons/[component]/test/nightwatch
-
-    where [component] is the area you are testing. For example, there is an individual test located in:
-
-        couchdb-fauxton/app/addons/documents/tests/nightwatch/createsDocument.js
-
-2. Custom Commands, Global helper functions, and the Configuration are kept in
-
-        couchdb-fauxton/tests/nightwatch_tests
-
-   The configuration file is `nightwatch.json`. Please note that this file is auto-generated by grunt every time you
-   run the nightwatch task. It examines the content of your `settings.json` file to figure out what tests to run.
-   Global helper functions are in `helpers/helpers.js`.  
-   Custom commands are `custom-commands/functionName.js`.
-   -  The custom command name is the name of the file itself, and it needs to follow either the `loginToGUI.js`
-   pattern, or the `createDatabase.js` pattern (for async commands).    
-
-   Selenium related files are kept in the `selenium` folder
-
-3. Node  
-
-   The folder `node_modules/nightwatch` contains the program files. You will not need to edit these files, but there are some provided examples in there to look at.
diff --git a/tests.md b/tests.md
deleted file mode 100644
index e9033f0..0000000
--- a/tests.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Tests
-
-Fauxton has both **unit tests**, implemented with [Jest](https://facebook.github.io/jest/), and **end-to-end tests** using [Nightwatch](http://nightwatchjs.org/) against Selenium.
-
-## Unit tests
-
-To run all tests:
-
-    npm run test
-    
-You can run only specific tests by providing a pattern or filename.
-
-E.g.: to run tests in the `filename.test.js` file:
-
-    npm run test -- filename.test.js
-
-E.g.: to run tests under the `addons/cors` path:
-
-    npm run test -- addons/cors
-
-## End-to-end tests
-
-To run selenium locally you need Docker installed. Selenium runs in a Docker container and connects to a CouchDB instance in another container. To start them run the command:
-
-    npm run docker:up
-
-You can run `npm run docker:logs` to see when the CouchDB instance is ready to go. You also need a Fauxton server instance runnning:
-
-    grunt debugDev && DIST=./dist/debug ./bin/fauxton
-
-Finally to run the tests:
-
-    grunt nightwatch
-
-Or to run only one file:
-
-    grunt nightwatch --file=viewEdit
-
-View the package.json `scripts` section for some other useful docker commands.
-
-### Debugging Selenium tests
-
-To debug and view a failing selenium test, you need to run the selenium container with vnc built into it:
-
-    npm run docker:debug-up
-
-Once it is up and running you can connect to it with any VNC client on `127.0.0.1:5900`. On MacOSX open safari
-and type `vnc://127.0.0.1:5900`. That will open screen sharing. It will then prompt for the password which is `secret`.
-
-After that run a Fauxton server instance and the nightwatch tests you want to debug.
-
-
-### Omitting Nightwatch tests
-
-If you need to omit particular tests from running you can add a `testBlacklist` option to the nightwatch section of
-your settings.json file. That defines an object of the following form:
-
-```javascript
-// ...
-"nightwatch": { 
-  // ...
-  "testBlacklist": {
-    "documents": ["*"],
-    "databases": [
-      "checkDatabaseTooltip.js",
-      "createsDatabase.js"
-    ]
-  }
-}
-// ...
-
-```
-
-The properties (`documents`, `databases`) map to a particular addon folder name (see `app/addons`). The values
-should be an array of tests that you don't want to run. `*` will flag all tests from being ran, otherwise you
-just enter the names of the files to omit.
-
-### Cleaning up old tests
-
-Each test run generates a new database. Sometimes these databases will not be removed. You can run `npm run remove-test-dbs` to clean up any left over databases.
diff --git a/version-check.js b/version-check.js
deleted file mode 100644
index c8f6c23..0000000
--- a/version-check.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var semver = require('semver');
-
-var version = process.version.replace(/^v/, '');
-
-if (!semver.satisfies(version, '>=4')) {
-  console.error('Error:');
-  console.error('Fauxton needs Node 4 or greater to work');
-  process.exit(1);
-}
diff --git a/webpack.config.dev.js b/webpack.config.dev.js
deleted file mode 100644
index bb8cb07..0000000
--- a/webpack.config.dev.js
+++ /dev/null
@@ -1,121 +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.
-const webpack = require('webpack');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const path = require('path');
-const settings = require('./tasks/helper')
-  .init()
-  .readSettingsFile()
-  .template
-  .development;
-
-module.exports = {
-
-  mode: 'development',
-
-  entry: {
-    bundle: ['core-js/fn/array', 'core-js/fn/string/ends-with', 'core-js/fn/string/starts-with', 'core-js/fn/object', 'core-js/fn/symbol', 'core-js/fn/promise', 'regenerator-runtime/runtime', './app/main.js'] //Our starting point for our development.
-  },
-
-  output: {
-    path: path.join(__dirname, '/dist/debug/'),
-    filename: 'dashboard.assets/js/[name].js'
-  },
-
-  plugins: [
-    new webpack.optimize.LimitChunkCountPlugin({maxChunks: 1}),
-    new HtmlWebpackPlugin(Object.assign({
-      template: settings.src,
-      title: 'Project Fauxton',
-      filename: 'index.html',
-      generationLabel: 'Fauxton Dev',
-      generationDate: new Date().toISOString()
-    }, settings.variables)),
-  ],
-  module: {
-    rules: [
-      {
-        test: /\.jsx?$/,
-        enforce: "pre",
-        use: ['eslint-loader'],
-        exclude: /node_modules/
-      },
-      {
-        test: /\.jsx?$/,
-        exclude: /node_modules/,
-        use: 'babel-loader'
-      },
-      {
-        test: require.resolve('jquery'),
-        use: [{
-          loader: 'expose-loader',
-          options: 'jQuery'
-        },
-        {
-          loader: 'expose-loader',
-          options: '$'
-        }]
-      },
-      {
-        test: require.resolve("backbone"),
-        use: [{
-          loader: 'expose-loader',
-          options: 'Backbone'
-        }]
-      },
-      {
-        test: /\.less$/,
-        use: [
-          "style-loader",
-          "css-loader",
-          {
-            loader: "less-loader",
-            options: {
-              modifyVars: {
-                largeLogoPath: "'" + settings.variables.largeLogoPath + "'",
-                smallLogoPath: "'" + settings.variables.smallLogoPath + "'"
-              }
-            }
-          }
-        ]
-      },
-      {
-        test: /\.css$/,
-        use: [
-          "style-loader",
-          "css-loader"
-        ]
-      },
-      {
-        test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
-        loader: 'url-loader?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
-      },
-      {
-        test: /\.woff2(\?\S*)?$/,   loader: 'url-loader?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
-      },
-      {
-        test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
-      },
-      { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/fonts/[name].[ext]' },
-      { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-      { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-      { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
-    ]
-  },
-  resolve: {
-    extensions: ['*', '.js', '.jsx'], //We can use .js and React's .jsx files using Babel
-    alias: {
-      "underscore": "lodash",
-    }
-  },
-  devtool: 'source-map'
-};
diff --git a/webpack.config.release.js b/webpack.config.release.js
deleted file mode 100644
index 6063a16..0000000
--- a/webpack.config.release.js
+++ /dev/null
@@ -1,152 +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.
-const webpack = require('webpack');
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const path = require('path');
-const settings = require('./tasks/helper')
-  .init()
-  .readSettingsFile()
-  .template
-  .release;
-
-module.exports = {
-
-  mode: 'production',
-
-  // Entry point for static analyzer:
-  entry: {
-    bundle: ['core-js/fn/array', 'core-js/fn/string/ends-with', 'core-js/fn/string/starts-with',  'core-js/fn/object', 'core-js/fn/symbol', 'core-js/fn/promise', 'regenerator-runtime/runtime', './app/main.js']
-  },
-
-  output: {
-    path: path.join(__dirname, '/dist/release/'),
-    filename: 'dashboard.assets/js/[name].[chunkhash].js',
-    chunkFilename: 'dashboard.assets/js/[name].[chunkhash].js'
-  },
-
-  plugins: [
-    // moment doesn't offer a modular API, so manually remove locale
-    // see https://github.com/moment/moment/issues/2373
-    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
-    new HtmlWebpackPlugin(Object.assign({
-      template: settings.src,
-      title: 'Project Fauxton',
-      filename: 'index.html',
-      generationLabel: 'Fauxton Release',
-      generationDate: new Date().toISOString()
-    }, settings.variables)),
-    new MiniCssExtractPlugin({
-      filename: 'dashboard.assets/css/styles.[chunkhash].css',
-      chunkFilename: 'dashboard.assets/css/styles.[chunkhash].css'
-    })
-  ],
-
-  optimization: {
-    splitChunks: {
-      cacheGroups: {
-        vendor: {
-          test: /[\\/]node_modules[\\/]/,
-          chunks: 'initial',
-          name: 'vendor',
-          priority: 10,
-          enforce: true
-        },
-      }
-    },
-    runtimeChunk: {
-      name: "manifest",
-    }
-  },
-
-  resolve: {
-    extensions: ['*', '.js', '.jsx'],
-    alias: {
-      "underscore": "lodash"
-    }
-  },
-
-  module: {
-    rules: [{
-      test: /\.jsx?$/,
-      enforce: "pre",
-      use: ['eslint-loader'],
-      exclude: /node_modules/
-    },
-    {
-      test: /\.jsx?$/,
-      exclude: /node_modules/,
-      use: 'babel-loader'
-    },
-    {
-      test: require.resolve('jquery'),
-      use: [{
-        loader: 'expose-loader',
-        options: 'jQuery'
-      },
-      {
-        loader: 'expose-loader',
-        options: '$'
-      }]
-    },
-    {
-      test: require.resolve("backbone"),
-      use: [{
-        loader: 'expose-loader',
-        options: 'Backbone'
-      }]
-    },
-    {
-      test: /\.less/,
-      use: [
-        {
-          loader: MiniCssExtractPlugin.loader,
-          options: {
-            publicPath: '../../',
-            hmr: false,
-          },
-        },
-        "css-loader",
-        {
-          loader: "less-loader",
-          options: {
-            modifyVars: {
-              largeLogoPath: "'" + settings.variables.largeLogoPath + "'",
-              smallLogoPath: "'" + settings.variables.smallLogoPath + "'"
-            }
-          }
-        }
-      ]
-    },
-    {
-      test: /\.css$/, use: [
-        'style-loader',
-        'css-loader'
-      ]
-    },
-    {
-      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
-      loader: 'url-loader?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
-    },
-    {
-      test: /\.woff2(\?\S*)?$/,   loader: 'url-loader?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
-    },
-    {
-      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
-    },
-    { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/fonts/[name].[ext]' },
-    { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-    { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-    { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
-    ]
-  }
-};