Backed out changeset 35986e7aa356 (bug 1325401) for unknown -webkit-scrollbar in reps.css. r=backout
authorSebastian Hengst <archaeopteryx@coole-files.de>
Tue, 10 Jan 2017 00:40:28 +0100
changeset 458373 abb4c9666456dcbb7a05eb7093e73ba8098afb06
parent 458372 ed86677f5638e2b71da69ea5f3ef45f62e7ecee1
child 458374 995e28d4bec9c68d3caf7a32976e478a8caca79d
push id40935
push userbmo:cam@mcc.id.au
push dateTue, 10 Jan 2017 07:11:37 +0000
reviewersbackout
bugs1325401
milestone53.0a1
backs out35986e7aa356808141490d526d7eb417d5ab5992
Backed out changeset 35986e7aa356 (bug 1325401) for unknown -webkit-scrollbar in reps.css. r=backout
devtools/client/preferences/devtools.js
devtools/client/shared/components/moz.build
devtools/client/shared/components/reps.css
devtools/client/shared/components/reps.js
devtools/client/webconsole/new-console-output/components/grip-message-body.js
--- a/devtools/client/preferences/devtools.js
+++ b/devtools/client/preferences/devtools.js
@@ -319,19 +319,16 @@ pref("devtools.webconsole.autoMultiline"
 
 // Enable the experimental webconsole frontend
 #if defined(NIGHTLY_BUILD)
 pref("devtools.webconsole.new-frontend-enabled", true);
 #else
 pref("devtools.webconsole.new-frontend-enabled", false);
 #endif
 
-// Enable loading reps from a bundle
-pref("devtools.webconsole.use-reps-bundle", false);
-
 // Enable the experimental support for source maps in console (work in progress)
 pref("devtools.sourcemap.locations.enabled", false);
 
 // The number of lines that are displayed in the web console.
 pref("devtools.hud.loglimit", 1000);
 
 // The number of lines that are displayed in the web console for the Net,
 // CSS, JS and Web Developer categories. These defaults should be kept in sync
--- a/devtools/client/shared/components/moz.build
+++ b/devtools/client/shared/components/moz.build
@@ -11,18 +11,16 @@ DIRS += [
     'tree'
 ]
 
 DevToolsModules(
     'frame.js',
     'h-split-box.js',
     'notification-box.css',
     'notification-box.js',
-    'reps.css',
-    'reps.js',
     'search-box.js',
     'sidebar-toggle.css',
     'sidebar-toggle.js',
     'stack-trace.js',
     'tree.js',
 )
 
 MOCHITEST_CHROME_MANIFESTS += ['test/mochitest/chrome.ini']
deleted file mode 100644
--- a/devtools/client/shared/components/reps.css
+++ /dev/null
@@ -1,533 +0,0 @@
-/* vim:set ts=2 sw=2 sts=2 et: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-.theme-dark,
-.theme-light {
-  --number-color: var(--theme-highlight-green);
-  --string-color: var(--theme-highlight-orange);
-  --null-color: var(--theme-comment);
-  --object-color: var(--theme-body-color);
-  --caption-color: var(--theme-highlight-blue);
-  --location-color: var(--theme-content-color1);
-  --source-link-color: var(--theme-highlight-blue);
-  --node-color: var(--theme-highlight-bluegrey);
-  --reference-color: var(--theme-highlight-purple);
-}
-
-.theme-firebug {
-  --number-color: #000088;
-  --string-color: #FF0000;
-  --null-color: #787878;
-  --object-color: DarkGreen;
-  --caption-color: #444444;
-  --location-color: #555555;
-  --source-link-color: blue;
-  --node-color: rgb(0, 0, 136);
-  --reference-color: rgb(102, 102, 255);
-}
-
-/******************************************************************************/
-
-.objectLink:hover {
-  cursor: pointer;
-  text-decoration: underline;
-}
-
-.inline {
-  display: inline;
-  white-space: normal;
-}
-
-.objectBox-object {
-  font-weight: bold;
-  color: var(--object-color);
-  white-space: pre-wrap;
-}
-
-.objectBox-string,
-.objectBox-text,
-.objectLink-textNode,
-.objectBox-table {
-  white-space: pre-wrap;
-}
-
-.objectBox-number,
-.objectLink-styleRule,
-.objectLink-element,
-.objectLink-textNode,
-.objectBox-array > .length {
-  color: var(--number-color);
-}
-
-.objectBox-string {
-  color: var(--string-color);
-}
-
-.objectLink-function,
-.objectBox-stackTrace,
-.objectLink-profile {
-  color: var(--object-color);
-}
-
-.objectLink-Location {
-  font-style: italic;
-  color: var(--location-color);
-}
-
-.objectBox-null,
-.objectBox-undefined,
-.objectBox-hint,
-.logRowHint {
-  font-style: italic;
-  color: var(--null-color);
-}
-
-.objectLink-sourceLink {
-  position: absolute;
-  right: 4px;
-  top: 2px;
-  padding-left: 8px;
-  font-weight: bold;
-  color: var(--source-link-color);
-}
-
-/******************************************************************************/
-
-.objectLink-event,
-.objectLink-eventLog,
-.objectLink-regexp,
-.objectLink-object,
-.objectLink-Date {
-  font-weight: bold;
-  color: var(--object-color);
-  white-space: pre-wrap;
-}
-
-/******************************************************************************/
-
-.objectLink-object .nodeName,
-.objectLink-NamedNodeMap .nodeName,
-.objectLink-NamedNodeMap .objectEqual,
-.objectLink-NamedNodeMap .arrayLeftBracket,
-.objectLink-NamedNodeMap .arrayRightBracket,
-.objectLink-Attr .attrEqual,
-.objectLink-Attr .attrTitle {
-  color: var(--node-color);
-}
-
-.objectLink-object .nodeName {
-  font-weight: normal;
-}
-
-/******************************************************************************/
-
-.objectLeftBrace,
-.objectRightBrace,
-.arrayLeftBracket,
-.arrayRightBracket {
-  cursor: pointer;
-  font-weight: bold;
-}
-
-.objectLeftBrace,
-.arrayLeftBracket {
-  margin-right: 4px;
-}
-
-.objectRightBrace,
-.arrayRightBracket {
-  margin-left: 4px;
-}
-
-/******************************************************************************/
-/* Cycle reference*/
-
-.objectLink-Reference {
-  font-weight: bold;
-  color: var(--reference-color);
-}
-
-.objectBox-array > .objectTitle {
-  font-weight: bold;
-  color: var(--object-color);
-}
-
-.caption {
-  font-weight: bold;
-  color:  var(--caption-color);
-}
-
-/******************************************************************************/
-/* Themes */
-
-.theme-dark .objectBox-null,
-.theme-dark .objectBox-undefined,
-.theme-light .objectBox-null,
-.theme-light .objectBox-undefined {
-  font-style: normal;
-}
-
-.theme-dark .objectBox-object,
-.theme-light .objectBox-object {
-  font-weight: normal;
-  white-space: pre-wrap;
-}
-
-.theme-dark .caption,
-.theme-light .caption {
-  font-weight: normal;
-}
-:root.theme-light,
-:root .theme-light {
-  --theme-search-overlays-semitransparent: rgba(221, 225, 228, 0.66);
-}
-
-* {
-  box-sizing: border-box;
-}
-
-html,
-body {
-  height: 100%;
-  margin: 0;
-  padding: 0;
-  width: 100%;
-}
-
-#mount {
-  display: flex;
-  height: 100%;
-}
-
-::-webkit-scrollbar {
-  width: 8px;
-  height: 8px;
-  background: transparent;
-}
-
-::-webkit-scrollbar-track {
-  border-radius: 8px;
-  background: transparent;
-}
-
-::-webkit-scrollbar-thumb {
-  border-radius: 8px;
-  background: rgba(113, 113, 113, 0.5);
-}
-
-:root.theme-dark .CodeMirror-scrollbar-filler {
-  background: transparent;
-}
-.landing-page {
-  flex: 1;
-  display: flex;
-  width: 100vw;
-  height: 100vh;
-  flex-direction: row;
-  align-items: stretch;
-  /* Customs properties */
-  --title-font-size: 24px;
-  --ui-element-font-size: 16px;
-  --primary-line-height: 30px;
-  --secondary-line-height: 25px;
-  --base-spacing: 20px;
-  --base-transition: all 0.25s ease;
-}
-
-.landing-page .sidebar {
-  display: flex;
-  background-color: var(--theme-tab-toolbar-background);
-  width: 200px;
-  flex-direction: column;
-  border-right: 1px solid var(--theme-splitter-color);
-}
-
-.landing-page .sidebar h1 {
-  color: var(--theme-body-color);
-  font-size: var(--title-font-size);
-  margin: 0;
-  line-height: var(--primary-line-height);
-  font-weight: normal;
-  padding: calc(2 * var(--base-spacing)) var(--base-spacing);
-}
-
-.landing-page .sidebar ul {
-  list-style: none;
-  padding: 0;
-  line-height: var(--primary-line-height);
-  font-size: var(--ui-element-font-size);
-}
-
-.landing-page .sidebar li {
-  padding: calc(var(--base-spacing) / 4) var(--base-spacing);
-}
-
-.landing-page .sidebar li a {
-  color: var(--theme-body-color);
-}
-
-.landing-page .sidebar li.selected {
-  background: var(--theme-highlight-bluegrey);
-  color: var(--theme-selection-color);
-  transition: var(--base-transition);
-}
-
-.landing-page .sidebar li.selected a {
-  color: inherit;
-}
-
-.landing-page .sidebar li:hover,
-.landing-page .sidebar li:focus {
-  background: var(--theme-selection-background);
-  color: var(--theme-selection-color);
-  cursor: pointer;
-}
-
-.landing-page .sidebar li:hover a,
-.landing-page .sidebar li:focus a {
-  color: inherit;
-}
-
-.landing-page .panel {
-  display: flex;
-  flex: 1;
-  flex-direction: column;
-  justify-content: space-between;
-}
-
-.landing-page .panel header {
-  display: flex;
-  align-items: baseline;
-  margin: calc(2 * var(--base-spacing)) 0 0;
-  padding-bottom: var(--base-spacing);
-}
-
-.landing-page .panel header input {
-  flex: 1;
-  color: var(--theme-body-color);
-  font-size: var(--ui-element-font-size);
-  border: 1px solid var(--theme-splitter-color);
-  padding: calc(var(--base-spacing) / 2);
-  margin: 0 var(--base-spacing);
-  transition: var(--base-transition);
-}
-
-.landing-page .panel header input:focus {
-  border: 1px solid var(--theme-selection-background);
-}
-
-.landing-page .panel .center-message {
-  font-size: var(--ui-element-font-size);
-  line-height: var(--secondary-line-height);
-  padding: calc(var(--base-spacing) / 2);
-}
-
-.landing-page .center a {
-  color: var(--theme-highlight-bluegrey);
-  text-decoration: none;
-}
-
-.landing-page .tab-group {
-  flex: 1;
-  overflow-y: auto;
-}
-
-.landing-page .tab-list {
-  list-style: none;
-  padding: 0;
-  margin: 0;
-}
-
-.landing-page .tab {
-  border-bottom: 1px solid var(--theme-splitter-color);
-  padding: calc(var(--base-spacing) / 2) var(--base-spacing);
-  font-family: sans-serif;
-}
-
-.landing-page .tab-title {
-  line-height: var(--secondary-line-height);
-  font-size: var(--ui-element-font-size);
-  color: var(--theme-highlight-bluegrey);
-  word-break: break-all;
-}
-
-.landing-page .tab-url {
-  color: var(--theme-comment);
-  word-break: break-all;
-}
-
-.landing-page .tab:focus,
-.landing-page .tab.active {
-  background: var(--theme-selection-background);
-  color: var(--theme-selection-color);
-  cursor: pointer;
-  transition: var(--base-transition);
-}
-
-.landing-page .tab:focus .tab-title,
-.landing-page .tab.active .tab-title {
-  color: inherit;
-}
-
-.landing-page .tab:focus .tab-url,
-.landing-page .tab.active .tab-url {
-  color: var(--theme-highlight-gray);
-}
-
-.landing-page .panel .footer-note {
-  padding: var(--base-spacing) 0;
-  text-align: center;
-  font-size: 14px;
-  color: var(--theme-comment);
-}
-.quick-links {
-  display: flex;
-  justify-content: center;
-  flex-wrap: wrap;
-  background: rgba(255,255,255,0.25);
-  padding: 0.5rem 1rem;
-}
-
-.quick-links button {
-  font-size: 1.2rem;
-  background: none;
-  border: none;
-  color: white;
-  margin: 0.5rem 0.25rem;
-  cursor: pointer;
-}
-.console-header {
-  background: var(--theme-highlight-pink);
-  color: white;
-  margin: 0;
-}
-
-.console-header form {
-  display: flex;
-  padding: 1rem;
-}
-
-.console-header h1 {
-  font-size: 14px;
-  font-weight: 100;
-  color: white;
-}
-
-.console-header input {
-  background-color: var(--theme-highlight-pink);
-  flex: 1;
-  border: 1px solid white;
-  color: white;
-  font-size: 1.25rem;
-  padding: 0.25rem;
-  line-height: 2rem;
-  padding-left: 1rem;
-  margin: 0 1rem;
-}
-
-.console-header ::-webkit-input-placeholder {
-  color: white;
-  font-size: 1rem;
-  line-height: 2rem;
-  margin: 0;
-}
-
-.console-header .clear-button {
-  background: rgba(255,255,255,0.25);
-  border: 1px solid rgba(255,255,255,0.25);
-  color: white;
-  font-size: 1.2rem;
-}
-main {
-  --default-border: 1px solid var(--theme-splitter-color);
-  height: 100vh;
-  display: flex;
-  flex-direction: column;
-}
-
-.expressions {
-  padding: 2em 1em;
-  flex: 1;
-  overflow-y: auto;
-}
-
-.rep-row {
-  border: var(--default-border);
-  margin-bottom: 1em;
-}
-
-.rep-input {
-  font-family: monospace;
-  background-color: var(--theme-toolbar-background-alt);
-  color: var(--theme-body-color);
-  padding: 0.5rem;
-}
-
-.rep-input:before {
-  content: "\279C   ";
-}
-
-.reps {
-  display: flex;
-  flex-wrap: wrap;
-  padding: 1rem;
-  margin-bottom: 0.5rem;
-}
-
-.rep-element + .rep-element {
-  margin-left: 0.5rem;
-}
-
-.rep-element::before {
-  content: attr(data-mode) ":";
-  background-color: var(--theme-toolbar-background);;
-  font-family: monospace;
-  display: inline-block;
-  font-size: 0.75rem;
-  padding: 0.1rem 0.25rem;
-  margin-right: 0.25rem;
-  border-radius: 0.25rem;
-}
-
-.packet header {
-  display: flex;
-  background-color: var(--theme-toolbar-background-alt);
-  border-top: var(--default-border);
-  color: var(--theme-body-color);
-  padding: 0.5rem;
-}
-
-.packet header::before {
-  display: inline-block;
-  padding-right: 0.5rem;
-}
-
-.packet header.packet-expanded::before {
-  content: "\2212";
-}
-
-.packet header.packet-collapsed::before {
-  content: "+";
-}
-
-.copy-packet-button {
-  margin-left: auto;
-  margin-right: 0.5rem;
-}
-
-.packet .packet-rep {
-  padding: 1rem;
-}
-
-* {
-  box-sizing: border-box;
-}
-
-html, body {
-  margin: 0;
-  padding: 0;
-}
-
-/*# sourceMappingURL=bundle.css.map*/
\ No newline at end of file
deleted file mode 100644
--- a/devtools/client/shared/components/reps.js
+++ /dev/null
@@ -1,35193 +0,0 @@
-module.exports =
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/ 		// SingleModulePlugin
-/******/ 		const smpCache = this.smpCache = this.smpCache || {};
-/******/ 		const smpMap = this.smpMap = this.smpMap || new Map();
-/******/ 		function sanitizeString(text) {
-/******/ 		   return text.replace(/__webpack_require__\(\d+\)/g,"");
-/******/ 		}
-/******/ 		function getModuleBody(id) {
-/******/ 		  if (smpCache.hasOwnProperty(id)) {
-/******/ 		    return smpCache[id];
-/******/ 		  }
-/******/
-/******/ 		  const body = sanitizeString(String(modules[id]));
-/******/ 		  smpCache[id] = body;
-/******/ 		  return body;
-/******/ 		}
-/******/ 		if (!installedModules[moduleId]) {
-/******/ 			const body = getModuleBody(moduleId);
-/******/ 			if (smpMap.has(body)) {
-/******/ 				installedModules[moduleId] = installedModules[smpMap.get(body)];
-/******/ 			}
-/******/ 			else {
-/******/ 				smpMap.set(body, 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] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = 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;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "/assets/build";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = __webpack_require__(1);
-
-
-/***/ },
-/* 1 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// require("./webconsole.css")
-	__webpack_require__(2);
-
-	const React = __webpack_require__(6);
-	const ReactDOM = __webpack_require__(7);
-	const { createFactory } = React;
-
-	const { bootstrap, L10N } = __webpack_require__(9);
-	const { isFirefoxPanel } = __webpack_require__(102);
-
-	if (!isFirefoxPanel()) {
-	  const { Provider } = __webpack_require__(29);
-
-	  const RepsConsole = createFactory(__webpack_require__(255));
-	  const { configureStore } = __webpack_require__(306);
-
-	  __webpack_require__(311);
-	  L10N.setBundle(__webpack_require__(313));
-	  window.l10n = L10N;
-
-	  function onConnect({ client } = {}) {
-	    if (!client) {
-	      return;
-	    }
-
-	    let store = configureStore({
-	      makeThunkArgs: (args, state) => {
-	        return Object.assign({}, args, { client });
-	      }
-	    });
-
-	    ReactDOM.render(React.createElement(Provider, { store }, RepsConsole({ client })), root);
-	  }
-
-	  let root = document.createElement("div");
-	  root.innerText = "Waiting for connection";
-
-	  bootstrap(React, ReactDOM, root).then(onConnect, e => console.error("An error occured during the connection", e)).catch(e => console.error("An error occured in the onConnect function", e));
-	} else {
-	  const { MODE } = __webpack_require__(266);
-	  const Rep = createFactory(__webpack_require__(267));
-	  const Grip = __webpack_require__(278);
-	  const repUtils = __webpack_require__(305);
-
-	  module.exports = {
-	    Rep,
-	    Grip,
-	    repUtils,
-	    MODE
-	  };
-	}
-
-/***/ },
-/* 2 */
-/***/ function(module, exports) {
-
-	// removed by extract-text-webpack-plugin
-
-/***/ },
-/* 3 */,
-/* 4 */,
-/* 5 */,
-/* 6 */
-/***/ function(module, exports) {
-
-	module.exports = require("devtools/client/shared/vendor/react");
-
-/***/ },
-/* 7 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	module.exports = __webpack_require__(8);
-
-
-/***/ },
-/* 8 */
-/***/ function(module, exports) {
-
-	module.exports = require("devtools/client/shared/vendor/react-dom");
-
-/***/ },
-/* 9 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/* global window, document, DebuggerConfig */
-
-	const { bindActionCreators, combineReducers } = __webpack_require__(10);
-	const { Provider } = __webpack_require__(29);
-
-	const { DevToolsUtils, AppConstants } = __webpack_require__(38);
-	const { debugGlobal } = __webpack_require__(101);
-	const { setConfig, isEnabled, getValue, isDevelopment } = __webpack_require__(102);
-	const L10N = __webpack_require__(150);
-
-	setConfig(({"title":"Reps","hotReloading":true,"environment":"development","theme":"light","firefox":{"proxyHost":"localhost:9000","webSocketConnection":false,"websocketHost":"localhost:6080","mcPath":"./firefox"},"development":{"serverPort":8000}}));
-
-	// Set various flags before requiring app code.
-	if (isEnabled("logging.client")) {
-	  DevToolsUtils.dumpn.wantLogging = true;
-	}
-
-	const { getClient, firefox, chrome, startDebugging } = __webpack_require__(151);
-	const Root = __webpack_require__(220);
-
-	// Using this static variable allows webpack to know at compile-time
-	// to avoid this require and not include it at all in the output.
-	if (false) {
-	  const theme = getValue("theme");
-	  switch (theme) {
-	    case "dark":
-	      require("./lib/themes/dark-theme.css");break;
-	    case "light":
-	      require("./lib/themes/light-theme.css");break;
-	    case "firebug":
-	      require("./lib/themes/firebug-theme.css");break;
-	  }
-	  document.body.parentNode.classList.add(`theme-${ theme }`);
-	}
-
-	function initApp() {
-	  const configureStore = __webpack_require__(224);
-	  const reducers = __webpack_require__(235);
-	  const LaunchpadApp = __webpack_require__(240);
-
-	  const createStore = configureStore({
-	    log: getValue("logging.actions"),
-	    makeThunkArgs: (args, state) => {
-	      return Object.assign({}, args, { client: getClient(state) });
-	    }
-	  });
-
-	  const store = createStore(combineReducers(reducers));
-	  const actions = bindActionCreators(__webpack_require__(253), store.dispatch);
-
-	  debugGlobal("launchpadStore", store);
-
-	  if (isDevelopment()) {
-	    AppConstants.DEBUG_JS_MODULES = true;
-	  }
-
-	  return { store, actions, LaunchpadApp };
-	}
-
-	function renderRoot(_React, _ReactDOM, component, _store) {
-	  const { createElement } = _React;
-	  const mount = document.querySelector("#mount");
-
-	  // bail in test environments that do not have a mount
-	  if (!mount) {
-	    return;
-	  }
-
-	  const root = Root();
-	  mount.appendChild(root);
-
-	  if (component.props || component.propTypes) {
-	    _ReactDOM.render(createElement(Provider, { store: _store }, createElement(component)), root);
-	  } else {
-	    root.appendChild(component);
-	  }
-	}
-
-	function getTargetFromQuery() {
-	  const href = window.location.href;
-	  const nodeMatch = href.match(/node-tab=([^&#]*)/);
-	  const firefoxMatch = href.match(/firefox-tab=([^&#]*)/);
-	  const chromeMatch = href.match(/chrome-tab=([^&#]*)/);
-
-	  if (nodeMatch) {
-	    return { type: "node", param: nodeMatch[1] };
-	  } else if (firefoxMatch) {
-	    return { type: "firefox", param: firefoxMatch[1] };
-	  } else if (chromeMatch) {
-	    return { type: "chrome", param: chromeMatch[1] };
-	  }
-
-	  return null;
-	}
-
-	function bootstrap(React, ReactDOM, App, appActions, appStore) {
-	  const connTarget = getTargetFromQuery();
-	  if (connTarget) {
-	    return startDebugging(connTarget, appActions).then(({ tab, client }) => {
-	      debugGlobal("client", client.clientCommands);
-	      renderRoot(React, ReactDOM, App, appStore);
-	      return { tab, connTarget, client };
-	    });
-	  }
-
-	  const { store, actions, LaunchpadApp } = initApp();
-	  renderRoot(React, ReactDOM, LaunchpadApp, store);
-	  chrome.connectClient().then(tabs => {
-	    actions.newTabs(tabs);
-	  }).catch(e => {
-	    console.log("Connect to chrome:");
-	    console.log("https://github.com/devtools-html/debugger.html/blob/master/CONTRIBUTING.md#chrome");
-	  });
-
-	  chrome.connectNodeClient().then(tabs => {
-	    actions.newTabs(tabs);
-	  });
-
-	  return firefox.connectClient().then(tabs => {
-	    actions.newTabs(tabs);
-	  });
-	}
-
-	module.exports = {
-	  bootstrap,
-	  renderRoot,
-	  debugGlobal,
-	  L10N
-	};
-
-/***/ },
-/* 10 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports.compose = exports.applyMiddleware = exports.bindActionCreators = exports.combineReducers = exports.createStore = undefined;
-
-	var _createStore = __webpack_require__(11);
-
-	var _createStore2 = _interopRequireDefault(_createStore);
-
-	var _combineReducers = __webpack_require__(24);
-
-	var _combineReducers2 = _interopRequireDefault(_combineReducers);
-
-	var _bindActionCreators = __webpack_require__(26);
-
-	var _bindActionCreators2 = _interopRequireDefault(_bindActionCreators);
-
-	var _applyMiddleware = __webpack_require__(27);
-
-	var _applyMiddleware2 = _interopRequireDefault(_applyMiddleware);
-
-	var _compose = __webpack_require__(28);
-
-	var _compose2 = _interopRequireDefault(_compose);
-
-	var _warning = __webpack_require__(25);
-
-	var _warning2 = _interopRequireDefault(_warning);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	/*
-	* This is a dummy function to check if the function name has been altered by minification.
-	* If the function has been minified and NODE_ENV !== 'production', warn the user.
-	*/
-	function isCrushed() {}
-
-	if (false) {
-	  (0, _warning2["default"])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');
-	}
-
-	exports.createStore = _createStore2["default"];
-	exports.combineReducers = _combineReducers2["default"];
-	exports.bindActionCreators = _bindActionCreators2["default"];
-	exports.applyMiddleware = _applyMiddleware2["default"];
-	exports.compose = _compose2["default"];
-
-/***/ },
-/* 11 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports.ActionTypes = undefined;
-	exports["default"] = createStore;
-
-	var _isPlainObject = __webpack_require__(12);
-
-	var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
-
-	var _symbolObservable = __webpack_require__(22);
-
-	var _symbolObservable2 = _interopRequireDefault(_symbolObservable);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	/**
-	 * These are private action types reserved by Redux.
-	 * For any unknown actions, you must return the current state.
-	 * If the current state is undefined, you must return the initial state.
-	 * Do not reference these action types directly in your code.
-	 */
-	var ActionTypes = exports.ActionTypes = {
-	  INIT: '@@redux/INIT'
-	};
-
-	/**
-	 * Creates a Redux store that holds the state tree.
-	 * The only way to change the data in the store is to call `dispatch()` on it.
-	 *
-	 * There should only be a single store in your app. To specify how different
-	 * parts of the state tree respond to actions, you may combine several reducers
-	 * into a single reducer function by using `combineReducers`.
-	 *
-	 * @param {Function} reducer A function that returns the next state tree, given
-	 * the current state tree and the action to handle.
-	 *
-	 * @param {any} [initialState] The initial state. You may optionally specify it
-	 * to hydrate the state from the server in universal apps, or to restore a
-	 * previously serialized user session.
-	 * If you use `combineReducers` to produce the root reducer function, this must be
-	 * an object with the same shape as `combineReducers` keys.
-	 *
-	 * @param {Function} enhancer The store enhancer. You may optionally specify it
-	 * to enhance the store with third-party capabilities such as middleware,
-	 * time travel, persistence, etc. The only store enhancer that ships with Redux
-	 * is `applyMiddleware()`.
-	 *
-	 * @returns {Store} A Redux store that lets you read the state, dispatch actions
-	 * and subscribe to changes.
-	 */
-	function createStore(reducer, initialState, enhancer) {
-	  var _ref2;
-
-	  if (typeof initialState === 'function' && typeof enhancer === 'undefined') {
-	    enhancer = initialState;
-	    initialState = undefined;
-	  }
-
-	  if (typeof enhancer !== 'undefined') {
-	    if (typeof enhancer !== 'function') {
-	      throw new Error('Expected the enhancer to be a function.');
-	    }
-
-	    return enhancer(createStore)(reducer, initialState);
-	  }
-
-	  if (typeof reducer !== 'function') {
-	    throw new Error('Expected the reducer to be a function.');
-	  }
-
-	  var currentReducer = reducer;
-	  var currentState = initialState;
-	  var currentListeners = [];
-	  var nextListeners = currentListeners;
-	  var isDispatching = false;
-
-	  function ensureCanMutateNextListeners() {
-	    if (nextListeners === currentListeners) {
-	      nextListeners = currentListeners.slice();
-	    }
-	  }
-
-	  /**
-	   * Reads the state tree managed by the store.
-	   *
-	   * @returns {any} The current state tree of your application.
-	   */
-	  function getState() {
-	    return currentState;
-	  }
-
-	  /**
-	   * Adds a change listener. It will be called any time an action is dispatched,
-	   * and some part of the state tree may potentially have changed. You may then
-	   * call `getState()` to read the current state tree inside the callback.
-	   *
-	   * You may call `dispatch()` from a change listener, with the following
-	   * caveats:
-	   *
-	   * 1. The subscriptions are snapshotted just before every `dispatch()` call.
-	   * If you subscribe or unsubscribe while the listeners are being invoked, this
-	   * will not have any effect on the `dispatch()` that is currently in progress.
-	   * However, the next `dispatch()` call, whether nested or not, will use a more
-	   * recent snapshot of the subscription list.
-	   *
-	   * 2. The listener should not expect to see all state changes, as the state
-	   * might have been updated multiple times during a nested `dispatch()` before
-	   * the listener is called. It is, however, guaranteed that all subscribers
-	   * registered before the `dispatch()` started will be called with the latest
-	   * state by the time it exits.
-	   *
-	   * @param {Function} listener A callback to be invoked on every dispatch.
-	   * @returns {Function} A function to remove this change listener.
-	   */
-	  function subscribe(listener) {
-	    if (typeof listener !== 'function') {
-	      throw new Error('Expected listener to be a function.');
-	    }
-
-	    var isSubscribed = true;
-
-	    ensureCanMutateNextListeners();
-	    nextListeners.push(listener);
-
-	    return function unsubscribe() {
-	      if (!isSubscribed) {
-	        return;
-	      }
-
-	      isSubscribed = false;
-
-	      ensureCanMutateNextListeners();
-	      var index = nextListeners.indexOf(listener);
-	      nextListeners.splice(index, 1);
-	    };
-	  }
-
-	  /**
-	   * Dispatches an action. It is the only way to trigger a state change.
-	   *
-	   * The `reducer` function, used to create the store, will be called with the
-	   * current state tree and the given `action`. Its return value will
-	   * be considered the **next** state of the tree, and the change listeners
-	   * will be notified.
-	   *
-	   * The base implementation only supports plain object actions. If you want to
-	   * dispatch a Promise, an Observable, a thunk, or something else, you need to
-	   * wrap your store creating function into the corresponding middleware. For
-	   * example, see the documentation for the `redux-thunk` package. Even the
-	   * middleware will eventually dispatch plain object actions using this method.
-	   *
-	   * @param {Object} action A plain object representing “what changed”. It is
-	   * a good idea to keep actions serializable so you can record and replay user
-	   * sessions, or use the time travelling `redux-devtools`. An action must have
-	   * a `type` property which may not be `undefined`. It is a good idea to use
-	   * string constants for action types.
-	   *
-	   * @returns {Object} For convenience, the same action object you dispatched.
-	   *
-	   * Note that, if you use a custom middleware, it may wrap `dispatch()` to
-	   * return something else (for example, a Promise you can await).
-	   */
-	  function dispatch(action) {
-	    if (!(0, _isPlainObject2["default"])(action)) {
-	      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
-	    }
-
-	    if (typeof action.type === 'undefined') {
-	      throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
-	    }
-
-	    if (isDispatching) {
-	      throw new Error('Reducers may not dispatch actions.');
-	    }
-
-	    try {
-	      isDispatching = true;
-	      currentState = currentReducer(currentState, action);
-	    } finally {
-	      isDispatching = false;
-	    }
-
-	    var listeners = currentListeners = nextListeners;
-	    for (var i = 0; i < listeners.length; i++) {
-	      listeners[i]();
-	    }
-
-	    return action;
-	  }
-
-	  /**
-	   * Replaces the reducer currently used by the store to calculate the state.
-	   *
-	   * You might need this if your app implements code splitting and you want to
-	   * load some of the reducers dynamically. You might also need this if you
-	   * implement a hot reloading mechanism for Redux.
-	   *
-	   * @param {Function} nextReducer The reducer for the store to use instead.
-	   * @returns {void}
-	   */
-	  function replaceReducer(nextReducer) {
-	    if (typeof nextReducer !== 'function') {
-	      throw new Error('Expected the nextReducer to be a function.');
-	    }
-
-	    currentReducer = nextReducer;
-	    dispatch({ type: ActionTypes.INIT });
-	  }
-
-	  /**
-	   * Interoperability point for observable/reactive libraries.
-	   * @returns {observable} A minimal observable of state changes.
-	   * For more information, see the observable proposal:
-	   * https://github.com/zenparsing/es-observable
-	   */
-	  function observable() {
-	    var _ref;
-
-	    var outerSubscribe = subscribe;
-	    return _ref = {
-	      /**
-	       * The minimal observable subscription method.
-	       * @param {Object} observer Any object that can be used as an observer.
-	       * The observer object should have a `next` method.
-	       * @returns {subscription} An object with an `unsubscribe` method that can
-	       * be used to unsubscribe the observable from the store, and prevent further
-	       * emission of values from the observable.
-	       */
-
-	      subscribe: function subscribe(observer) {
-	        if (typeof observer !== 'object') {
-	          throw new TypeError('Expected the observer to be an object.');
-	        }
-
-	        function observeState() {
-	          if (observer.next) {
-	            observer.next(getState());
-	          }
-	        }
-
-	        observeState();
-	        var unsubscribe = outerSubscribe(observeState);
-	        return { unsubscribe: unsubscribe };
-	      }
-	    }, _ref[_symbolObservable2["default"]] = function () {
-	      return this;
-	    }, _ref;
-	  }
-
-	  // When a store is created, an "INIT" action is dispatched so that every
-	  // reducer returns their initial state. This effectively populates
-	  // the initial state tree.
-	  dispatch({ type: ActionTypes.INIT });
-
-	  return _ref2 = {
-	    dispatch: dispatch,
-	    subscribe: subscribe,
-	    getState: getState,
-	    replaceReducer: replaceReducer
-	  }, _ref2[_symbolObservable2["default"]] = observable, _ref2;
-	}
-
-/***/ },
-/* 12 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var baseGetTag = __webpack_require__(13),
-	    getPrototype = __webpack_require__(19),
-	    isObjectLike = __webpack_require__(21);
-
-	/** `Object#toString` result references. */
-	var objectTag = '[object Object]';
-
-	/** Used for built-in method references. */
-	var funcProto = Function.prototype,
-	    objectProto = Object.prototype;
-
-	/** Used to resolve the decompiled source of functions. */
-	var funcToString = funcProto.toString;
-
-	/** Used to check objects for own properties. */
-	var hasOwnProperty = objectProto.hasOwnProperty;
-
-	/** Used to infer the `Object` constructor. */
-	var objectCtorString = funcToString.call(Object);
-
-	/**
-	 * Checks if `value` is a plain object, that is, an object created by the
-	 * `Object` constructor or one with a `[[Prototype]]` of `null`.
-	 *
-	 * @static
-	 * @memberOf _
-	 * @since 0.8.0
-	 * @category Lang
-	 * @param {*} value The value to check.
-	 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
-	 * @example
-	 *
-	 * function Foo() {
-	 *   this.a = 1;
-	 * }
-	 *
-	 * _.isPlainObject(new Foo);
-	 * // => false
-	 *
-	 * _.isPlainObject([1, 2, 3]);
-	 * // => false
-	 *
-	 * _.isPlainObject({ 'x': 0, 'y': 0 });
-	 * // => true
-	 *
-	 * _.isPlainObject(Object.create(null));
-	 * // => true
-	 */
-	function isPlainObject(value) {
-	  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
-	    return false;
-	  }
-	  var proto = getPrototype(value);
-	  if (proto === null) {
-	    return true;
-	  }
-	  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
-	  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
-	    funcToString.call(Ctor) == objectCtorString;
-	}
-
-	module.exports = isPlainObject;
-
-
-/***/ },
-/* 13 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var Symbol = __webpack_require__(14),
-	    getRawTag = __webpack_require__(17),
-	    objectToString = __webpack_require__(18);
-
-	/** `Object#toString` result references. */
-	var nullTag = '[object Null]',
-	    undefinedTag = '[object Undefined]';
-
-	/** Built-in value references. */
-	var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-	/**
-	 * The base implementation of `getTag` without fallbacks for buggy environments.
-	 *
-	 * @private
-	 * @param {*} value The value to query.
-	 * @returns {string} Returns the `toStringTag`.
-	 */
-	function baseGetTag(value) {
-	  if (value == null) {
-	    return value === undefined ? undefinedTag : nullTag;
-	  }
-	  value = Object(value);
-	  return (symToStringTag && symToStringTag in value)
-	    ? getRawTag(value)
-	    : objectToString(value);
-	}
-
-	module.exports = baseGetTag;
-
-
-/***/ },
-/* 14 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var root = __webpack_require__(15);
-
-	/** Built-in value references. */
-	var Symbol = root.Symbol;
-
-	module.exports = Symbol;
-
-
-/***/ },
-/* 15 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var freeGlobal = __webpack_require__(16);
-
-	/** Detect free variable `self`. */
-	var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-	/** Used as a reference to the global object. */
-	var root = freeGlobal || freeSelf || Function('return this')();
-
-	module.exports = root;
-
-
-/***/ },
-/* 16 */
-/***/ function(module, exports) {
-
-	/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
-	var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-	module.exports = freeGlobal;
-
-	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
-
-/***/ },
-/* 17 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var Symbol = __webpack_require__(14);
-
-	/** Used for built-in method references. */
-	var objectProto = Object.prototype;
-
-	/** Used to check objects for own properties. */
-	var hasOwnProperty = objectProto.hasOwnProperty;
-
-	/**
-	 * Used to resolve the
-	 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
-	 * of values.
-	 */
-	var nativeObjectToString = objectProto.toString;
-
-	/** Built-in value references. */
-	var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-	/**
-	 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
-	 *
-	 * @private
-	 * @param {*} value The value to query.
-	 * @returns {string} Returns the raw `toStringTag`.
-	 */
-	function getRawTag(value) {
-	  var isOwn = hasOwnProperty.call(value, symToStringTag),
-	      tag = value[symToStringTag];
-
-	  try {
-	    value[symToStringTag] = undefined;
-	    var unmasked = true;
-	  } catch (e) {}
-
-	  var result = nativeObjectToString.call(value);
-	  if (unmasked) {
-	    if (isOwn) {
-	      value[symToStringTag] = tag;
-	    } else {
-	      delete value[symToStringTag];
-	    }
-	  }
-	  return result;
-	}
-
-	module.exports = getRawTag;
-
-
-/***/ },
-/* 18 */
-/***/ function(module, exports) {
-
-	/** Used for built-in method references. */
-	var objectProto = Object.prototype;
-
-	/**
-	 * Used to resolve the
-	 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
-	 * of values.
-	 */
-	var nativeObjectToString = objectProto.toString;
-
-	/**
-	 * Converts `value` to a string using `Object.prototype.toString`.
-	 *
-	 * @private
-	 * @param {*} value The value to convert.
-	 * @returns {string} Returns the converted string.
-	 */
-	function objectToString(value) {
-	  return nativeObjectToString.call(value);
-	}
-
-	module.exports = objectToString;
-
-
-/***/ },
-/* 19 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var overArg = __webpack_require__(20);
-
-	/** Built-in value references. */
-	var getPrototype = overArg(Object.getPrototypeOf, Object);
-
-	module.exports = getPrototype;
-
-
-/***/ },
-/* 20 */
-/***/ function(module, exports) {
-
-	/**
-	 * Creates a unary function that invokes `func` with its argument transformed.
-	 *
-	 * @private
-	 * @param {Function} func The function to wrap.
-	 * @param {Function} transform The argument transform.
-	 * @returns {Function} Returns the new function.
-	 */
-	function overArg(func, transform) {
-	  return function(arg) {
-	    return func(transform(arg));
-	  };
-	}
-
-	module.exports = overArg;
-
-
-/***/ },
-/* 21 */
-/***/ function(module, exports) {
-
-	/**
-	 * Checks if `value` is object-like. A value is object-like if it's not `null`
-	 * and has a `typeof` result of "object".
-	 *
-	 * @static
-	 * @memberOf _
-	 * @since 4.0.0
-	 * @category Lang
-	 * @param {*} value The value to check.
-	 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
-	 * @example
-	 *
-	 * _.isObjectLike({});
-	 * // => true
-	 *
-	 * _.isObjectLike([1, 2, 3]);
-	 * // => true
-	 *
-	 * _.isObjectLike(_.noop);
-	 * // => false
-	 *
-	 * _.isObjectLike(null);
-	 * // => false
-	 */
-	function isObjectLike(value) {
-	  return value != null && typeof value == 'object';
-	}
-
-	module.exports = isObjectLike;
-
-
-/***/ },
-/* 22 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/* WEBPACK VAR INJECTION */(function(global) {/* global window */
-	'use strict';
-
-	module.exports = __webpack_require__(23)(global || window || this);
-
-	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
-
-/***/ },
-/* 23 */
-/***/ function(module, exports) {
-
-	'use strict';
-
-	module.exports = function symbolObservablePonyfill(root) {
-		var result;
-		var Symbol = root.Symbol;
-
-		if (typeof Symbol === 'function') {
-			if (Symbol.observable) {
-				result = Symbol.observable;
-			} else {
-				result = Symbol('observable');
-				Symbol.observable = result;
-			}
-		} else {
-			result = '@@observable';
-		}
-
-		return result;
-	};
-
-
-/***/ },
-/* 24 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports["default"] = combineReducers;
-
-	var _createStore = __webpack_require__(11);
-
-	var _isPlainObject = __webpack_require__(12);
-
-	var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
-
-	var _warning = __webpack_require__(25);
-
-	var _warning2 = _interopRequireDefault(_warning);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	function getUndefinedStateErrorMessage(key, action) {
-	  var actionType = action && action.type;
-	  var actionName = actionType && '"' + actionType.toString() + '"' || 'an action';
-
-	  return 'Given action ' + actionName + ', reducer "' + key + '" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state.';
-	}
-
-	function getUnexpectedStateShapeWarningMessage(inputState, reducers, action) {
-	  var reducerKeys = Object.keys(reducers);
-	  var argumentName = action && action.type === _createStore.ActionTypes.INIT ? 'initialState argument passed to createStore' : 'previous state received by the reducer';
-
-	  if (reducerKeys.length === 0) {
-	    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';
-	  }
-
-	  if (!(0, _isPlainObject2["default"])(inputState)) {
-	    return 'The ' + argumentName + ' has unexpected type of "' + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + '". Expected argument to be an object with the following ' + ('keys: "' + reducerKeys.join('", "') + '"');
-	  }
-
-	  var unexpectedKeys = Object.keys(inputState).filter(function (key) {
-	    return !reducers.hasOwnProperty(key);
-	  });
-
-	  if (unexpectedKeys.length > 0) {
-	    return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('"' + unexpectedKeys.join('", "') + '" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('"' + reducerKeys.join('", "') + '". Unexpected keys will be ignored.');
-	  }
-	}
-
-	function assertReducerSanity(reducers) {
-	  Object.keys(reducers).forEach(function (key) {
-	    var reducer = reducers[key];
-	    var initialState = reducer(undefined, { type: _createStore.ActionTypes.INIT });
-
-	    if (typeof initialState === 'undefined') {
-	      throw new Error('Reducer "' + key + '" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined.');
-	    }
-
-	    var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');
-	    if (typeof reducer(undefined, { type: type }) === 'undefined') {
-	      throw new Error('Reducer "' + key + '" returned undefined when probed with a random type. ' + ('Don\'t try to handle ' + _createStore.ActionTypes.INIT + ' or other actions in "redux/*" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined.');
-	    }
-	  });
-	}
-
-	/**
-	 * Turns an object whose values are different reducer functions, into a single
-	 * reducer function. It will call every child reducer, and gather their results
-	 * into a single state object, whose keys correspond to the keys of the passed
-	 * reducer functions.
-	 *
-	 * @param {Object} reducers An object whose values correspond to different
-	 * reducer functions that need to be combined into one. One handy way to obtain
-	 * it is to use ES6 `import * as reducers` syntax. The reducers may never return
-	 * undefined for any action. Instead, they should return their initial state
-	 * if the state passed to them was undefined, and the current state for any
-	 * unrecognized action.
-	 *
-	 * @returns {Function} A reducer function that invokes every reducer inside the
-	 * passed object, and builds a state object with the same shape.
-	 */
-	function combineReducers(reducers) {
-	  var reducerKeys = Object.keys(reducers);
-	  var finalReducers = {};
-	  for (var i = 0; i < reducerKeys.length; i++) {
-	    var key = reducerKeys[i];
-	    if (typeof reducers[key] === 'function') {
-	      finalReducers[key] = reducers[key];
-	    }
-	  }
-	  var finalReducerKeys = Object.keys(finalReducers);
-
-	  var sanityError;
-	  try {
-	    assertReducerSanity(finalReducers);
-	  } catch (e) {
-	    sanityError = e;
-	  }
-
-	  return function combination() {
-	    var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
-	    var action = arguments[1];
-
-	    if (sanityError) {
-	      throw sanityError;
-	    }
-
-	    if (false) {
-	      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action);
-	      if (warningMessage) {
-	        (0, _warning2["default"])(warningMessage);
-	      }
-	    }
-
-	    var hasChanged = false;
-	    var nextState = {};
-	    for (var i = 0; i < finalReducerKeys.length; i++) {
-	      var key = finalReducerKeys[i];
-	      var reducer = finalReducers[key];
-	      var previousStateForKey = state[key];
-	      var nextStateForKey = reducer(previousStateForKey, action);
-	      if (typeof nextStateForKey === 'undefined') {
-	        var errorMessage = getUndefinedStateErrorMessage(key, action);
-	        throw new Error(errorMessage);
-	      }
-	      nextState[key] = nextStateForKey;
-	      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
-	    }
-	    return hasChanged ? nextState : state;
-	  };
-	}
-
-/***/ },
-/* 25 */
-/***/ function(module, exports) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports["default"] = warning;
-	/**
-	 * Prints a warning in the console if it exists.
-	 *
-	 * @param {String} message The warning message.
-	 * @returns {void}
-	 */
-	function warning(message) {
-	  /* eslint-disable no-console */
-	  if (typeof console !== 'undefined' && typeof console.error === 'function') {
-	    console.error(message);
-	  }
-	  /* eslint-enable no-console */
-	  try {
-	    // This error was thrown as a convenience so that if you enable
-	    // "break on all exceptions" in your console,
-	    // it would pause the execution at this line.
-	    throw new Error(message);
-	    /* eslint-disable no-empty */
-	  } catch (e) {}
-	  /* eslint-enable no-empty */
-	}
-
-/***/ },
-/* 26 */
-/***/ function(module, exports) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports["default"] = bindActionCreators;
-	function bindActionCreator(actionCreator, dispatch) {
-	  return function () {
-	    return dispatch(actionCreator.apply(undefined, arguments));
-	  };
-	}
-
-	/**
-	 * Turns an object whose values are action creators, into an object with the
-	 * same keys, but with every function wrapped into a `dispatch` call so they
-	 * may be invoked directly. This is just a convenience method, as you can call
-	 * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
-	 *
-	 * For convenience, you can also pass a single function as the first argument,
-	 * and get a function in return.
-	 *
-	 * @param {Function|Object} actionCreators An object whose values are action
-	 * creator functions. One handy way to obtain it is to use ES6 `import * as`
-	 * syntax. You may also pass a single function.
-	 *
-	 * @param {Function} dispatch The `dispatch` function available on your Redux
-	 * store.
-	 *
-	 * @returns {Function|Object} The object mimicking the original object, but with
-	 * every action creator wrapped into the `dispatch` call. If you passed a
-	 * function as `actionCreators`, the return value will also be a single
-	 * function.
-	 */
-	function bindActionCreators(actionCreators, dispatch) {
-	  if (typeof actionCreators === 'function') {
-	    return bindActionCreator(actionCreators, dispatch);
-	  }
-
-	  if (typeof actionCreators !== 'object' || actionCreators === null) {
-	    throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');
-	  }
-
-	  var keys = Object.keys(actionCreators);
-	  var boundActionCreators = {};
-	  for (var i = 0; i < keys.length; i++) {
-	    var key = keys[i];
-	    var actionCreator = actionCreators[key];
-	    if (typeof actionCreator === 'function') {
-	      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
-	    }
-	  }
-	  return boundActionCreators;
-	}
-
-/***/ },
-/* 27 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-
-	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-	exports["default"] = applyMiddleware;
-
-	var _compose = __webpack_require__(28);
-
-	var _compose2 = _interopRequireDefault(_compose);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	/**
-	 * Creates a store enhancer that applies middleware to the dispatch method
-	 * of the Redux store. This is handy for a variety of tasks, such as expressing
-	 * asynchronous actions in a concise manner, or logging every action payload.
-	 *
-	 * See `redux-thunk` package as an example of the Redux middleware.
-	 *
-	 * Because middleware is potentially asynchronous, this should be the first
-	 * store enhancer in the composition chain.
-	 *
-	 * Note that each middleware will be given the `dispatch` and `getState` functions
-	 * as named arguments.
-	 *
-	 * @param {...Function} middlewares The middleware chain to be applied.
-	 * @returns {Function} A store enhancer applying the middleware.
-	 */
-	function applyMiddleware() {
-	  for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
-	    middlewares[_key] = arguments[_key];
-	  }
-
-	  return function (createStore) {
-	    return function (reducer, initialState, enhancer) {
-	      var store = createStore(reducer, initialState, enhancer);
-	      var _dispatch = store.dispatch;
-	      var chain = [];
-
-	      var middlewareAPI = {
-	        getState: store.getState,
-	        dispatch: function dispatch(action) {
-	          return _dispatch(action);
-	        }
-	      };
-	      chain = middlewares.map(function (middleware) {
-	        return middleware(middlewareAPI);
-	      });
-	      _dispatch = _compose2["default"].apply(undefined, chain)(store.dispatch);
-
-	      return _extends({}, store, {
-	        dispatch: _dispatch
-	      });
-	    };
-	  };
-	}
-
-/***/ },
-/* 28 */
-/***/ function(module, exports) {
-
-	"use strict";
-
-	exports.__esModule = true;
-	exports["default"] = compose;
-	/**
-	 * Composes single-argument functions from right to left. The rightmost
-	 * function can take multiple arguments as it provides the signature for
-	 * the resulting composite function.
-	 *
-	 * @param {...Function} funcs The functions to compose.
-	 * @returns {Function} A function obtained by composing the argument functions
-	 * from right to left. For example, compose(f, g, h) is identical to doing
-	 * (...args) => f(g(h(...args))).
-	 */
-
-	function compose() {
-	  for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
-	    funcs[_key] = arguments[_key];
-	  }
-
-	  if (funcs.length === 0) {
-	    return function (arg) {
-	      return arg;
-	    };
-	  } else {
-	    var _ret = function () {
-	      var last = funcs[funcs.length - 1];
-	      var rest = funcs.slice(0, -1);
-	      return {
-	        v: function v() {
-	          return rest.reduceRight(function (composed, f) {
-	            return f(composed);
-	          }, last.apply(undefined, arguments));
-	        }
-	      };
-	    }();
-
-	    if (typeof _ret === "object") return _ret.v;
-	  }
-	}
-
-/***/ },
-/* 29 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports.connect = exports.Provider = undefined;
-
-	var _Provider = __webpack_require__(30);
-
-	var _Provider2 = _interopRequireDefault(_Provider);
-
-	var _connect = __webpack_require__(33);
-
-	var _connect2 = _interopRequireDefault(_connect);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	exports.Provider = _Provider2["default"];
-	exports.connect = _connect2["default"];
-
-/***/ },
-/* 30 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports["default"] = undefined;
-
-	var _react = __webpack_require__(6);
-
-	var _storeShape = __webpack_require__(31);
-
-	var _storeShape2 = _interopRequireDefault(_storeShape);
-
-	var _warning = __webpack_require__(32);
-
-	var _warning2 = _interopRequireDefault(_warning);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-	var didWarnAboutReceivingStore = false;
-	function warnAboutReceivingStore() {
-	  if (didWarnAboutReceivingStore) {
-	    return;
-	  }
-	  didWarnAboutReceivingStore = true;
-
-	  (0, _warning2["default"])('<Provider> does not support changing `store` on the fly. ' + 'It is most likely that you see this error because you updated to ' + 'Redux 2.x and React Redux 2.x which no longer hot reload reducers ' + 'automatically. See https://github.com/reactjs/react-redux/releases/' + 'tag/v2.0.0 for the migration instructions.');
-	}
-
-	var Provider = function (_Component) {
-	  _inherits(Provider, _Component);
-
-	  Provider.prototype.getChildContext = function getChildContext() {
-	    return { store: this.store };
-	  };
-
-	  function Provider(props, context) {
-	    _classCallCheck(this, Provider);
-
-	    var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
-
-	    _this.store = props.store;
-	    return _this;
-	  }
-
-	  Provider.prototype.render = function render() {
-	    var children = this.props.children;
-
-	    return _react.Children.only(children);
-	  };
-
-	  return Provider;
-	}(_react.Component);
-
-	exports["default"] = Provider;
-
-	if (false) {
-	  Provider.prototype.componentWillReceiveProps = function (nextProps) {
-	    var store = this.store;
-	    var nextStore = nextProps.store;
-
-	    if (store !== nextStore) {
-	      warnAboutReceivingStore();
-	    }
-	  };
-	}
-
-	Provider.propTypes = {
-	  store: _storeShape2["default"].isRequired,
-	  children: _react.PropTypes.element.isRequired
-	};
-	Provider.childContextTypes = {
-	  store: _storeShape2["default"].isRequired
-	};
-
-/***/ },
-/* 31 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-
-	var _react = __webpack_require__(6);
-
-	exports["default"] = _react.PropTypes.shape({
-	  subscribe: _react.PropTypes.func.isRequired,
-	  dispatch: _react.PropTypes.func.isRequired,
-	  getState: _react.PropTypes.func.isRequired
-	});
-
-/***/ },
-/* 32 */
-/***/ function(module, exports) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports["default"] = warning;
-	/**
-	 * Prints a warning in the console if it exists.
-	 *
-	 * @param {String} message The warning message.
-	 * @returns {void}
-	 */
-	function warning(message) {
-	  /* eslint-disable no-console */
-	  if (typeof console !== 'undefined' && typeof console.error === 'function') {
-	    console.error(message);
-	  }
-	  /* eslint-enable no-console */
-	  try {
-	    // This error was thrown as a convenience so that you can use this stack
-	    // to find the callsite that caused this warning to fire.
-	    throw new Error(message);
-	    /* eslint-disable no-empty */
-	  } catch (e) {}
-	  /* eslint-enable no-empty */
-	}
-
-/***/ },
-/* 33 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-	exports.__esModule = true;
-	exports["default"] = connect;
-
-	var _react = __webpack_require__(6);
-
-	var _storeShape = __webpack_require__(31);
-
-	var _storeShape2 = _interopRequireDefault(_storeShape);
-
-	var _shallowEqual = __webpack_require__(34);
-
-	var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
-
-	var _wrapActionCreators = __webpack_require__(35);
-
-	var _wrapActionCreators2 = _interopRequireDefault(_wrapActionCreators);
-
-	var _warning = __webpack_require__(32);
-
-	var _warning2 = _interopRequireDefault(_warning);
-
-	var _isPlainObject = __webpack_require__(12);
-
-	var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
-
-	var _hoistNonReactStatics = __webpack_require__(36);
-
-	var _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);
-
-	var _invariant = __webpack_require__(37);
-
-	var _invariant2 = _interopRequireDefault(_invariant);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-	var defaultMapStateToProps = function defaultMapStateToProps(state) {
-	  return {};
-	}; // eslint-disable-line no-unused-vars
-	var defaultMapDispatchToProps = function defaultMapDispatchToProps(dispatch) {
-	  return { dispatch: dispatch };
-	};
-	var defaultMergeProps = function defaultMergeProps(stateProps, dispatchProps, parentProps) {
-	  return _extends({}, parentProps, stateProps, dispatchProps);
-	};
-
-	function getDisplayName(WrappedComponent) {
-	  return WrappedComponent.displayName || WrappedComponent.name || 'Component';
-	}
-
-	var errorObject = { value: null };
-	function tryCatch(fn, ctx) {
-	  try {
-	    return fn.apply(ctx);
-	  } catch (e) {
-	    errorObject.value = e;
-	    return errorObject;
-	  }
-	}
-
-	// Helps track hot reloading.
-	var nextVersion = 0;
-
-	function connect(mapStateToProps, mapDispatchToProps, mergeProps) {
-	  var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
-
-	  var shouldSubscribe = Boolean(mapStateToProps);
-	  var mapState = mapStateToProps || defaultMapStateToProps;
-
-	  var mapDispatch = undefined;
-	  if (typeof mapDispatchToProps === 'function') {
-	    mapDispatch = mapDispatchToProps;
-	  } else if (!mapDispatchToProps) {
-	    mapDispatch = defaultMapDispatchToProps;
-	  } else {
-	    mapDispatch = (0, _wrapActionCreators2["default"])(mapDispatchToProps);
-	  }
-
-	  var finalMergeProps = mergeProps || defaultMergeProps;
-	  var _options$pure = options.pure;
-	  var pure = _options$pure === undefined ? true : _options$pure;
-	  var _options$withRef = options.withRef;
-	  var withRef = _options$withRef === undefined ? false : _options$withRef;
-
-	  var checkMergedEquals = pure && finalMergeProps !== defaultMergeProps;
-
-	  // Helps track hot reloading.
-	  var version = nextVersion++;
-
-	  return function wrapWithConnect(WrappedComponent) {
-	    var connectDisplayName = 'Connect(' + getDisplayName(WrappedComponent) + ')';
-
-	    function checkStateShape(props, methodName) {
-	      if (!(0, _isPlainObject2["default"])(props)) {
-	        (0, _warning2["default"])(methodName + '() in ' + connectDisplayName + ' must return a plain object. ' + ('Instead received ' + props + '.'));
-	      }
-	    }
-
-	    function computeMergedProps(stateProps, dispatchProps, parentProps) {
-	      var mergedProps = finalMergeProps(stateProps, dispatchProps, parentProps);
-	      if (false) {
-	        checkStateShape(mergedProps, 'mergeProps');
-	      }
-	      return mergedProps;
-	    }
-
-	    var Connect = function (_Component) {
-	      _inherits(Connect, _Component);
-
-	      Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() {
-	        return !pure || this.haveOwnPropsChanged || this.hasStoreStateChanged;
-	      };
-
-	      function Connect(props, context) {
-	        _classCallCheck(this, Connect);
-
-	        var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
-
-	        _this.version = version;
-	        _this.store = props.store || context.store;
-
-	        (0, _invariant2["default"])(_this.store, 'Could not find "store" in either the context or ' + ('props of "' + connectDisplayName + '". ') + 'Either wrap the root component in a <Provider>, ' + ('or explicitly pass "store" as a prop to "' + connectDisplayName + '".'));
-
-	        var storeState = _this.store.getState();
-	        _this.state = { storeState: storeState };
-	        _this.clearCache();
-	        return _this;
-	      }
-
-	      Connect.prototype.computeStateProps = function computeStateProps(store, props) {
-	        if (!this.finalMapStateToProps) {
-	          return this.configureFinalMapState(store, props);
-	        }
-
-	        var state = store.getState();
-	        var stateProps = this.doStatePropsDependOnOwnProps ? this.finalMapStateToProps(state, props) : this.finalMapStateToProps(state);
-
-	        if (false) {
-	          checkStateShape(stateProps, 'mapStateToProps');
-	        }
-	        return stateProps;
-	      };
-
-	      Connect.prototype.configureFinalMapState = function configureFinalMapState(store, props) {
-	        var mappedState = mapState(store.getState(), props);
-	        var isFactory = typeof mappedState === 'function';
-
-	        this.finalMapStateToProps = isFactory ? mappedState : mapState;
-	        this.doStatePropsDependOnOwnProps = this.finalMapStateToProps.length !== 1;
-
-	        if (isFactory) {
-	          return this.computeStateProps(store, props);
-	        }
-
-	        if (false) {
-	          checkStateShape(mappedState, 'mapStateToProps');
-	        }
-	        return mappedState;
-	      };
-
-	      Connect.prototype.computeDispatchProps = function computeDispatchProps(store, props) {
-	        if (!this.finalMapDispatchToProps) {
-	          return this.configureFinalMapDispatch(store, props);
-	        }
-
-	        var dispatch = store.dispatch;
-
-	        var dispatchProps = this.doDispatchPropsDependOnOwnProps ? this.finalMapDispatchToProps(dispatch, props) : this.finalMapDispatchToProps(dispatch);
-
-	        if (false) {
-	          checkStateShape(dispatchProps, 'mapDispatchToProps');
-	        }
-	        return dispatchProps;
-	      };
-
-	      Connect.prototype.configureFinalMapDispatch = function configureFinalMapDispatch(store, props) {
-	        var mappedDispatch = mapDispatch(store.dispatch, props);
-	        var isFactory = typeof mappedDispatch === 'function';
-
-	        this.finalMapDispatchToProps = isFactory ? mappedDispatch : mapDispatch;
-	        this.doDispatchPropsDependOnOwnProps = this.finalMapDispatchToProps.length !== 1;
-
-	        if (isFactory) {
-	          return this.computeDispatchProps(store, props);
-	        }
-
-	        if (false) {
-	          checkStateShape(mappedDispatch, 'mapDispatchToProps');
-	        }
-	        return mappedDispatch;
-	      };
-
-	      Connect.prototype.updateStatePropsIfNeeded = function updateStatePropsIfNeeded() {
-	        var nextStateProps = this.computeStateProps(this.store, this.props);
-	        if (this.stateProps && (0, _shallowEqual2["default"])(nextStateProps, this.stateProps)) {
-	          return false;
-	        }
-
-	        this.stateProps = nextStateProps;
-	        return true;
-	      };
-
-	      Connect.prototype.updateDispatchPropsIfNeeded = function updateDispatchPropsIfNeeded() {
-	        var nextDispatchProps = this.computeDispatchProps(this.store, this.props);
-	        if (this.dispatchProps && (0, _shallowEqual2["default"])(nextDispatchProps, this.dispatchProps)) {
-	          return false;
-	        }
-
-	        this.dispatchProps = nextDispatchProps;
-	        return true;
-	      };
-
-	      Connect.prototype.updateMergedPropsIfNeeded = function updateMergedPropsIfNeeded() {
-	        var nextMergedProps = computeMergedProps(this.stateProps, this.dispatchProps, this.props);
-	        if (this.mergedProps && checkMergedEquals && (0, _shallowEqual2["default"])(nextMergedProps, this.mergedProps)) {
-	          return false;
-	        }
-
-	        this.mergedProps = nextMergedProps;
-	        return true;
-	      };
-
-	      Connect.prototype.isSubscribed = function isSubscribed() {
-	        return typeof this.unsubscribe === 'function';
-	      };
-
-	      Connect.prototype.trySubscribe = function trySubscribe() {
-	        if (shouldSubscribe && !this.unsubscribe) {
-	          this.unsubscribe = this.store.subscribe(this.handleChange.bind(this));
-	          this.handleChange();
-	        }
-	      };
-
-	      Connect.prototype.tryUnsubscribe = function tryUnsubscribe() {
-	        if (this.unsubscribe) {
-	          this.unsubscribe();
-	          this.unsubscribe = null;
-	        }
-	      };
-
-	      Connect.prototype.componentDidMount = function componentDidMount() {
-	        this.trySubscribe();
-	      };
-
-	      Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
-	        if (!pure || !(0, _shallowEqual2["default"])(nextProps, this.props)) {
-	          this.haveOwnPropsChanged = true;
-	        }
-	      };
-
-	      Connect.prototype.componentWillUnmount = function componentWillUnmount() {
-	        this.tryUnsubscribe();
-	        this.clearCache();
-	      };
-
-	      Connect.prototype.clearCache = function clearCache() {
-	        this.dispatchProps = null;
-	        this.stateProps = null;
-	        this.mergedProps = null;
-	        this.haveOwnPropsChanged = true;
-	        this.hasStoreStateChanged = true;
-	        this.haveStatePropsBeenPrecalculated = false;
-	        this.statePropsPrecalculationError = null;
-	        this.renderedElement = null;
-	        this.finalMapDispatchToProps = null;
-	        this.finalMapStateToProps = null;
-	      };
-
-	      Connect.prototype.handleChange = function handleChange() {
-	        if (!this.unsubscribe) {
-	          return;
-	        }
-
-	        var storeState = this.store.getState();
-	        var prevStoreState = this.state.storeState;
-	        if (pure && prevStoreState === storeState) {
-	          return;
-	        }
-
-	        if (pure && !this.doStatePropsDependOnOwnProps) {
-	          var haveStatePropsChanged = tryCatch(this.updateStatePropsIfNeeded, this);
-	          if (!haveStatePropsChanged) {
-	            return;
-	          }
-	          if (haveStatePropsChanged === errorObject) {
-	            this.statePropsPrecalculationError = errorObject.value;
-	          }
-	          this.haveStatePropsBeenPrecalculated = true;
-	        }
-
-	        this.hasStoreStateChanged = true;
-	        this.setState({ storeState: storeState });
-	      };
-
-	      Connect.prototype.getWrappedInstance = function getWrappedInstance() {
-	        (0, _invariant2["default"])(withRef, 'To access the wrapped instance, you need to specify ' + '{ withRef: true } as the fourth argument of the connect() call.');
-
-	        return this.refs.wrappedInstance;
-	      };
-
-	      Connect.prototype.render = function render() {
-	        var haveOwnPropsChanged = this.haveOwnPropsChanged;
-	        var hasStoreStateChanged = this.hasStoreStateChanged;
-	        var haveStatePropsBeenPrecalculated = this.haveStatePropsBeenPrecalculated;
-	        var statePropsPrecalculationError = this.statePropsPrecalculationError;
-	        var renderedElement = this.renderedElement;
-
-	        this.haveOwnPropsChanged = false;
-	        this.hasStoreStateChanged = false;
-	        this.haveStatePropsBeenPrecalculated = false;
-	        this.statePropsPrecalculationError = null;
-
-	        if (statePropsPrecalculationError) {
-	          throw statePropsPrecalculationError;
-	        }
-
-	        var shouldUpdateStateProps = true;
-	        var shouldUpdateDispatchProps = true;
-	        if (pure && renderedElement) {
-	          shouldUpdateStateProps = hasStoreStateChanged || haveOwnPropsChanged && this.doStatePropsDependOnOwnProps;
-	          shouldUpdateDispatchProps = haveOwnPropsChanged && this.doDispatchPropsDependOnOwnProps;
-	        }
-
-	        var haveStatePropsChanged = false;
-	        var haveDispatchPropsChanged = false;
-	        if (haveStatePropsBeenPrecalculated) {
-	          haveStatePropsChanged = true;
-	        } else if (shouldUpdateStateProps) {
-	          haveStatePropsChanged = this.updateStatePropsIfNeeded();
-	        }
-	        if (shouldUpdateDispatchProps) {
-	          haveDispatchPropsChanged = this.updateDispatchPropsIfNeeded();
-	        }
-
-	        var haveMergedPropsChanged = true;
-	        if (haveStatePropsChanged || haveDispatchPropsChanged || haveOwnPropsChanged) {
-	          haveMergedPropsChanged = this.updateMergedPropsIfNeeded();
-	        } else {
-	          haveMergedPropsChanged = false;
-	        }
-
-	        if (!haveMergedPropsChanged && renderedElement) {
-	          return renderedElement;
-	        }
-
-	        if (withRef) {
-	          this.renderedElement = (0, _react.createElement)(WrappedComponent, _extends({}, this.mergedProps, {
-	            ref: 'wrappedInstance'
-	          }));
-	        } else {
-	          this.renderedElement = (0, _react.createElement)(WrappedComponent, this.mergedProps);
-	        }
-
-	        return this.renderedElement;
-	      };
-
-	      return Connect;
-	    }(_react.Component);
-
-	    Connect.displayName = connectDisplayName;
-	    Connect.WrappedComponent = WrappedComponent;
-	    Connect.contextTypes = {
-	      store: _storeShape2["default"]
-	    };
-	    Connect.propTypes = {
-	      store: _storeShape2["default"]
-	    };
-
-	    if (false) {
-	      Connect.prototype.componentWillUpdate = function componentWillUpdate() {
-	        if (this.version === version) {
-	          return;
-	        }
-
-	        // We are hot reloading!
-	        this.version = version;
-	        this.trySubscribe();
-	        this.clearCache();
-	      };
-	    }
-
-	    return (0, _hoistNonReactStatics2["default"])(Connect, WrappedComponent);
-	  };
-	}
-
-/***/ },
-/* 34 */
-/***/ function(module, exports) {
-
-	"use strict";
-
-	exports.__esModule = true;
-	exports["default"] = shallowEqual;
-	function shallowEqual(objA, objB) {
-	  if (objA === objB) {
-	    return true;
-	  }
-
-	  var keysA = Object.keys(objA);
-	  var keysB = Object.keys(objB);
-
-	  if (keysA.length !== keysB.length) {
-	    return false;
-	  }
-
-	  // Test for A's keys different from B.
-	  var hasOwn = Object.prototype.hasOwnProperty;
-	  for (var i = 0; i < keysA.length; i++) {
-	    if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
-	      return false;
-	    }
-	  }
-
-	  return true;
-	}
-
-/***/ },
-/* 35 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	exports.__esModule = true;
-	exports["default"] = wrapActionCreators;
-
-	var _redux = __webpack_require__(10);
-
-	function wrapActionCreators(actionCreators) {
-	  return function (dispatch) {
-	    return (0, _redux.bindActionCreators)(actionCreators, dispatch);
-	  };
-	}
-
-/***/ },
-/* 36 */
-/***/ function(module, exports) {
-
-	/**
-	 * Copyright 2015, Yahoo! Inc.
-	 * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
-	 */
-	'use strict';
-
-	var REACT_STATICS = {
-	    childContextTypes: true,
-	    contextTypes: true,
-	    defaultProps: true,
-	    displayName: true,
-	    getDefaultProps: true,
-	    mixins: true,
-	    propTypes: true,
-	    type: true
-	};
-
-	var KNOWN_STATICS = {
-	    name: true,
-	    length: true,
-	    prototype: true,
-	    caller: true,
-	    arguments: true,
-	    arity: true
-	};
-
-	var isGetOwnPropertySymbolsAvailable = typeof Object.getOwnPropertySymbols === 'function';
-
-	module.exports = function hoistNonReactStatics(targetComponent, sourceComponent, customStatics) {
-	    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components
-	        var keys = Object.getOwnPropertyNames(sourceComponent);
-
-	        /* istanbul ignore else */
-	        if (isGetOwnPropertySymbolsAvailable) {
-	            keys = keys.concat(Object.getOwnPropertySymbols(sourceComponent));
-	        }
-
-	        for (var i = 0; i < keys.length; ++i) {
-	            if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]] && (!customStatics || !customStatics[keys[i]])) {
-	                try {
-	                    targetComponent[keys[i]] = sourceComponent[keys[i]];
-	                } catch (error) {
-
-	                }
-	            }
-	        }
-	    }
-
-	    return targetComponent;
-	};
-
-
-/***/ },
-/* 37 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Copyright 2013-2015, Facebook, Inc.
-	 * All rights reserved.
-	 *
-	 * This source code is licensed under the BSD-style license found in the
-	 * LICENSE file in the root directory of this source tree. An additional grant
-	 * of patent rights can be found in the PATENTS file in the same directory.
-	 */
-
-	'use strict';
-
-	/**
-	 * Use invariant() to assert state which your program assumes to be true.
-	 *
-	 * Provide sprintf-style format (only %s is supported) and arguments
-	 * to provide information about what broke and what you were
-	 * expecting.
-	 *
-	 * The invariant message will be stripped in production, but the invariant
-	 * will remain to ensure logic does not differ in production.
-	 */
-
-	var invariant = function(condition, format, a, b, c, d, e, f) {
-	  if (false) {
-	    if (format === undefined) {
-	      throw new Error('invariant requires an error message argument');
-	    }
-	  }
-
-	  if (!condition) {
-	    var error;
-	    if (format === undefined) {
-	      error = new Error(
-	        'Minified exception occurred; use the non-minified dev environment ' +
-	        'for the full error message and additional helpful warnings.'
-	      );
-	    } else {
-	      var args = [a, b, c, d, e, f];
-	      var argIndex = 0;
-	      error = new Error(
-	        format.replace(/%s/g, function() { return args[argIndex++]; })
-	      );
-	      error.name = 'Invariant Violation';
-	    }
-
-	    error.framesToPop = 1; // we don't care about invariant's own frame
-	    throw error;
-	  }
-	};
-
-	module.exports = invariant;
-
-
-/***/ },
-/* 38 */
-/***/ function(module, exports, __webpack_require__) {
-
-	const { KeyShortcuts } = __webpack_require__(39);
-	const { DebuggerTransport } = __webpack_require__(77);
-	const { DebuggerClient } = __webpack_require__(89);
-	const PrefsHelper = __webpack_require__(93).PrefsHelper;
-	const { TargetFactory } = __webpack_require__(94);
-	const DevToolsUtils = __webpack_require__(78);
-	const AppConstants = __webpack_require__(80);
-	const EventEmitter = __webpack_require__(70);
-	const WebsocketTransport = __webpack_require__(95);
-	const Menu = __webpack_require__(96);
-	const MenuItem = __webpack_require__(97);
-	const Tree = __webpack_require__(98);
-	const sourceUtils = __webpack_require__(99);
-	const frame = __webpack_require__(100);
-
-	module.exports = {
-	  KeyShortcuts,
-	  PrefsHelper,
-	  DebuggerClient,
-	  DebuggerTransport,
-	  TargetFactory,
-	  DevToolsUtils,
-	  AppConstants,
-	  EventEmitter,
-	  WebsocketTransport,
-	  Menu,
-	  MenuItem,
-	  Tree,
-	  sourceUtils,
-	  frame
-	};
-
-
-/***/ },
-/* 39 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	const { Services: { appinfo }} = __webpack_require__(40);
-	const EventEmitter = __webpack_require__(70);
-	const isOSX = appinfo.OS === "Darwin";
-	"use strict";
-
-	// List of electron keys mapped to DOM API (DOM_VK_*) key code
-	const ElectronKeysMapping = {
-	  "F1": "DOM_VK_F1",
-	  "F2": "DOM_VK_F2",
-	  "F3": "DOM_VK_F3",
-	  "F4": "DOM_VK_F4",
-	  "F5": "DOM_VK_F5",
-	  "F6": "DOM_VK_F6",
-	  "F7": "DOM_VK_F7",
-	  "F8": "DOM_VK_F8",
-	  "F9": "DOM_VK_F9",
-	  "F10": "DOM_VK_F10",
-	  "F11": "DOM_VK_F11",
-	  "F12": "DOM_VK_F12",
-	  "F13": "DOM_VK_F13",
-	  "F14": "DOM_VK_F14",
-	  "F15": "DOM_VK_F15",
-	  "F16": "DOM_VK_F16",
-	  "F17": "DOM_VK_F17",
-	  "F18": "DOM_VK_F18",
-	  "F19": "DOM_VK_F19",
-	  "F20": "DOM_VK_F20",
-	  "F21": "DOM_VK_F21",
-	  "F22": "DOM_VK_F22",
-	  "F23": "DOM_VK_F23",
-	  "F24": "DOM_VK_F24",
-	  "Space": "DOM_VK_SPACE",
-	  "Backspace": "DOM_VK_BACK_SPACE",
-	  "Delete": "DOM_VK_DELETE",
-	  "Insert": "DOM_VK_INSERT",
-	  "Return": "DOM_VK_RETURN",
-	  "Enter": "DOM_VK_RETURN",
-	  "Up": "DOM_VK_UP",
-	  "Down": "DOM_VK_DOWN",
-	  "Left": "DOM_VK_LEFT",
-	  "Right": "DOM_VK_RIGHT",
-	  "Home": "DOM_VK_HOME",
-	  "End": "DOM_VK_END",
-	  "PageUp": "DOM_VK_PAGE_UP",
-	  "PageDown": "DOM_VK_PAGE_DOWN",
-	  "Escape": "DOM_VK_ESCAPE",
-	  "Esc": "DOM_VK_ESCAPE",
-	  "Tab": "DOM_VK_TAB",
-	  "VolumeUp": "DOM_VK_VOLUME_UP",
-	  "VolumeDown": "DOM_VK_VOLUME_DOWN",
-	  "VolumeMute": "DOM_VK_VOLUME_MUTE",
-	  "PrintScreen": "DOM_VK_PRINTSCREEN",
-	};
-
-	/**
-	 * Helper to listen for keyboard events decribed in .properties file.
-	 *
-	 * let shortcuts = new KeyShortcuts({
-	 *   window
-	 * });
-	 * shortcuts.on("Ctrl+F", event => {
-	 *   // `event` is the KeyboardEvent which relates to the key shortcuts
-	 * });
-	 *
-	 * @param DOMWindow window
-	 *        The window object of the document to listen events from.
-	 * @param DOMElement target
-	 *        Optional DOM Element on which we should listen events from.
-	 *        If omitted, we listen for all events fired on `window`.
-	 */
-	function KeyShortcuts({ window, target }) {
-	  this.window = window;
-	  this.target = target || window;
-	  this.keys = new Map();
-	  this.eventEmitter = new EventEmitter();
-	  this.target.addEventListener("keydown", this);
-	}
-
-	/*
-	 * Parse an electron-like key string and return a normalized object which
-	 * allow efficient match on DOM key event. The normalized object matches DOM
-	 * API.
-	 *
-	 * @param DOMWindow window
-	 *        Any DOM Window object, just to fetch its `KeyboardEvent` object
-	 * @param String str
-	 *        The shortcut string to parse, following this document:
-	 *        https://github.com/electron/electron/blob/master/docs/api/accelerator.md
-	 */
-	KeyShortcuts.parseElectronKey = function(window, str) {
-	  let modifiers = str.split("+");
-	  let key = modifiers.pop();
-
-	  let shortcut = {
-	    ctrl: false,
-	    meta: false,
-	    alt: false,
-	    shift: false,
-	    // Set for character keys
-	    key: undefined,
-	    // Set for non-character keys
-	    keyCode: undefined,
-	  };
-	  for (let mod of modifiers) {
-	    if (mod === "Alt") {
-	      shortcut.alt = true;
-	    } else if (["Command", "Cmd"].includes(mod)) {
-	      shortcut.meta = true;
-	    } else if (["CommandOrControl", "CmdOrCtrl"].includes(mod)) {
-	      if (isOSX) {
-	        shortcut.meta = true;
-	      } else {
-	        shortcut.ctrl = true;
-	      }
-	    } else if (["Control", "Ctrl"].includes(mod)) {
-	      shortcut.ctrl = true;
-	    } else if (mod === "Shift") {
-	      shortcut.shift = true;
-	    } else {
-	      console.error("Unsupported modifier:", mod, "from key:", str);
-	      return null;
-	    }
-	  }
-
-	  // Plus is a special case. It's a character key and shouldn't be matched
-	  // against a keycode as it is only accessible via Shift/Capslock
-	  if (key === "Plus") {
-	    key = "+";
-	  }
-
-	  if (typeof key === "string" && key.length === 1) {
-	    // Match any single character
-	    shortcut.key = key.toLowerCase();
-	  } else if (key in ElectronKeysMapping) {
-	    // Maps the others manually to DOM API DOM_VK_*
-	    key = ElectronKeysMapping[key];
-	    shortcut.keyCode = window.KeyboardEvent[key];
-	    // Used only to stringify the shortcut
-	    shortcut.keyCodeString = key;
-	    shortcut.key = key;
-	  } else {
-	    console.error("Unsupported key:", key);
-	    return null;
-	  }
-
-	  return shortcut;
-	};
-
-	KeyShortcuts.stringify = function(shortcut) {
-	  let list = [];
-	  if (shortcut.alt) {
-	    list.push("Alt");
-	  }
-	  if (shortcut.ctrl) {
-	    list.push("Ctrl");
-	  }
-	  if (shortcut.meta) {
-	    list.push("Cmd");
-	  }
-	  if (shortcut.shift) {
-	    list.push("Shift");
-	  }
-	  let key;
-	  if (shortcut.key) {
-	    key = shortcut.key.toUpperCase();
-	  } else {
-	    key = shortcut.keyCodeString;
-	  }
-	  list.push(key);
-	  return list.join("+");
-	};
-
-	KeyShortcuts.prototype = {
-	  destroy() {
-	    this.target.removeEventListener("keydown", this);
-	    this.keys.clear();
-	  },
-
-	  doesEventMatchShortcut(event, shortcut) {
-	    if (shortcut.meta != event.metaKey) {
-	      return false;
-	    }
-	    if (shortcut.ctrl != event.ctrlKey) {
-	      return false;
-	    }
-	    if (shortcut.alt != event.altKey) {
-	      return false;
-	    }
-	    // Shift is a special modifier, it may implicitely be required if the
-	    // expected key is a special character accessible via shift.
-	    if (shortcut.shift != event.shiftKey && event.key &&
-	        event.key.match(/[a-zA-Z]/)) {
-	      return false;
-	    }
-	    if (shortcut.keyCode) {
-	      return event.keyCode == shortcut.keyCode;
-	    } else if (event.key in ElectronKeysMapping) {
-	      return ElectronKeysMapping[event.key] === shortcut.key;
-	    }
-
-	    // get the key from the keyCode if key is not provided.
-	    let key = event.key || String.fromCharCode(event.keyCode);
-
-	    // For character keys, we match if the final character is the expected one.
-	    // But for digits we also accept indirect match to please azerty keyboard,
-	    // which requires Shift to be pressed to get digits.
-	    return key.toLowerCase() == shortcut.key ||
-	      (shortcut.key.match(/[0-9]/) &&
-	       event.keyCode == shortcut.key.charCodeAt(0));
-	  },
-
-	  handleEvent(event) {
-	    for (let [key, shortcut] of this.keys) {
-	      if (this.doesEventMatchShortcut(event, shortcut)) {
-	        this.eventEmitter.emit(key, event);
-	      }
-	    }
-	  },
-
-	  on(key, listener) {
-	    if (typeof listener !== "function") {
-	      throw new Error("KeyShortcuts.on() expects a function as " +
-	                      "second argument");
-	    }
-	    if (!this.keys.has(key)) {
-	      let shortcut = KeyShortcuts.parseElectronKey(this.window, key);
-	      // The key string is wrong and we were unable to compute the key shortcut
-	      if (!shortcut) {
-	        return;
-	      }
-	      this.keys.set(key, shortcut);
-	    }
-	    this.eventEmitter.on(key, listener);
-	  },
-
-	  off(key, listener) {
-	    this.eventEmitter.off(key, listener);
-	  },
-	};
-	exports.KeyShortcuts = KeyShortcuts;
-
-
-/***/ },
-/* 40 */
-/***/ function(module, exports, __webpack_require__) {
-
-	const Services = __webpack_require__(41);
-	const SplitBox = __webpack_require__(42);
-	// const SplitBoxCSS = require("./client/shared/components/splitter/SplitBox.css")
-	const Rep = __webpack_require__(44).Rep;
-	const repUtils = __webpack_require__(45);
-	const StringRep = __webpack_require__(48).StringRep;
-
-	// const repCSS = require("./client/shared/components/reps/reps.css");
-	const Grip = __webpack_require__(54).Grip;
-	const sprintf = __webpack_require__(69).sprintf;
-
-	module.exports = {
-	  Services,
-	  SplitBox,
-	  // SplitBoxCSS,
-	  Rep,
-	  repUtils,
-	  StringRep,
-	  // repCSS,
-	  Grip,
-	  sprintf
-	};
-
-
-/***/ },
-/* 41 */
-/***/ function(module, exports) {
-
-	module.exports = require("Services");
-
-/***/ },
-/* 42 */
-/***/ function(module, exports, __webpack_require__) {
-
-	const React = __webpack_require__(6);
-	const ReactDOM = __webpack_require__(7);
-	const Draggable = React.createFactory(
-	  __webpack_require__(43));
-	const { DOM: dom, PropTypes } = React;
-
-	/**
-	 * This component represents a Splitter. The splitter supports vertical
-	 * as well as horizontal mode.
-	 */
-	const SplitBox = React.createClass({
-
-	  propTypes: {
-	    // Custom class name. You can use more names separated by a space.
-	    className: PropTypes.string,
-	    // Initial size of controlled panel.
-	    initialSize: PropTypes.any,
-	    // Optional initial width of controlled panel.
-	    initialWidth: PropTypes.number,
-	    // Optional initial height of controlled panel.
-	    initialHeight: PropTypes.number,
-	    // Left/top panel
-	    startPanel: PropTypes.any,
-	    // Left/top panel collapse state.
-	    startPanelCollapsed: PropTypes.bool,
-	    // Min panel size.
-	    minSize: PropTypes.any,
-	    // Max panel size.
-	    maxSize: PropTypes.any,
-	    // Right/bottom panel
-	    endPanel: PropTypes.any,
-	    // Right/bottom panel collapse state.
-	    endPanelCollapsed: PropTypes.bool,
-	    // True if the right/bottom panel should be controlled.
-	    endPanelControl: PropTypes.bool,
-	    // Size of the splitter handle bar.
-	    splitterSize: PropTypes.number,
-	    // True if the splitter bar is vertical (default is vertical).
-	    vert: PropTypes.bool,
-	    // Optional style properties passed into the splitbox
-	    style: PropTypes.object
-	  },
-
-	  displayName: "SplitBox",
-
-	  getDefaultProps() {
-	    return {
-	      splitterSize: 5,
-	      vert: true,
-	      endPanelControl: false,
-	      endPanelCollapsed: false,
-	      startPanelCollapsed: false
-	    };
-	  },
-
-	  /**
-	   * The state stores the current orientation (vertical or horizontal)
-	   * and the current size (width/height). All these values can change
-	   * during the component's life time.
-	   */
-	  getInitialState() {
-	    return {
-	      vert: this.props.vert,
-	      width: this.props.initialWidth || this.props.initialSize,
-	      height: this.props.initialHeight || this.props.initialSize
-	    };
-	  },
-
-	  componentWillReceiveProps(nextProps) {
-	    if (this.props.vert !== nextProps.vert) {
-	      this.setState({ vert: nextProps.vert });
-	    }
-	  },
-
-	  // Dragging Events
-
-	  /**
-	   * Set 'resizing' cursor on entire document during splitter dragging.
-	   * This avoids cursor-flickering that happens when the mouse leaves
-	   * the splitter bar area (happens frequently).
-	   */
-	  onStartMove() {
-	    const splitBox = ReactDOM.findDOMNode(this);
-	    const doc = splitBox.ownerDocument;
-	    let defaultCursor = doc.documentElement.style.cursor;
-	    doc.documentElement.style.cursor =
-	      (this.state.vert ? "ew-resize" : "ns-resize");
-
-	    splitBox.classList.add("dragging");
-
-	    this.setState({
-	      defaultCursor: defaultCursor
-	    });
-	  },
-
-	  onStopMove() {
-	    const splitBox = ReactDOM.findDOMNode(this);
-	    const doc = splitBox.ownerDocument;
-	    doc.documentElement.style.cursor = this.state.defaultCursor;
-
-	    splitBox.classList.remove("dragging");
-	  },
-
-	  screenX() {
-	    const borderWidth = (window.outerWidth - window.innerWidth) / 2;
-	    return window.screenX + borderWidth;
-	  },
-
-	  screenY() {
-	    const borderHeignt = (window.outerHeight - window.innerHeight);
-	    return window.screenY + borderHeignt;
-	  },
-
-	  /**
-	   * Adjust size of the controlled panel. Depending on the current
-	   * orientation we either remember the width or height of
-	   * the splitter box.
-	   */
-	  onMove(x, y) {
-	    const node = ReactDOM.findDOMNode(this);
-	    const doc = node.ownerDocument;
-	    const win = doc.defaultView;
-
-	    let size;
-	    let { endPanelControl } = this.props;
-
-	    if (this.state.vert) {
-	      // Switch the control flag in case of RTL. Note that RTL
-	      // has impact on vertical splitter only.
-	      let dir = win.getComputedStyle(doc.documentElement).direction;
-	      if (dir == "rtl") {
-	        endPanelControl = !endPanelControl;
-	      }
-
-	      let innerOffset = x - this.screenX();
-	      size = endPanelControl ?
-	        (node.offsetLeft + node.offsetWidth) - innerOffset :
-	        innerOffset - node.offsetLeft;
-
-	      this.setState({
-	        width: size
-	      });
-	    } else {
-	      let innerOffset = y - this.screenY();
-	      size = endPanelControl ?
-	        (node.offsetTop + node.offsetHeight) - innerOffset :
-	        innerOffset - node.offsetTop;
-
-	      this.setState({
-	        height: size
-	      });
-	    }
-	  },
-
-	  // Rendering
-	  preparePanelStyles() {
-	    const vert = this.state.vert;
-	    const {
-	      minSize, maxSize, startPanelCollapsed, endPanelControl,
-	      endPanelCollapsed } = this.props;
-	    let leftPanelStyle, rightPanelStyle;
-
-	    // Set proper size for panels depending on the current state.
-	    if (vert) {
-	      let startWidth = endPanelControl ? null : this.state.width,
-	        endWidth = endPanelControl ? this.state.width : null;
-
-	      leftPanelStyle = {
-	        maxWidth: endPanelControl ? null : maxSize,
-	        minWidth: endPanelControl ? null : minSize,
-	        width: startPanelCollapsed ? 0 : startWidth
-	      };
-	      rightPanelStyle = {
-	        maxWidth: endPanelControl ? maxSize : null,
-	        minWidth: endPanelControl ? minSize : null,
-	        width: endPanelCollapsed ? 0 : endWidth
-	      };
-	    } else {
-	      leftPanelStyle = {
-	        maxHeight: endPanelControl ? null : maxSize,
-	        minHeight: endPanelControl ? null : minSize,
-	        height: endPanelControl ? null : this.state.height
-	      };
-	      rightPanelStyle = {
-	        maxHeight: endPanelControl ? maxSize : null,
-	        minHeight: endPanelControl ? minSize : null,
-	        height: endPanelControl ? this.state.height : null
-	      };
-	    }
-
-	    return { leftPanelStyle, rightPanelStyle };
-	  },
-
-	  render() {
-	    const vert = this.state.vert;
-	    const { startPanel, endPanel, endPanelControl, splitterSize } = this.props;
-
-	    let style = Object.assign({}, this.props.style);
-
-	    // Calculate class names list.
-	    let classNames = ["split-box"];
-	    classNames.push(vert ? "vert" : "horz");
-	    if (this.props.className) {
-	      classNames = classNames.concat(this.props.className.split(" "));
-	    }
-
-	    const { leftPanelStyle, rightPanelStyle } = this.preparePanelStyles();
-
-	    // Calculate splitter size
-	    let splitterStyle = {
-	      flex: `0 0 ${splitterSize}px`
-	    };
-
-	    return (
-	      dom.div({
-	        className: classNames.join(" "),
-	        style: style },
-	        startPanel ?
-	          dom.div({
-	            className: endPanelControl ? "uncontrolled" : "controlled",
-	            style: leftPanelStyle },
-	            startPanel
-	          ) : null,
-	        Draggable({
-	          className: "splitter",
-	          style: splitterStyle,
-	          onStart: this.onStartMove,
-	          onStop: this.onStopMove,
-	          onMove: this.onMove
-	        }),
-	        endPanel ?
-	          dom.div({
-	            className: endPanelControl ? "controlled" : "uncontrolled",
-	            style: rightPanelStyle },
-	            endPanel
-	          ) : null
-	      )
-	    );
-	  }
-	});
-
-	module.exports = SplitBox;
-
-
-/***/ },
-/* 43 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-	 * You can obtain one at http://mozilla.org/MPL/2.0/. */
-	
-	const React = __webpack_require__(6);
-	const ReactDOM = __webpack_require__(7);
-	const { DOM: dom, PropTypes } = React;
-	
-	const Draggable = React.createClass({
-	  displayName: "Draggable",
-	
-	  propTypes: {
-	    onMove: PropTypes.func.isRequired,
-	    onStart: PropTypes.func,
-	    onStop: PropTypes.func,
-	    style: PropTypes.object,
-	    className: PropTypes.string
-	  },
-	
-	  startDragging(ev) {
-	    ev.preventDefault();
-	    const doc = ReactDOM.findDOMNode(this).ownerDocument;
-	    doc.addEventListener("mousemove", this.onMove);
-	    doc.addEventListener("mouseup", this.onUp);
-	    this.props.onStart && this.props.onStart();
-	  },
-	
-	  onMove(ev) {
-	    ev.preventDefault();
-	    // Use screen coordinates so, moving mouse over iframes
-	    // doesn't mangle (relative) coordinates.
-	    this.props.onMove(ev.screenX, ev.screenY);
-	  },
-	
-	  onUp(ev) {
-	    ev.preventDefault();
-	    const doc = ReactDOM.findDOMNode(this).ownerDocument;
-	    doc.removeEventListener("mousemove", this.onMove);
-	    doc.removeEventListener("mouseup", this.onUp);
-	    this.props.onStop && this.props.onStop();
-	  },
-	
-	  render() {
-	    return dom.div({
-	      style: this.props.style,
-	      className: this.props.className,
-	      onMouseDown: this.startDragging
-	    });
-	  }
-	});
-	
-	module.exports = Draggable;
-
-
-/***/ },
-/* 44 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-
-	  const { isGrip } = __webpack_require__(45);
-
-	  // Load all existing rep templates
-	  const { Undefined } = __webpack_require__(46);
-	  const { Null } = __webpack_require__(47);
-	  const { StringRep } = __webpack_require__(48);
-	  const { Number } = __webpack_require__(49);
-	  const { ArrayRep } = __webpack_require__(50);
-	  const { Obj } = __webpack_require__(52);
-	  const { SymbolRep } = __webpack_require__(55);
-
-	  // DOM types (grips)
-	  const { Attribute } = __webpack_require__(56);
-	  const { DateTime } = __webpack_require__(57);
-	  const { Document } = __webpack_require__(58);
-	  const { Event } = __webpack_require__(59);
-	  const { Func } = __webpack_require__(60);
-	  const { RegExp } = __webpack_require__(61);
-	  const { StyleSheet } = __webpack_require__(62);
-	  const { TextNode } = __webpack_require__(63);
-	  const { Window } = __webpack_require__(64);
-	  const { ObjectWithText } = __webpack_require__(65);
-	  const { ObjectWithURL } = __webpack_require__(66);
-	  const { GripArray } = __webpack_require__(67);
-	  const { GripMap } = __webpack_require__(68);
-	  const { Grip } = __webpack_require__(54);
-
-	  // List of all registered template.
-	  // XXX there should be a way for extensions to register a new
-	  // or modify an existing rep.
-	  let reps = [
-	    RegExp,
-	    StyleSheet,
-	    Event,
-	    DateTime,
-	    TextNode,
-	    Attribute,
-	    Func,
-	    ArrayRep,
-	    Document,
-	    Window,
-	    ObjectWithText,
-	    ObjectWithURL,
-	    GripArray,
-	    GripMap,
-	    Grip,
-	    Undefined,
-	    Null,
-	    StringRep,
-	    Number,
-	    SymbolRep,
-	  ];
-
-	  /**
-	   * Generic rep that is using for rendering native JS types or an object.
-	   * The right template used for rendering is picked automatically according
-	   * to the current value type. The value must be passed is as 'object'
-	   * property.
-	   */
-	  const Rep = React.createClass({
-	    displayName: "Rep",
-
-	    propTypes: {
-	      object: React.PropTypes.any,
-	      defaultRep: React.PropTypes.object,
-	      mode: React.PropTypes.string
-	    },
-
-	    render: function () {
-	      let rep = getRep(this.props.object, this.props.defaultRep);
-	      return rep(this.props);
-	    },
-	  });
-
-	  // Helpers
-
-	  /**
-	   * Return a rep object that is responsible for rendering given
-	   * object.
-	   *
-	   * @param object {Object} Object to be rendered in the UI. This
-	   * can be generic JS object as well as a grip (handle to a remote
-	   * debuggee object).
-	   *
-	   * @param defaultObject {React.Component} The default template
-	   * that should be used to render given object if none is found.
-	   */
-	  function getRep(object, defaultRep = Obj) {
-	    let type = typeof object;
-	    if (type == "object" && object instanceof String) {
-	      type = "string";
-	    } else if (type == "object" && object.type === "symbol") {
-	      type = "symbol";
-	    }
-
-	    if (isGrip(object)) {
-	      type = object.class;
-	    }
-
-	    for (let i = 0; i < reps.length; i++) {
-	      let rep = reps[i];
-	      try {
-	        // supportsObject could return weight (not only true/false
-	        // but a number), which would allow to priorities templates and
-	        // support better extensibility.
-	        if (rep.supportsObject(object, type)) {
-	          return React.createFactory(rep.rep);
-	        }
-	      } catch (err) {
-	        console.error(err);
-	      }
-	    }
-
-	    return React.createFactory(defaultRep.rep);
-	  }
-
-	  // Exports from this module
-	  exports.Rep = Rep;
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 45 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* globals URLSearchParams */
-	/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-
-	  /**
-	   * Create React factories for given arguments.
-	   * Example:
-	   *   const { Rep } = createFactories(require("./rep"));
-	   */
-	  function createFactories(args) {
-	    let result = {};
-	    for (let p in args) {
-	      result[p] = React.createFactory(args[p]);
-	    }
-	    return result;
-	  }
-
-	  /**
-	   * Returns true if the given object is a grip (see RDP protocol)
-	   */
-	  function isGrip(object) {
-	    return object && object.actor;
-	  }
-
-	  function escapeNewLines(value) {
-	    return value.replace(/\r/gm, "\\r").replace(/\n/gm, "\\n");
-	  }
-
-	  function cropMultipleLines(text, limit) {
-	    return escapeNewLines(cropString(text, limit));
-	  }
-
-	  function cropString(text, limit, alternativeText) {
-	    if (!alternativeText) {
-	      alternativeText = "\u2026";
-	    }
-
-	    // Make sure it's a string.
-	    text = text + "";
-
-	    // Replace all non-printable characters, except of
-	    // (horizontal) tab (HT: \x09) and newline (LF: \x0A, CR: \x0D),
-	    // with unicode replacement character (u+fffd).
-	    // eslint-disable-next-line no-control-regex
-	    let re = new RegExp("[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]", "g");
-	    text = text.replace(re, "\ufffd");
-
-	    // Crop the string only if a limit is actually specified.
-	    if (!limit || limit <= 0) {
-	      return text;
-	    }
-
-	    // Set the limit at least to the length of the alternative text
-	    // plus one character of the original text.
-	    if (limit <= alternativeText.length) {
-	      limit = alternativeText.length + 1;
-	    }
-
-	    let halfLimit = (limit - alternativeText.length) / 2;
-
-	    if (text.length > limit) {
-	      return text.substr(0, Math.ceil(halfLimit)) + alternativeText +
-	        text.substr(text.length - Math.floor(halfLimit));
-	    }
-
-	    return text;
-	  }
-
-	  function parseURLParams(url) {
-	    url = new URL(url);
-	    return parseURLEncodedText(url.searchParams);
-	  }
-
-	  function parseURLEncodedText(text) {
-	    let params = [];
-
-	    // In case the text is empty just return the empty parameters
-	    if (text == "") {
-	      return params;
-	    }
-
-	    let searchParams = new URLSearchParams(text);
-	    let entries = [...searchParams.entries()];
-	    return entries.map(entry => {
-	      return {
-	        name: entry[0],
-	        value: entry[1]
-	      };
-	    });
-	  }
-
-	  function getFileName(url) {
-	    let split = splitURLBase(url);
-	    return split.name;
-	  }
-
-	  function splitURLBase(url) {
-	    if (!isDataURL(url)) {
-	      return splitURLTrue(url);
-	    }
-	    return {};
-	  }
-
-	  function getURLDisplayString(url) {
-	    return cropString(url);
-	  }
-
-	  function isDataURL(url) {
-	    return (url && url.substr(0, 5) == "data:");
-	  }
-
-	  function splitURLTrue(url) {
-	    const reSplitFile = /(.*?):\/{2,3}([^\/]*)(.*?)([^\/]*?)($|\?.*)/;
-	    let m = reSplitFile.exec(url);
-
-	    if (!m) {
-	      return {
-	        name: url,
-	        path: url
-	      };
-	    } else if (m[4] == "" && m[5] == "") {
-	      return {
-	        protocol: m[1],
-	        domain: m[2],
-	        path: m[3],
-	        name: m[3] != "/" ? m[3] : m[2]
-	      };
-	    }
-
-	    return {
-	      protocol: m[1],
-	      domain: m[2],
-	      path: m[2] + m[3],
-	      name: m[4] + m[5]
-	    };
-	  }
-
-	  // Exports from this module
-	  exports.createFactories = createFactories;
-	  exports.isGrip = isGrip;
-	  exports.cropString = cropString;
-	  exports.cropMultipleLines = cropMultipleLines;
-	  exports.parseURLParams = parseURLParams;
-	  exports.parseURLEncodedText = parseURLEncodedText;
-	  exports.getFileName = getFileName;
-	  exports.getURLDisplayString = getURLDisplayString;
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 46 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders undefined value
-	   */
-	  const Undefined = React.createClass({
-	    displayName: "UndefinedRep",
-
-	    render: function () {
-	      return (
-	        span({className: "objectBox objectBox-undefined"},
-	          "undefined"
-	        )
-	      );
-	    },
-	  });
-
-	  function supportsObject(object, type) {
-	    if (object && object.type && object.type == "undefined") {
-	      return true;
-	    }
-
-	    return (type == "undefined");
-	  }
-
-	  // Exports from this module
-
-	  exports.Undefined = {
-	    rep: Undefined,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 47 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders null value
-	   */
-	  const Null = React.createClass({
-	    displayName: "NullRep",
-
-	    render: function () {
-	      return (
-	        span({className: "objectBox objectBox-null"},
-	          "null"
-	        )
-	      );
-	    },
-	  });
-
-	  function supportsObject(object, type) {
-	    if (object && object.type && object.type == "null") {
-	      return true;
-	    }
-
-	    return (object == null);
-	  }
-
-	  // Exports from this module
-
-	  exports.Null = {
-	    rep: Null,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 48 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-	  const { cropMultipleLines } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders a string. String value is enclosed within quotes.
-	   */
-	  const StringRep = React.createClass({
-	    displayName: "StringRep",
-
-	    propTypes: {
-	      useQuotes: React.PropTypes.bool,
-	    },
-
-	    getDefaultProps: function () {
-	      return {
-	        useQuotes: true,
-	      };
-	    },
-
-	    render: function () {
-	      let text = this.props.object;
-	      let member = this.props.member;
-	      if (member && member.open) {
-	        return (
-	          span({className: "objectBox objectBox-string"},
-	            "\"" + text + "\""
-	          )
-	        );
-	      }
-
-	      let croppedString = this.props.cropLimit ?
-	        cropMultipleLines(text, this.props.cropLimit) : cropMultipleLines(text);
-
-	      let formattedString = this.props.useQuotes ?
-	        "\"" + croppedString + "\"" : croppedString;
-
-	      return (
-	        span({className: "objectBox objectBox-string"}, formattedString
-	        )
-	      );
-	    },
-	  });
-
-	  function supportsObject(object, type) {
-	    return (type == "string");
-	  }
-
-	  // Exports from this module
-
-	  exports.StringRep = {
-	    rep: StringRep,
-	    supportsObject: supportsObject,
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 49 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders a number
-	   */
-	  const Number = React.createClass({
-	    displayName: "Number",
-
-	    stringify: function (object) {
-	      let isNegativeZero = Object.is(object, -0) ||
-	        (object.type && object.type == "-0");
-
-	      return (isNegativeZero ? "-0" : String(object));
-	    },
-
-	    render: function () {
-	      let value = this.props.object;
-
-	      return (
-	        span({className: "objectBox objectBox-number"},
-	          this.stringify(value)
-	        )
-	      );
-	    }
-	  });
-
-	  function supportsObject(object, type) {
-	    return type == "boolean" || type == "number" ||
-	      (type == "object" && object.type == "-0");
-	  }
-
-	  // Exports from this module
-
-	  exports.Number = {
-	    rep: Number,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 50 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-	  const { createFactories } = __webpack_require__(45);
-	  const { Caption } = createFactories(__webpack_require__(51));
-
-	  // Shortcuts
-	  const DOM = React.DOM;
-
-	  /**
-	   * Renders an array. The array is enclosed by left and right bracket
-	   * and the max number of rendered items depends on the current mode.
-	   */
-	  let ArrayRep = React.createClass({
-	    displayName: "ArrayRep",
-
-	    getTitle: function (object, context) {
-	      return "[" + object.length + "]";
-	    },
-
-	    arrayIterator: function (array, max) {
-	      let items = [];
-	      let delim;
-
-	      for (let i = 0; i < array.length && i < max; i++) {
-	        try {
-	          let value = array[i];
-
-	          delim = (i == array.length - 1 ? "" : ", ");
-
-	          items.push(ItemRep({
-	            key: i,
-	            object: value,
-	            // Hardcode tiny mode to avoid recursive handling.
-	            mode: "tiny",
-	            delim: delim
-	          }));
-	        } catch (exc) {
-	          items.push(ItemRep({
-	            key: i,
-	            object: exc,
-	            mode: "tiny",
-	            delim: delim
-	          }));
-	        }
-	      }
-
-	      if (array.length > max) {
-	        let objectLink = this.props.objectLink || DOM.span;
-	        items.push(Caption({
-	          key: "more",
-	          object: objectLink({
-	            object: this.props.object
-	          }, (array.length - max) + " more…")
-	        }));
-	      }
-
-	      return items;
-	    },
-
-	    /**
-	     * Returns true if the passed object is an array with additional (custom)
-	     * properties, otherwise returns false. Custom properties should be
-	     * displayed in extra expandable section.
-	     *
-	     * Example array with a custom property.
-	     * let arr = [0, 1];
-	     * arr.myProp = "Hello";
-	     *
-	     * @param {Array} array The array object.
-	     */
-	    hasSpecialProperties: function (array) {
-	      function isInteger(x) {
-	        let y = parseInt(x, 10);
-	        if (isNaN(y)) {
-	          return false;
-	        }
-	        return x === y.toString();
-	      }
-
-	      let props = Object.getOwnPropertyNames(array);
-	      for (let i = 0; i < props.length; i++) {
-	        let p = props[i];
-
-	        // Valid indexes are skipped
-	        if (isInteger(p)) {
-	          continue;
-	        }
-
-	        // Ignore standard 'length' property, anything else is custom.
-	        if (p != "length") {
-	          return true;
-	        }
-	      }
-
-	      return false;
-	    },
-
-	    // Event Handlers
-
-	    onToggleProperties: function (event) {
-	    },
-
-	    onClickBracket: function (event) {
-	    },
-
-	    render: function () {
-	      let mode = this.props.mode || "short";
-	      let object = this.props.object;
-	      let items;
-	      let brackets;
-	      let needSpace = function (space) {
-	        return space ? { left: "[ ", right: " ]"} : { left: "[", right: "]"};
-	      };
-
-	      if (mode == "tiny") {
-	        let isEmpty = object.length === 0;
-	        items = DOM.span({className: "length"}, isEmpty ? "" : object.length);
-	        brackets = needSpace(false);
-	      } else {
-	        let max = (mode == "short") ? 3 : 300;
-	        items = this.arrayIterator(object, max);
-	        brackets = needSpace(items.length > 0);
-	      }
-
-	      let objectLink = this.props.objectLink || DOM.span;
-
-	      return (
-	        DOM.span({
-	          className: "objectBox objectBox-array"},
-	          objectLink({
-	            className: "arrayLeftBracket",
-	            object: object
-	          }, brackets.left),
-	          items,
-	          objectLink({
-	            className: "arrayRightBracket",
-	            object: object
-	          }, brackets.right),
-	          DOM.span({
-	            className: "arrayProperties",
-	            role: "group"}
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  /**
-	   * Renders array item. Individual values are separated by a comma.
-	   */
-	  let ItemRep = React.createFactory(React.createClass({
-	    displayName: "ItemRep",
-
-	    render: function () {
-	      const { Rep } = createFactories(__webpack_require__(44));
-
-	      let object = this.props.object;
-	      let delim = this.props.delim;
-	      let mode = this.props.mode;
-	      return (
-	        DOM.span({},
-	          Rep({object: object, mode: mode}),
-	          delim
-	        )
-	      );
-	    }
-	  }));
-
-	  function supportsObject(object, type) {
-	    return Array.isArray(object) ||
-	      Object.prototype.toString.call(object) === "[object Arguments]";
-	  }
-
-	  // Exports from this module
-	  exports.ArrayRep = {
-	    rep: ArrayRep,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 51 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-	  const DOM = React.DOM;
-
-	  /**
-	   * Renders a caption. This template is used by other components
-	   * that needs to distinguish between a simple text/value and a label.
-	   */
-	  const Caption = React.createClass({
-	    displayName: "Caption",
-
-	    render: function () {
-	      return (
-	        DOM.span({"className": "caption"}, this.props.object)
-	      );
-	    },
-	  });
-
-	  // Exports from this module
-	  exports.Caption = Caption;
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 52 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-	  const { createFactories } = __webpack_require__(45);
-	  const { Caption } = createFactories(__webpack_require__(51));
-	  const { PropRep } = createFactories(__webpack_require__(53));
-	  // Shortcuts
-	  const { span } = React.DOM;
-	  /**
-	   * Renders an object. An object is represented by a list of its
-	   * properties enclosed in curly brackets.
-	   */
-	  const Obj = React.createClass({
-	    displayName: "Obj",
-
-	    propTypes: {
-	      object: React.PropTypes.object,
-	      mode: React.PropTypes.string,
-	    },
-
-	    getTitle: function (object) {
-	      let className = object && object.class ? object.class : "Object";
-	      if (this.props.objectLink) {
-	        return this.props.objectLink({
-	          object: object
-	        }, className);
-	      }
-	      return className;
-	    },
-
-	    safePropIterator: function (object, max) {
-	      max = (typeof max === "undefined") ? 3 : max;
-	      try {
-	        return this.propIterator(object, max);
-	      } catch (err) {
-	        console.error(err);
-	      }
-	      return [];
-	    },
-
-	    propIterator: function (object, max) {
-	      let isInterestingProp = (t, value) => {
-	        // Do not pick objects, it could cause recursion.
-	        return (t == "boolean" || t == "number" || (t == "string" && value));
-	      };
-
-	      // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=945377
-	      if (Object.prototype.toString.call(object) === "[object Generator]") {
-	        object = Object.getPrototypeOf(object);
-	      }
-
-	      // Object members with non-empty values are preferred since it gives the
-	      // user a better overview of the object.
-	      let props = this.getProps(object, max, isInterestingProp);
-
-	      if (props.length <= max) {
-	        // There are not enough props yet (or at least, not enough props to
-	        // be able to know whether we should print "more…" or not).
-	        // Let's display also empty members and functions.
-	        props = props.concat(this.getProps(object, max, (t, value) => {
-	          return !isInterestingProp(t, value);
-	        }));
-	      }
-
-	      if (props.length > max) {
-	        props.pop();
-	        let objectLink = this.props.objectLink || span;
-
-	        props.push(Caption({
-	          key: "more",
-	          object: objectLink({
-	            object: object
-	          }, (Object.keys(object).length - max) + " more…")
-	        }));
-	      } else if (props.length > 0) {
-	        // Remove the last comma.
-	        props[props.length - 1] = React.cloneElement(
-	          props[props.length - 1], { delim: "" });
-	      }
-
-	      return props;
-	    },
-
-	    getProps: function (object, max, filter) {
-	      let props = [];
-
-	      max = max || 3;
-	      if (!object) {
-	        return props;
-	      }
-
-	      // Hardcode tiny mode to avoid recursive handling.
-	      let mode = "tiny";
-
-	      try {
-	        for (let name in object) {
-	          if (props.length > max) {
-	            return props;
-	          }
-
-	          let value;
-	          try {
-	            value = object[name];
-	          } catch (exc) {
-	            continue;
-	          }
-
-	          let t = typeof value;
-	          if (filter(t, value)) {
-	            props.push(PropRep({
-	              key: name,
-	              mode: mode,
-	              name: name,
-	              object: value,
-	              equal: ": ",
-	              delim: ", ",
-	            }));
-	          }
-	        }
-	      } catch (err) {
-	        console.error(err);
-	      }
-
-	      return props;
-	    },
-
-	    render: function () {
-	      let object = this.props.object;
-	      let props = this.safePropIterator(object);
-	      let objectLink = this.props.objectLink || span;
-
-	      if (this.props.mode == "tiny" || !props.length) {
-	        return (
-	          span({className: "objectBox objectBox-object"},
-	            objectLink({className: "objectTitle"}, this.getTitle(object))
-	          )
-	        );
-	      }
-
-	      return (
-	        span({className: "objectBox objectBox-object"},
-	          this.getTitle(object),
-	          objectLink({
-	            className: "objectLeftBrace",
-	            object: object
-	          }, " { "),
-	          props,
-	          objectLink({
-	            className: "objectRightBrace",
-	            object: object
-	          }, " }")
-	        )
-	      );
-	    },
-	  });
-	  function supportsObject(object, type) {
-	    return true;
-	  }
-
-	  // Exports from this module
-	  exports.Obj = {
-	    rep: Obj,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 53 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  const React = __webpack_require__(6);
-	  const { createFactories } = __webpack_require__(45);
-	  const { span } = React.DOM;
-
-	  /**
-	   * Property for Obj (local JS objects), Grip (remote JS objects)
-	   * and GripMap (remote JS maps and weakmaps) reps.
-	   * It's used to render object properties.
-	   */
-	  let PropRep = React.createFactory(React.createClass({
-	    displayName: "PropRep",
-
-	    propTypes: {
-	      // Property name.
-	      name: React.PropTypes.oneOfType([
-	        React.PropTypes.string,
-	        React.PropTypes.object,
-	      ]).isRequired,
-	      // Equal character rendered between property name and value.
-	      equal: React.PropTypes.string,
-	      // Delimiter character used to separate individual properties.
-	      delim: React.PropTypes.string,
-	      mode: React.PropTypes.string,
-	    },
-
-	    render: function () {
-	      const { Grip } = __webpack_require__(54);
-	      let { Rep } = createFactories(__webpack_require__(44));
-
-	      let key;
-	      // The key can be a simple string, for plain objects,
-	      // or another object for maps and weakmaps.
-	      if (typeof this.props.name === "string") {
-	        key = span({"className": "nodeName"}, this.props.name);
-	      } else {
-	        key = Rep({
-	          object: this.props.name,
-	          mode: this.props.mode || "tiny",
-	          defaultRep: Grip,
-	          objectLink: this.props.objectLink,
-	        });
-	      }
-
-	      return (
-	        span({},
-	          key,
-	          span({
-	            "className": "objectEqual"
-	          }, this.props.equal),
-	          Rep(this.props),
-	          span({
-	            "className": "objectComma"
-	          }, this.props.delim)
-	        )
-	      );
-	    }
-	  }));
-
-	  // Exports from this module
-	  exports.PropRep = PropRep;
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 54 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-	  // Dependencies
-	  const { createFactories, isGrip } = __webpack_require__(45);
-	  const { Caption } = createFactories(__webpack_require__(51));
-	  const { PropRep } = createFactories(__webpack_require__(53));
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders generic grip. Grip is client representation
-	   * of remote JS object and is used as an input object
-	   * for this rep component.
-	   */
-	  const GripRep = React.createClass({
-	    displayName: "Grip",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	      mode: React.PropTypes.string,
-	      isInterestingProp: React.PropTypes.func
-	    },
-
-	    getTitle: function (object) {
-	      if (this.props.objectLink) {
-	        return this.props.objectLink({
-	          object: object
-	        }, object.class);
-	      }
-	      return object.class || "Object";
-	    },
-
-	    safePropIterator: function (object, max) {
-	      max = (typeof max === "undefined") ? 3 : max;
-	      try {
-	        return this.propIterator(object, max);
-	      } catch (err) {
-	        console.error(err);
-	      }
-	      return [];
-	    },
-
-	    propIterator: function (object, max) {
-	      // Property filter. Show only interesting properties to the user.
-	      let isInterestingProp = this.props.isInterestingProp || ((type, value) => {
-	        return (
-	          type == "boolean" ||
-	          type == "number" ||
-	          (type == "string" && value.length != 0)
-	        );
-	      });
-
-	      let ownProperties = object.preview ? object.preview.ownProperties : [];
-	      let indexes = this.getPropIndexes(ownProperties, max, isInterestingProp);
-	      if (indexes.length < max && indexes.length < object.ownPropertyLength) {
-	        // There are not enough props yet. Then add uninteresting props to display them.
-	        indexes = indexes.concat(
-	          this.getPropIndexes(ownProperties, max - indexes.length, (t, value, name) => {
-	            return !isInterestingProp(t, value, name);
-	          })
-	        );
-	      }
-
-	      let props = this.getProps(ownProperties, indexes);
-	      if (props.length < object.ownPropertyLength) {
-	        // There are some undisplayed props. Then display "more...".
-	        let objectLink = this.props.objectLink || span;
-
-	        props.push(Caption({
-	          key: "more",
-	          object: objectLink({
-	            object: object
-	          }, ((object ? object.ownPropertyLength : 0) - max) + " more…")
-	        }));
-	      } else if (props.length > 0) {
-	        // Remove the last comma.
-	        // NOTE: do not change comp._store.props directly to update a property,
-	        // it should be re-rendered or cloned with changed props
-	        let last = props.length - 1;
-	        props[last] = React.cloneElement(props[last], {
-	          delim: ""
-	        });
-	      }
-
-	      return props;
-	    },
-
-	    /**
-	     * Get props ordered by index.
-	     *
-	     * @param {Object} ownProperties Props object.
-	     * @param {Array} indexes Indexes of props.
-	     * @return {Array} Props.
-	     */
-	    getProps: function (ownProperties, indexes) {
-	      let props = [];
-
-	      if (!ownProperties || ownProperties.length == 0) {
-	        return props;
-	      }
-
-	      // Make indexes ordered by ascending.
-	      indexes.sort(function (a, b) {
-	        return a - b;
-	      });
-
-	      indexes.forEach((i) => {
-	        let name = Object.keys(ownProperties)[i];
-	        let prop = ownProperties[name];
-	        let value = prop.value !== undefined ? prop.value : prop;
-	        props.push(PropRep(Object.assign({}, this.props, {
-	          key: name,
-	          mode: "tiny",
-	          name: name,
-	          object: value,
-	          equal: ": ",
-	          delim: ", ",
-	          defaultRep: Grip
-	        })));
-	      });
-
-	      return props;
-	    },
-
-	    /**
-	     * Get the indexes of props in the object.
-	     *
-	     * @param {Object} ownProperties Props object.
-	     * @param {Number} max The maximum length of indexes array.
-	     * @param {Function} filter Filter the props you want.
-	     * @return {Array} Indexes of interesting props in the object.
-	     */
-	    getPropIndexes: function (ownProperties, max, filter) {
-	      let indexes = [];
-
-	      try {
-	        let i = 0;
-	        for (let name in ownProperties) {
-	          if (indexes.length >= max) {
-	            return indexes;
-	          }
-
-	          let prop = ownProperties[name];
-	          let value = prop.value !== undefined ? prop.value : prop;
-
-	          // Type is specified in grip's "class" field and for primitive
-	          // values use typeof.
-	          let type = (value.class || typeof value);
-	          type = type.toLowerCase();
-
-	          if (filter(type, value, name)) {
-	            indexes.push(i);
-	          }
-	          i++;
-	        }
-	      } catch (err) {
-	        console.error(err);
-	      }
-
-	      return indexes;
-	    },
-
-	    render: function () {
-	      let object = this.props.object;
-	      let props = this.safePropIterator(object,
-	        (this.props.mode == "long") ? 100 : 3);
-
-	      let objectLink = this.props.objectLink || span;
-	      if (this.props.mode == "tiny" || !props.length) {
-	        return (
-	          span({className: "objectBox objectBox-object"},
-	            this.getTitle(object),
-	            objectLink({
-	              className: "objectLeftBrace",
-	              object: object
-	            }, "")
-	          )
-	        );
-	      }
-
-	      return (
-	        span({className: "objectBox objectBox-object"},
-	          this.getTitle(object),
-	          objectLink({
-	            className: "objectLeftBrace",
-	            object: object
-	          }, " { "),
-	          props,
-	          objectLink({
-	            className: "objectRightBrace",
-	            object: object
-	          }, " }")
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-	  function supportsObject(object, type) {
-	    if (!isGrip(object)) {
-	      return false;
-	    }
-	    return (object.preview && object.preview.ownProperties);
-	  }
-
-	  let Grip = {
-	    rep: GripRep,
-	    supportsObject: supportsObject
-	  };
-
-	  // Exports from this module
-	  exports.Grip = Grip;
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 55 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders a symbol.
-	   */
-	  const SymbolRep = React.createClass({
-	    displayName: "SymbolRep",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired
-	    },
-
-	    render: function () {
-	      let {object} = this.props;
-	      let {name} = object;
-
-	      return (
-	        span({className: "objectBox objectBox-symbol"},
-	          `Symbol(${name || ""})`
-	        )
-	      );
-	    },
-	  });
-
-	  function supportsObject(object, type) {
-	    return (type == "symbol");
-	  }
-
-	  // Exports from this module
-	  exports.SymbolRep = {
-	    rep: SymbolRep,
-	    supportsObject: supportsObject,
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 56 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { createFactories, isGrip } = __webpack_require__(45);
-	  const { StringRep } = __webpack_require__(48);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-	  const { rep: StringRepFactory } = createFactories(StringRep);
-
-	  /**
-	   * Renders DOM attribute
-	   */
-	  let Attribute = React.createClass({
-	    displayName: "Attr",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired
-	    },
-
-	    getTitle: function (grip) {
-	      return grip.preview.nodeName;
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-	      let value = grip.preview.value;
-	      let objectLink = this.props.objectLink || span;
-
-	      return (
-	        objectLink({className: "objectLink-Attr"},
-	          span({},
-	            span({className: "attrTitle"},
-	              this.getTitle(grip)
-	            ),
-	            span({className: "attrEqual"},
-	              "="
-	            ),
-	            StringRepFactory({object: value})
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (type == "Attr" && grip.preview);
-	  }
-
-	  exports.Attribute = {
-	    rep: Attribute,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 57 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Used to render JS built-in Date() object.
-	   */
-	  let DateTime = React.createClass({
-	    displayName: "Date",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return this.props.objectLink({
-	          object: grip
-	        }, grip.class + " ");
-	      }
-	      return "";
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-	      return (
-	        span({className: "objectBox"},
-	          this.getTitle(grip),
-	          span({className: "Date"},
-	            new Date(grip.preview.timestamp).toISOString()
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (type == "Date" && grip.preview);
-	  }
-
-	  // Exports from this module
-	  exports.DateTime = {
-	    rep: DateTime,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 58 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip, getURLDisplayString } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders DOM document object.
-	   */
-	  let Document = React.createClass({
-	    displayName: "Document",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired
-	    },
-
-	    getLocation: function (grip) {
-	      let location = grip.preview.location;
-	      return location ? getURLDisplayString(location) : "";
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return span({className: "objectBox"},
-	          this.props.objectLink({
-	            object: grip
-	          }, grip.class + " ")
-	        );
-	      }
-	      return "";
-	    },
-
-	    getTooltip: function (doc) {
-	      return doc.location.href;
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-
-	      return (
-	        span({className: "objectBox objectBox-object"},
-	          this.getTitle(grip),
-	          span({className: "objectPropValue"},
-	            this.getLocation(grip)
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(object, type) {
-	    if (!isGrip(object)) {
-	      return false;
-	    }
-
-	    return (object.preview && type == "HTMLDocument");
-	  }
-
-	  // Exports from this module
-	  exports.Document = {
-	    rep: Document,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 59 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { createFactories, isGrip } = __webpack_require__(45);
-	  const { rep } = createFactories(__webpack_require__(54).Grip);
-
-	  /**
-	   * Renders DOM event objects.
-	   */
-	  let Event = React.createClass({
-	    displayName: "event",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired
-	    },
-
-	    render: function () {
-	      // Use `Object.assign` to keep `this.props` without changes because:
-	      // 1. JSON.stringify/JSON.parse is slow.
-	      // 2. Immutable.js is planned for the future.
-	      let props = Object.assign({}, this.props);
-	      props.object = Object.assign({}, this.props.object);
-	      props.object.preview = Object.assign({}, this.props.object.preview);
-	      props.object.preview.ownProperties = props.object.preview.properties;
-	      delete props.object.preview.properties;
-	      props.object.ownPropertyLength =
-	        Object.keys(props.object.preview.ownProperties).length;
-
-	      switch (props.object.class) {
-	        case "MouseEvent":
-	          props.isInterestingProp = (type, value, name) => {
-	            return (name == "clientX" ||
-	                    name == "clientY" ||
-	                    name == "layerX" ||
-	                    name == "layerY");
-	          };
-	          break;
-	        case "KeyboardEvent":
-	          props.isInterestingProp = (type, value, name) => {
-	            return (name == "key" ||
-	                    name == "charCode" ||
-	                    name == "keyCode");
-	          };
-	          break;
-	        case "MessageEvent":
-	          props.isInterestingProp = (type, value, name) => {
-	            return (name == "isTrusted" ||
-	                    name == "data");
-	          };
-	          break;
-	      }
-	      return rep(props);
-	    }
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (grip.preview && grip.preview.kind == "DOMEvent");
-	  }
-
-	  // Exports from this module
-	  exports.Event = {
-	    rep: Event,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 60 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip, cropString } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * This component represents a template for Function objects.
-	   */
-	  let Func = React.createClass({
-	    displayName: "Func",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return this.props.objectLink({
-	          object: grip
-	        }, "function ");
-	      }
-	      return "";
-	    },
-
-	    summarizeFunction: function (grip) {
-	      let name = grip.userDisplayName || grip.displayName || grip.name || "function";
-	      return cropString(name + "()", 100);
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-
-	      return (
-	        span({className: "objectBox objectBox-function"},
-	          this.getTitle(grip),
-	          this.summarizeFunction(grip)
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return (type == "function");
-	    }
-
-	    return (type == "Function");
-	  }
-
-	  // Exports from this module
-
-	  exports.Func = {
-	    rep: Func,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 61 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders a grip object with regular expression.
-	   */
-	  let RegExp = React.createClass({
-	    displayName: "regexp",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	    },
-
-	    getSource: function (grip) {
-	      return grip.displayString;
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-	      let objectLink = this.props.objectLink || span;
-
-	      return (
-	        span({className: "objectBox objectBox-regexp"},
-	          objectLink({
-	            object: grip,
-	            className: "regexpSource"
-	          }, this.getSource(grip))
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(object, type) {
-	    if (!isGrip(object)) {
-	      return false;
-	    }
-
-	    return (type == "RegExp");
-	  }
-
-	  // Exports from this module
-	  exports.RegExp = {
-	    rep: RegExp,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 62 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip, getURLDisplayString } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const DOM = React.DOM;
-
-	  /**
-	   * Renders a grip representing CSSStyleSheet
-	   */
-	  let StyleSheet = React.createClass({
-	    displayName: "object",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	    },
-
-	    getTitle: function (grip) {
-	      let title = "StyleSheet ";
-	      if (this.props.objectLink) {
-	        return DOM.span({className: "objectBox"},
-	          this.props.objectLink({
-	            object: grip
-	          }, title)
-	        );
-	      }
-	      return title;
-	    },
-
-	    getLocation: function (grip) {
-	      // Embedded stylesheets don't have URL and so, no preview.
-	      let url = grip.preview ? grip.preview.url : "";
-	      return url ? getURLDisplayString(url) : "";
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-
-	      return (
-	        DOM.span({className: "objectBox objectBox-object"},
-	          this.getTitle(grip),
-	          DOM.span({className: "objectPropValue"},
-	            this.getLocation(grip)
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(object, type) {
-	    if (!isGrip(object)) {
-	      return false;
-	    }
-
-	    return (type == "CSSStyleSheet");
-	  }
-
-	  // Exports from this module
-
-	  exports.StyleSheet = {
-	    rep: StyleSheet,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 63 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip, cropMultipleLines } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const DOM = React.DOM;
-
-	  /**
-	   * Renders DOM #text node.
-	   */
-	  let TextNode = React.createClass({
-	    displayName: "TextNode",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	      mode: React.PropTypes.string,
-	    },
-
-	    getTextContent: function (grip) {
-	      return cropMultipleLines(grip.preview.textContent);
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return this.props.objectLink({
-	          object: grip
-	        }, "#text");
-	      }
-	      return "";
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-	      let mode = this.props.mode || "short";
-
-	      if (mode == "short" || mode == "tiny") {
-	        return (
-	          DOM.span({className: "objectBox objectBox-textNode"},
-	            this.getTitle(grip),
-	            "\"" + this.getTextContent(grip) + "\""
-	          )
-	        );
-	      }
-
-	      let objectLink = this.props.objectLink || DOM.span;
-	      return (
-	        DOM.span({className: "objectBox objectBox-textNode"},
-	          this.getTitle(grip),
-	          objectLink({
-	            object: grip
-	          }, "<"),
-	          DOM.span({className: "nodeTag"}, "TextNode"),
-	          " textContent=\"",
-	          DOM.span({className: "nodeValue"},
-	            this.getTextContent(grip)
-	          ),
-	          "\"",
-	          objectLink({
-	            object: grip
-	          }, ">;")
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (grip.preview && grip.class == "Text");
-	  }
-
-	  // Exports from this module
-	  exports.TextNode = {
-	    rep: TextNode,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 64 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip, getURLDisplayString } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const DOM = React.DOM;
-
-	  /**
-	   * Renders a grip representing a window.
-	   */
-	  let Window = React.createClass({
-	    displayName: "Window",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	      mode: React.PropTypes.string
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return DOM.span({className: "objectBox"},
-	          this.props.objectLink({
-	            object: grip
-	          }, grip.class + " ")
-	        );
-	      }
-	      return "";
-	    },
-
-	    getLocation: function (grip) {
-	      return getURLDisplayString(grip.preview.url);
-	    },
-
-	    getDisplayValue: function (grip) {
-	      if (this.props.mode === "tiny") {
-	        return grip.isGlobal ? "Global" : "Window";
-	      } else {
-	        return this.getLocation(grip);
-	      }
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-
-	      return (
-	        DOM.span({className: "objectBox objectBox-Window"},
-	          this.getTitle(grip),
-	          DOM.span({className: "objectPropValue"},
-	            this.getDisplayValue(grip)
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(object, type) {
-	    if (!isGrip(object)) {
-	      return false;
-	    }
-
-	    return (object.preview && type == "Window");
-	  }
-
-	  // Exports from this module
-	  exports.Window = {
-	    rep: Window,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 65 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders a grip object with textual data.
-	   */
-	  let ObjectWithText = React.createClass({
-	    displayName: "ObjectWithText",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return span({className: "objectBox"},
-	          this.props.objectLink({
-	            object: grip
-	          }, this.getType(grip) + " ")
-	        );
-	      }
-	      return "";
-	    },
-
-	    getType: function (grip) {
-	      return grip.class;
-	    },
-
-	    getDescription: function (grip) {
-	      return "\"" + grip.preview.text + "\"";
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-	      return (
-	        span({className: "objectBox objectBox-" + this.getType(grip)},
-	          this.getTitle(grip),
-	          span({className: "objectPropValue"},
-	            this.getDescription(grip)
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (grip.preview && grip.preview.kind == "ObjectWithText");
-	  }
-
-	  // Exports from this module
-	  exports.ObjectWithText = {
-	    rep: ObjectWithText,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 66 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // ReactJS
-	  const React = __webpack_require__(6);
-
-	  // Reps
-	  const { isGrip, getURLDisplayString } = __webpack_require__(45);
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders a grip object with URL data.
-	   */
-	  let ObjectWithURL = React.createClass({
-	    displayName: "ObjectWithURL",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	    },
-
-	    getTitle: function (grip) {
-	      if (this.props.objectLink) {
-	        return span({className: "objectBox"},
-	          this.props.objectLink({
-	            object: grip
-	          }, this.getType(grip) + " ")
-	        );
-	      }
-	      return "";
-	    },
-
-	    getType: function (grip) {
-	      return grip.class;
-	    },
-
-	    getDescription: function (grip) {
-	      return getURLDisplayString(grip.preview.url);
-	    },
-
-	    render: function () {
-	      let grip = this.props.object;
-	      return (
-	        span({className: "objectBox objectBox-" + this.getType(grip)},
-	          this.getTitle(grip),
-	          span({className: "objectPropValue"},
-	            this.getDescription(grip)
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  // Registration
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (grip.preview && grip.preview.kind == "ObjectWithURL");
-	  }
-
-	  // Exports from this module
-	  exports.ObjectWithURL = {
-	    rep: ObjectWithURL,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 67 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-	  const { createFactories, isGrip } = __webpack_require__(45);
-	  const { Caption } = createFactories(__webpack_require__(51));
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-
-	  /**
-	   * Renders an array. The array is enclosed by left and right bracket
-	   * and the max number of rendered items depends on the current mode.
-	   */
-	  let GripArray = React.createClass({
-	    displayName: "GripArray",
-
-	    propTypes: {
-	      object: React.PropTypes.object.isRequired,
-	      mode: React.PropTypes.string,
-	      provider: React.PropTypes.object,
-	    },
-
-	    getLength: function (grip) {
-	      return grip.preview ? grip.preview.length : 0;
-	    },
-
-	    getTitle: function (object, context) {
-	      let objectLink = this.props.objectLink || span;
-	      if (this.props.mode != "tiny") {
-	        return objectLink({
-	          object: object
-	        }, object.class + " ");
-	      }
-	      return "";
-	    },
-
-	    arrayIterator: function (grip, max) {
-	      let items = [];
-
-	      if (!grip.preview || !grip.preview.length) {
-	        return items;
-	      }
-
-	      let array = grip.preview.items;
-	      if (!array) {
-	        return items;
-	      }
-
-	      let delim;
-	      // number of grip.preview.items is limited to 10, but we may have more
-	      // items in grip-array
-	      let delimMax = grip.preview.length > array.length ?
-	        array.length : array.length - 1;
-	      let provider = this.props.provider;
-
-	      for (let i = 0; i < array.length && i < max; i++) {
-	        try {
-	          let itemGrip = array[i];
-	          let value = provider ? provider.getValue(itemGrip) : itemGrip;
-
-	          delim = (i == delimMax ? "" : ", ");
-
-	          items.push(GripArrayItem(Object.assign({}, this.props, {
-	            key: i,
-	            object: value,
-	            delim: delim}
-	          )));
-	        } catch (exc) {
-	          items.push(GripArrayItem(Object.assign({}, this.props, {
-	            object: exc,
-	            delim: delim,
-	            key: i}
-	          )));
-	        }
-	      }
-	      if (array.length > max || grip.preview.length > array.length) {
-	        let objectLink = this.props.objectLink || span;
-	        let leftItemNum = grip.preview.length - max > 0 ?
-	          grip.preview.length - max : grip.preview.length - array.length;
-	        items.push(Caption({
-	          key: "more",
-	          object: objectLink({
-	            object: this.props.object
-	          }, leftItemNum + " more…")
-	        }));
-	      }
-
-	      return items;
-	    },
-
-	    render: function () {
-	      let mode = this.props.mode || "short";
-	      let object = this.props.object;
-
-	      let items;
-	      let brackets;
-	      let needSpace = function (space) {
-	        return space ? { left: "[ ", right: " ]"} : { left: "[", right: "]"};
-	      };
-
-	      if (mode == "tiny") {
-	        let objectLength = this.getLength(object);
-	        let isEmpty = objectLength === 0;
-	        items = span({className: "length"}, isEmpty ? "" : objectLength);
-	        brackets = needSpace(false);
-	      } else {
-	        let max = (mode == "short") ? 3 : 300;
-	        items = this.arrayIterator(object, max);
-	        brackets = needSpace(items.length > 0);
-	      }
-
-	      let objectLink = this.props.objectLink || span;
-	      let title = this.getTitle(object);
-
-	      return (
-	        span({
-	          className: "objectBox objectBox-array"},
-	          title,
-	          objectLink({
-	            className: "arrayLeftBracket",
-	            object: object
-	          }, brackets.left),
-	          items,
-	          objectLink({
-	            className: "arrayRightBracket",
-	            object: object
-	          }, brackets.right),
-	          span({
-	            className: "arrayProperties",
-	            role: "group"}
-	          )
-	        )
-	      );
-	    },
-	  });
-
-	  /**
-	   * Renders array item. Individual values are separated by
-	   * a delimiter (a comma by default).
-	   */
-	  let GripArrayItem = React.createFactory(React.createClass({
-	    displayName: "GripArrayItem",
-
-	    propTypes: {
-	      delim: React.PropTypes.string,
-	    },
-
-	    render: function () {
-	      let { Rep } = createFactories(__webpack_require__(44));
-
-	      return (
-	        span({},
-	          Rep(Object.assign({}, this.props, {
-	            mode: "tiny"
-	          })),
-	          this.props.delim
-	        )
-	      );
-	    }
-	  }));
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-
-	    return (grip.preview && grip.preview.kind == "ArrayLike");
-	  }
-
-	  // Exports from this module
-	  exports.GripArray = {
-	    rep: GripArray,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 68 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-	/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	"use strict";
-	// Make this available to both AMD and CJS environments
-	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
-	  // Dependencies
-	  const React = __webpack_require__(6);
-	  const { createFactories, isGrip } = __webpack_require__(45);
-	  const { Caption } = createFactories(__webpack_require__(51));
-	  const { PropRep } = createFactories(__webpack_require__(53));
-
-	  // Shortcuts
-	  const { span } = React.DOM;
-	  /**
-	   * Renders an map. A map is represented by a list of its
-	   * entries enclosed in curly brackets.
-	   */
-	  const GripMap = React.createClass({
-	    displayName: "GripMap",
-
-	    propTypes: {
-	      object: React.PropTypes.object,
-	      mode: React.PropTypes.string,
-	    },
-
-	    getTitle: function (object) {
-	      let title = object && object.class ? object.class : "Map";
-	      if (this.props.objectLink) {
-	        return this.props.objectLink({
-	          object: object
-	        }, title);
-	      }
-	      return title;
-	    },
-
-	    safeEntriesIterator: function (object, max) {
-	      max = (typeof max === "undefined") ? 3 : max;
-	      try {
-	        return this.entriesIterator(object, max);
-	      } catch (err) {
-	        console.error(err);
-	      }
-	      return [];
-	    },
-
-	    entriesIterator: function (object, max) {
-	      // Entry filter. Show only interesting entries to the user.
-	      let isInterestingEntry = this.props.isInterestingEntry || ((type, value) => {
-	        return (
-	          type == "boolean" ||
-	          type == "number" ||
-	          (type == "string" && value.length != 0)
-	        );
-	      });
-
-	      let mapEntries = object.preview && object.preview.entries
-	        ? object.preview.entries : [];
-
-	      let indexes = this.getEntriesIndexes(mapEntries, max, isInterestingEntry);
-	      if (indexes.length < max && indexes.length < mapEntries.length) {
-	        // There are not enough entries yet, so we add uninteresting entries.
-	        indexes = indexes.concat(
-	          this.getEntriesIndexes(mapEntries, max - indexes.length, (t, value, name) => {
-	            return !isInterestingEntry(t, value, name);
-	          })
-	        );
-	      }
-
-	      let entries = this.getEntries(mapEntries, indexes);
-	      if (entries.length < mapEntries.length) {
-	        // There are some undisplayed entries. Then display "more…".
-	        let objectLink = this.props.objectLink || span;
-
-	        entries.push(Caption({
-	          key: "more",
-	          object: objectLink({
-	            object: object
-	          }, `${mapEntries.length - max} more…`)
-	        }));
-	      }
-
-	      return entries;
-	    },
-
-	    /**
-	     * Get entries ordered by index.
-	     *
-	     * @param {Array} entries Entries array.
-	     * @param {Array} indexes Indexes of entries.
-	     * @return {Array} Array of PropRep.
-	     */
-	    getEntries: function (entries, indexes) {
-	      // Make indexes ordered by ascending.
-	      indexes.sort(function (a, b) {
-	        return a - b;
-	      });
-
-	      return indexes.map((index, i) => {
-	        let [key, entryValue] = entries[index];
-	        let value = entryValue.value !== undefined ? entryValue.value : entryValue;
-
-	        return PropRep({
-	          // key,
-	          name: key,
-	          equal: ": ",
-	          object: value,
-	          // Do not add a trailing comma on the last entry
-	          // if there won't be a "more..." item.
-	          delim: (i < indexes.length - 1 || indexes.length < entries.length) ? ", " : "",
-	          mode: "tiny",
-	          objectLink: this.props.objectLink,
-	        });
-	      });
-	    },
-
-	    /**
-	     * Get the indexes of entries in the map.
-	     *
-	     * @param {Array} entries Entries array.
-	     * @param {Number} max The maximum length of indexes array.
-	     * @param {Function} filter Filter the entry you want.
-	     * @return {Array} Indexes of filtered entries in the map.
-	     */
-	    getEntriesIndexes: function (entries, max, filter) {
-	      return entries
-	        .reduce((indexes, [key, entry], i) => {
-	          if (indexes.length < max) {
-	            let value = (entry && entry.value !== undefined) ? entry.value : entry;
-	            // Type is specified in grip's "class" field and for primitive
-	            // values use typeof.
-	            let type = (value && value.class ? value.class : typeof value).toLowerCase();
-
-	            if (filter(type, value, key)) {
-	              indexes.push(i);
-	            }
-	          }
-
-	          return indexes;
-	        }, []);
-	    },
-
-	    render: function () {
-	      let object = this.props.object;
-	      let props = this.safeEntriesIterator(object,
-	        (this.props.mode == "long") ? 100 : 3);
-
-	      let objectLink = this.props.objectLink || span;
-	      if (this.props.mode == "tiny") {
-	        return (
-	          span({className: "objectBox objectBox-object"},
-	            this.getTitle(object),
-	            objectLink({
-	              className: "objectLeftBrace",
-	              object: object
-	            }, "")
-	          )
-	        );
-	      }
-
-	      return (
-	        span({className: "objectBox objectBox-object"},
-	          this.getTitle(object),
-	          objectLink({
-	            className: "objectLeftBrace",
-	            object: object
-	          }, " { "),
-	          props,
-	          objectLink({
-	            className: "objectRightBrace",
-	            object: object
-	          }, " }")
-	        )
-	      );
-	    },
-	  });
-
-	  function supportsObject(grip, type) {
-	    if (!isGrip(grip)) {
-	      return false;
-	    }
-	    return (grip.preview && grip.preview.kind == "MapLike");
-	  }
-
-	  // Exports from this module
-	  exports.GripMap = {
-	    rep: GripMap,
-	    supportsObject: supportsObject
-	  };
-	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-
-
-/***/ },
-/* 69 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Copyright (c) 2007-2016, Alexandru Marasteanu <hello [at) alexei (dot] ro>
-	 * All rights reserved.
-	 *
-	 * Redistribution and use in source and binary forms, with or without
-	 * modification, are permitted provided that the following conditions are met:
-	 * * Redistributions of source code must retain the above copyright
-	 *   notice, this list of conditions and the following disclaimer.
-	 * * Redistributions in binary form must reproduce the above copyright
-	 *   notice, this list of conditions and the following disclaimer in the
-	 *   documentation and/or other materials provided with the distribution.
-	 * * Neither the name of this software nor the names of its contributors may be
-	 *   used to endorse or promote products derived from this software without
-	 *   specific prior written permission.
-	 *
-	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-	 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-	 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-	 * DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-	 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-	 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-	 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-	 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-	 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-	 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-	 *
-	 */
-
-	/* globals window, exports, define */
-
-	(function(window) {
-	    'use strict'
-
-	    var re = {
-	        not_string: /[^s]/,
-	        not_bool: /[^t]/,
-	        not_type: /[^T]/,
-	        not_primitive: /[^v]/,
-	        number: /[diefg]/,
-	        numeric_arg: /bcdiefguxX/,
-	        json: /[j]/,
-	        not_json: /[^j]/,
-	        text: /^[^\x25]+/,
-	        modulo: /^\x25{2}/,
-	        placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosStTuvxX])/,
-	        key: /^([a-z_][a-z_\d]*)/i,
-	        key_access: /^\.([a-z_][a-z_\d]*)/i,
-	        index_access: /^\[(\d+)\]/,
-	        sign: /^[\+\-]/
-	    }
-
-	    function sprintf() {
-	        var key = arguments[0], cache = sprintf.cache
-	        if (!(cache[key] && cache.hasOwnProperty(key))) {
-	            cache[key] = sprintf.parse(key)
-	        }
-	        return sprintf.format.call(null, cache[key], arguments)
-	    }
-
-	    sprintf.format = function(parse_tree, argv) {
-	        var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = ''
-	        for (i = 0; i < tree_length; i++) {
-	            node_type = get_type(parse_tree[i])
-	            if (node_type === 'string') {
-	                output[output.length] = parse_tree[i]
-	            }
-	            else if (node_type === 'array') {
-	                match = parse_tree[i] // convenience purposes only
-	                if (match[2]) { // keyword argument
-	                    arg = argv[cursor]
-	                    for (k = 0; k < match[2].length; k++) {
-	                        if (!arg.hasOwnProperty(match[2][k])) {
-	                            throw new Error(sprintf('[sprintf] property "%s" does not exist', match[2][k]))
-	                        }
-	                        arg = arg[match[2][k]]
-	                    }
-	                }
-	                else if (match[1]) { // positional argument (explicit)
-	                    arg = argv[match[1]]
-	                }
-	                else { // positional argument (implicit)
-	                    arg = argv[cursor++]
-	                }
-
-	                if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') {
-	                    arg = arg()
-	                }
-
-	                if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) {
-	                    throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg)))
-	                }
-
-	                if (re.number.test(match[8])) {
-	                    is_positive = arg >= 0
-	                }
-
-	                switch (match[8]) {
-	                    case 'b':
-	                        arg = parseInt(arg, 10).toString(2)
-	                    break
-	                    case 'c':
-	                        arg = String.fromCharCode(parseInt(arg, 10))
-	                    break
-	                    case 'd':
-	                    case 'i':
-	                        arg = parseInt(arg, 10)
-	                    break
-	                    case 'j':
-	                        arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0)
-	                    break
-	                    case 'e':
-	                        arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential()
-	                    break
-	                    case 'f':
-	                        arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)
-	                    break
-	                    case 'g':
-	                        arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg)
-	                    break
-	                    case 'o':
-	                        arg = arg.toString(8)
-	                    break
-	                    case 's':
-	                    case 'S':
-	                        arg = String(arg)
-	                        arg = (match[7] ? arg.substring(0, match[7]) : arg)
-	                    break
-	                    case 't':
-	                        arg = String(!!arg)
-	                        arg = (match[7] ? arg.substring(0, match[7]) : arg)
-	                    break
-	                    case 'T':
-	                        arg = get_type(arg)
-	                        arg = (match[7] ? arg.substring(0, match[7]) : arg)
-	                    break
-	                    case 'u':
-	                        arg = parseInt(arg, 10) >>> 0
-	                    break
-	                    case 'v':
-	                        arg = arg.valueOf()
-	                        arg = (match[7] ? arg.substring(0, match[7]) : arg)
-	                    break
-	                    case 'x':
-	                        arg = parseInt(arg, 10).toString(16)
-	                    break
-	                    case 'X':
-	                        arg = parseInt(arg, 10).toString(16).toUpperCase()
-	                    break
-	                }
-	                if (re.json.test(match[8])) {
-	                    output[output.length] = arg
-	                }
-	                else {
-	                    if (re.number.test(match[8]) && (!is_positive || match[3])) {
-	                        sign = is_positive ? '+' : '-'
-	                        arg = arg.toString().replace(re.sign, '')
-	                    }
-	                    else {
-	                        sign = ''
-	                    }
-	                    pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' '
-	                    pad_length = match[6] - (sign + arg).length
-	                    pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : ''
-	                    output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)
-	                }
-	            }
-	        }
-	        return output.join('')
-	    }
-
-	    sprintf.cache = {}
-
-	    sprintf.parse = function(fmt) {
-	        var _fmt = fmt, match = [], parse_tree = [], arg_names = 0
-	        while (_fmt) {
-	            if ((match = re.text.exec(_fmt)) !== null) {
-	                parse_tree[parse_tree.length] = match[0]
-	            }
-	            else if ((match = re.modulo.exec(_fmt)) !== null) {
-	                parse_tree[parse_tree.length] = '%'
-	            }
-	            else if ((match = re.placeholder.exec(_fmt)) !== null) {
-	                if (match[2]) {
-	                    arg_names |= 1
-	                    var field_list = [], replacement_field = match[2], field_match = []
-	                    if ((field_match = re.key.exec(replacement_field)) !== null) {
-	                        field_list[field_list.length] = field_match[1]
-	                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
-	                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {
-	                                field_list[field_list.length] = field_match[1]
-	                            }
-	                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
-	                                field_list[field_list.length] = field_match[1]
-	                            }
-	                            else {
-	                                throw new SyntaxError("[sprintf] failed to parse named argument key")
-	                            }
-	                        }
-	                    }
-	                    else {
-	                        throw new SyntaxError("[sprintf] failed to parse named argument key")
-	                    }
-	                    match[2] = field_list
-	                }
-	                else {
-	                    arg_names |= 2
-	                }
-	                if (arg_names === 3) {
-	                    throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported")
-	                }
-	                parse_tree[parse_tree.length] = match
-	            }
-	            else {
-	                throw new SyntaxError("[sprintf] unexpected placeholder")
-	            }
-	            _fmt = _fmt.substring(match[0].length)
-	        }
-	        return parse_tree
-	    }
-
-	    var vsprintf = function(fmt, argv, _argv) {
-	        _argv = (argv || []).slice(0)
-	        _argv.splice(0, 0, fmt)
-	        return sprintf.apply(null, _argv)
-	    }
-
-	    /**
-	     * helpers
-	     */
-	    function get_type(variable) {
-	        if (typeof variable === 'number') {
-	            return 'number'
-	        }
-	        else if (typeof variable === 'string') {
-	            return 'string'
-	        }
-	        else {
-	            return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()
-	        }
-	    }
-
-	    var preformattedPadding = {
-	        '0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'],
-	        ' ': ['', ' ', '  ', '   ', '    ', '     ', '      ', '       '],
-	        '_': ['', '_', '__', '___', '____', '_____', '______', '_______'],
-	    }
-	    function str_repeat(input, multiplier) {
-	        if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) {
-	            return preformattedPadding[input][multiplier]
-	        }
-	        return Array(multiplier + 1).join(input)
-	    }
-
-	    /**
-	     * export to either browser or node.js
-	     */
-	    if (true) {
-	        exports.sprintf = sprintf
-	        exports.vsprintf = vsprintf
-	    }
-	    else {
-	        window.sprintf = sprintf
-	        window.vsprintf = vsprintf
-
-	        if (typeof define === 'function' && define.amd) {
-	            define(function() {
-	                return {
-	                    sprintf: sprintf,
-	                    vsprintf: vsprintf
-	                }
-	            })
-	        }
-	    }
-	})(typeof window === 'undefined' ? this : window);
-
-
-/***/ },
-/* 70 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/* This Source Code Form is subject to the terms of the Mozilla Public
-	 * License, v. 2.0. If a copy of the MPL was not distributed with this
-	 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-	/**
-	 * EventEmitter.
-	 */
-
-	var EventEmitter = function EventEmitter() {};
-	module.exports = EventEmitter;
-
-	const { Cu } = __webpack_require__(71);
-	const promise = __webpack_require__(76);
-
-	/**
-	 * Decorate an object with event emitter functionality.
-	 *
-	 * @param Object aObjectToDecorate
-	 *        Bind all public methods of EventEmitter to
-	 *        the aObjectToDecorate object.
-	 */
-	EventEmitter.decorate = function EventEmitter_decorate (aObjectToDecorate) {
-	  let emitter = new EventEmitter();
-	  aObjectToDecorate.on = emitter.on.bind(emitter);
-	  aObjectToDecorate.off = emitter.off.bind(emitter);
-	  aObjectToDecorate.once = emitter.once.bind(emitter);
-	  aObjectToDecorate.emit = emitter.emit.bind(emitter);
-	};
-
-	EventEmitter.prototype = {
-	  /**
-	   * Connect a listener.
-	   *
-	   * @param string aEvent
-	   *        The event name to which we're connecting.
-	   * @param function aListener
-	   *        Called when the event is fired.
-	   */
-	  on: function EventEmitter_on(aEvent, aListener) {
-	    if (!this._eventEmitterListeners)
-	      this._eventEmitterListeners = new Map();
-	    if (!this._eventEmitterListeners.has(aEvent)) {
-	      this._eventEmitterListeners.set(aEvent, []);
-	    }
-	    this._eventEmitterListeners.get(aEvent).push(aListener);
-	  },
-
-	  /**
-	   * Listen for the next time an event is fired.
-	   *
-	   * @param string aEvent
-	   *        The event name to which we're connecting.
-	   * @param function aListener
-	   *        (Optional) Called when the event is fired. Will be called at most
-	   *        one time.
-	   * @return promise
-	   *        A promise which is resolved when the event next happens. The
-	   *        resolution value of the promise is the first event argument. If
-	   *        you need access to second or subsequent event arguments (it's rare
-	   *        that this is needed) then use aListener
-	   */
-	  once: function EventEmitter_once(aEvent, aListener) {
-	    let deferred = promise.defer();
-
-	    let handler = (aEvent, aFirstArg, ...aRest) => {
-	      this.off(aEvent, handler);
-	      if (aListener) {
-	        aListener.apply(null, [aEvent, aFirstArg, ...aRest]);
-	      }
-	      deferred.resolve(aFirstArg);
-	    };
-
-	    handler._originalListener = aListener;
-	    this.on(aEvent, handler);
-
-	    return deferred.promise;
-	  },
-
-	  /**
-	   * Remove a previously-registered event listener.  Works for events
-	   * registered with either on or once.
-	   *
-	   * @param string aEvent
-	   *        The event name whose listener we're disconnecting.
-	   * @param function aListener
-	   *        The listener to remove.
-	   */
-	  off: function EventEmitter_off(aEvent, aListener) {
-	    if (!this._eventEmitterListeners)
-	      return;
-	    let listeners = this._eventEmitterListeners.get(aEvent);
-	    if (listeners) {
-	      this._eventEmitterListeners.set(aEvent, listeners.filter(l => {
-	        return l !== aListener && l._originalListener !== aListener;
-	      }));
-	    }
-	  },
-
-	  /**
-	   * Emit an event.  All arguments to this method will
-	   * be sent to listener functions.
-	   */
-	  emit: function EventEmitter_emit(aEvent) {
-	    if (!this._eventEmitterListeners || !this._eventEmitterListeners.has(aEvent)) {
-	      return;
-	    }
-
-	    let originalListeners = this._eventEmitterListeners.get(aEvent);
-	    for (let listener of this._eventEmitterListeners.get(aEvent)) {
-	      // If the object was destroyed during event emission, stop
-	      // emitting.
-	      if (!this._eventEmitterListeners) {
-	        break;
-	      }
-
-	      // If listeners were removed during emission, make sure the
-	      // event handler we're going to fire wasn't removed.
-	      if (originalListeners === this._eventEmitterListeners.get(aEvent) ||
-	          this._eventEmitterListeners.get(aEvent).some(l => l === listener)) {
-	        try {
-	          listener.apply(null, arguments);
-	        }
-	        catch (ex) {
-	          // Prevent a bad listener from interfering with the others.
-	          let msg = ex + ": " + ex.stack;
-	          //console.error(msg);
-	          console.log(msg);
-	        }
-	      }
-	    }
-	  },
-	};
-
-
-/***/ },
-/* 71 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/*
-	 * A sham for https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/chrome
-	 */
-
-	var { inDOMUtils } = __webpack_require__(72);
-
-	var ourServices = {
-	  inIDOMUtils: inDOMUtils,
-	  nsIClipboardHelper: {
-	    copyString: () => {}
-	  },
-	  nsIXULChromeRegistry: {
-	    isLocaleRTL: () => {return false;}
-	  },
-	  nsIDOMParser: {
-
-	  },
-	};
-
-	module.exports = {
-	  Cc: name => {
-	    if(typeof console !== "undefined") {
-	      console.log('Cc sham for', name);
-	    }
-	    return {
-	      getService: (name) => ourServices[name],
-	      createInstance: (iface) => ourServices[iface],
-	    };
-	  },
-	  CC: (name, iface, method) => {
-	    if(typeof console !== "undefined") {
-	      console.log('CC sham for', name, iface, method);
-	    }
-	    return {
-	    };
-	  },
-	  Ci: {
-	    nsIThread: {
-	      "DISPATCH_NORMAL":0,
-	      "DISPATCH_SYNC":1
-	    },
-	    nsIDOMNode: typeof HTMLElement !== "undefined" ? HTMLElement : null,
-	    nsIFocusManager: {
-	      MOVEFOCUS_BACKWARD: 2,
-	      MOVEFOCUS_FORWARD: 1,
-	    },
-	    nsIDOMKeyEvent: {
-
-	    },
-	    nsIDOMCSSRule: {"UNKNOWN_RULE":0,"STYLE_RULE":1,"CHARSET_RULE":2,"IMPORT_RULE":3,"MEDIA_RULE":4,"FONT_FACE_RULE":5,"PAGE_RULE":6,"KEYFRAMES_RULE":7,"KEYFRAME_RULE":8,"MOZ_KEYFRAMES_RULE":7,"MOZ_KEYFRAME_RULE":8,"NAMESPACE_RULE":10,"COUNTER_STYLE_RULE":11,"SUPPORTS_RULE":12,"FONT_FEATURE_VALUES_RULE":14},
-	    inIDOMUtils: "inIDOMUtils",
-	    nsIClipboardHelper: "nsIClipboardHelper",
-	    nsIXULChromeRegistry: "nsIXULChromeRegistry",
-	  },
-	  Cu: {
-	    reportError: msg => { (typeof console !== "undefined") ? console.error(msg) : dump(msg) },
-	    callFunctionWithAsyncStack: fn => fn(),
-	  },
-	  Cr: {},
-	  components: {
-	    isSuccessCode: () => (returnCode & 0x80000000) === 0,
-	  }
-	};
-
-
-/***/ },
-/* 72 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// A sham for inDOMUtils.
-
-	"use strict";
-
-	var { CSSLexer } = __webpack_require__(73);
-	var { cssColors } = __webpack_require__(74);
-	var { cssProperties } = __webpack_require__(75);
-
-	var cssRGBMap;
-
-	// From inIDOMUtils.idl.
-	var EXCLUDE_SHORTHANDS = (1 << 0);
-	var INCLUDE_ALIASES = (1 << 1);
-	var TYPE_LENGTH = 0;
-	var TYPE_PERCENTAGE = 1;
-	var TYPE_COLOR = 2;
-	var TYPE_URL = 3;
-	var TYPE_ANGLE = 4;
-	var TYPE_FREQUENCY = 5;
-	var TYPE_TIME = 6;
-	var TYPE_GRADIENT = 7;
-	var TYPE_TIMING_FUNCTION = 8;
-	var TYPE_IMAGE_RECT = 9;
-	var TYPE_NUMBER = 10;
-
-	function getCSSLexer(text) {
-	  return new CSSLexer(text);
-	}
-
-	function rgbToColorName(r, g, b) {
-	  if (!cssRGBMap) {
-	    cssRGBMap = new Map();
-	    for (let name in cssColors) {
-	      cssRGBMap.set(JSON.stringify(cssColors[name]), name);
-	    }
-	  }
-	  let value = cssRGBMap.get(JSON.stringify([r, g, b]));
-	  if (!value) {
-	    throw new Error("no such color");
-	  }
-	  return value;
-	}
-
-	// Taken from dom/tests/mochitest/ajax/mochikit/MochiKit/Color.js
-	function _hslValue(n1, n2, hue) {
-	  if (hue > 6.0) {
-	    hue -= 6.0;
-	  } else if (hue < 0.0) {
-	    hue += 6.0;
-	  }
-	  var val;
-	  if (hue < 1.0) {
-	    val = n1 + (n2 - n1) * hue;
-	  } else if (hue < 3.0) {
-	    val = n2;
-	  } else if (hue < 4.0) {
-	    val = n1 + (n2 - n1) * (4.0 - hue);
-	  } else {
-	    val = n1;
-	  }
-	  return val;
-	}
-
-	// Taken from dom/tests/mochitest/ajax/mochikit/MochiKit/Color.js
-	// and then modified.
-	function hslToRGB([hue, saturation, lightness]) {
-	  var red;
-	  var green;
-	  var blue;
-	  if (saturation === 0) {
-	    red = lightness;
-	    green = lightness;
-	    blue = lightness;
-	  } else {
-	    var m2;
-	    if (lightness <= 0.5) {
-	      m2 = lightness * (1.0 + saturation);
-	    } else {
-	      m2 = lightness + saturation - (lightness * saturation);
-	    }
-	    var m1 = (2.0 * lightness) - m2;
-	    var f = _hslValue;
-	    var h6 = hue * 6.0;
-	    red = f(m1, m2, h6 + 2);
-	    green = f(m1, m2, h6);
-	    blue = f(m1, m2, h6 - 2);
-	  }
-	  return [red, green, blue];
-	}
-
-	function colorToRGBA(name) {
-	  name = name.trim().toLowerCase();
-	  if (name in cssColors) {
-	    return cssColors[name];
-	  }
-
-	  if (name === "transparent") {
-	    return [0, 0, 0, 0];
-	  }
-
-	  let lexer = getCSSLexer(name);
-
-	  let getToken = function() {
-	    while (true) {
-	      let token = lexer.nextToken();
-	      if (!token || token.tokenType !== "comment" ||
-	          token.tokenType !== "whitespace") {
-	        return token;
-	      }
-	    }
-	  };
-
-	  let requireComma = function(token) {
-	    if (token.tokenType !== "symbol" || token.text !== ",") {
-	      return null;
-	    }
-	    return getToken();
-	  };
-
-	  let func = getToken();
-	  if (!func || func.tokenType !== "function") {
-	    return null;
-	  }
-	  let alpha = false;
-	  if (func.text === "rgb" || func.text === "hsl") {
-	    // Nothing.
-	  } else if (func.text === "rgba" || func.text === "hsla") {
-	    alpha = true;
-	  } else {
-	    return null;
-	  }
-
-	  let vals = [];
-	  for (let i = 0; i < 3; ++i) {
-	    let token = getToken();
-	    if (i > 0) {
-	      token = requireComma(token);
-	    }
-	    if (token.tokenType !== "number" || !token.isInteger) {
-	      return null;
-	    }
-	    let num = token.number;
-	    if (num < 0) {
-	      num = 0;
-	    } else if (num > 255) {
-	      num = 255;
-	    }
-	    vals.push(num);
-	  }
-
-	  if (func.text === "hsl" || func.text === "hsla") {
-	    vals = hslToRGB(vals);
-	  }
-
-	  if (alpha) {
-	    let token = requireComma(getToken());
-	    if (token.tokenType !== "number") {
-	      return null;
-	    }
-	    let num = token.number;
-	    if (num < 0) {
-	      num = 0;
-	    } else if (num > 1) {
-	      num = 1;
-	    }
-	    vals.push(num);
-	  } else {
-	    vals.push(1);
-	  }
-
-	  let parenToken = getToken();
-	  if (!parenToken || parenToken.tokenType !== "symbol" ||
-	      parenToken.text !== ")") {
-	    return null;
-	  }
-	  if (getToken() !== null) {
-	    return null;
-	  }
-
-	  return vals;
-	}
-
-	function isValidCSSColor(name) {
-	  return colorToRGBA(name) !== null;
-	}
-
-	function isVariable(name) {
-	  return name.startsWith("--");
-	}
-
-	function cssPropertyIsShorthand(name) {
-	  if (isVariable(name)) {
-	    return false;
-	  }
-	  if (!(name in cssProperties)) {
-	    throw Error("unknown property " + name);
-	  }
-	  return !!cssProperties[name].subproperties;
-	}
-
-	function getSubpropertiesForCSSProperty(name) {
-	  if (isVariable(name)) {
-	    return [name];
-	  }
-	  if (!(name in cssProperties)) {
-	    throw Error("unknown property " + name);
-	  }
-	  if ("subproperties" in cssProperties[name]) {
-	    return cssProperties[name].subproperties.slice();
-	  }
-	  return [name];
-	}
-
-	function getCSSValuesForProperty(name) {
-	  if (isVariable(name)) {
-	    return ["initial", "inherit", "unset"];
-	  }
-	  if (!(name in cssProperties)) {
-	    throw Error("unknown property " + name);
-	  }
-	  return cssProperties[name].values.slice();
-	}
-
-	function getCSSPropertyNames(flags) {
-	  let names = Object.keys(cssProperties);
-	  if ((flags & EXCLUDE_SHORTHANDS) !== 0) {
-	    names = names.filter((name) => cssProperties[name].subproperties);
-	  }
-	  if ((flags & INCLUDE_ALIASES) === 0) {
-	    names = names.filter((name) => !cssProperties[name].alias);
-	  }
-	  return names;
-	}
-
-	function cssPropertySupportsType(name, type) {
-	  if (isVariable(name)) {
-	    return false;
-	  }
-	  if (!(name in cssProperties)) {
-	    throw Error("unknown property " + name);
-	  }
-	  return (cssProperties[name].supports & (1 << type)) !== 0;
-	}
-
-	function isInheritedProperty(name) {
-	  if (isVariable(name)) {
-	    return true;
-	  }
-	  if (!(name in cssProperties)) {
-	    return false;
-	  }
-	  return cssProperties[name].inherited;
-	}
-
-	function cssPropertyIsValid(name, value) {
-	  if (isVariable(name)) {
-	    return true;
-	  }
-	  if (!(name in cssProperties)) {
-	    return false;
-	  }
-	  let elt = document.createElement("div");
-	  elt.style = name + ":" + value;
-	  return elt.style.length > 0;
-	}
-
-	exports.inDOMUtils = {
-	  getCSSLexer,
-	  rgbToColorName,
-	  colorToRGBA,
-	  isValidCSSColor,
-	  cssPropertyIsShorthand,
-	  getSubpropertiesForCSSProperty,
-	  getCSSValuesForProperty,
-	  getCSSPropertyNames,
-	  cssPropertySupportsType,
-	  isInheritedProperty,
-	  cssPropertyIsValid,
-
-	  // Constants.
-	  EXCLUDE_SHORTHANDS,
-	  INCLUDE_ALIASES,
-	  TYPE_LENGTH,
-	  TYPE_PERCENTAGE,
-	  TYPE_COLOR,
-	  TYPE_URL,
-	  TYPE_ANGLE,
-	  TYPE_FREQUENCY,
-	  TYPE_TIME,
-	  TYPE_GRADIENT,
-	  TYPE_TIMING_FUNCTION,
-	  TYPE_IMAGE_RECT,
-	  TYPE_NUMBER,
-	};
-
-
-/***/ },
-/* 73 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
-
-	(function (root, factory) {
-	    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
-	    // Rhino, and plain browser loading.
-	    if (true) {
-	        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-	    } else if (typeof exports !== 'undefined') {
-	        factory(exports);
-	    } else {
-	        factory(root);
-	    }
-	}(this, function (exports) {
-
-	function between(num, first, last) { return num >= first && num <= last; }
-	function digit(code) { return between(code, 0x30,0x39); }
-	function hexdigit(code) { return digit(code) || between(code, 0x41,0x46) || between(code, 0x61,0x66); }
-	function uppercaseletter(code) { return between(code, 0x41,0x5a); }
-	function lowercaseletter(code) { return between(code, 0x61,0x7a); }
-	function letter(code) { return uppercaseletter(code) || lowercaseletter(code); }
-	function nonascii(code) { return code >= 0x80; }
-	function namestartchar(code) { return letter(code) || nonascii(code) || code == 0x5f; }
-	function namechar(code) { return namestartchar(code) || digit(code) || code == 0x2d; }
-	function nonprintable(code) { return between(code, 0,8) || code == 0xb || between(code, 0xe,0x1f) || code == 0x7f; }
-	function newline(code) { return code == 0xa; }
-	function whitespace(code) { return newline(code) || code == 9 || code == 0x20; }
-
-	var maximumallowedcodepoint = 0x10ffff;
-
-	var InvalidCharacterError = function(message) {
-		this.message = message;
-	};
-	InvalidCharacterError.prototype = new Error;
-	InvalidCharacterError.prototype.name = 'InvalidCharacterError';
-
-	function stringFromCode(code) {
-		if(code <= 0xffff) return String.fromCharCode(code);
-		// Otherwise, encode astral char as surrogate pair.
-		code -= Math.pow(2, 20);
-		var lead = Math.floor(code/Math.pow(2, 10)) + 0xd800;
-		var trail = code % Math.pow(2, 10) + 0xdc00;
-		return String.fromCharCode(lead) + String.fromCharCode(trail);
-	}
-
-	function* tokenize(str, options) {
-		if (options === undefined) {
-			options = {};
-		}
-		if (options.loc === undefined) {
-			options.loc = false;
-		}
-		if (options.offsets === undefined) {
-			options.offsets = false;
-		}
-		if (options.keepComments === undefined) {
-			options.keepComments = false;
-		}
-		if (options.startOffset === undefined) {
-			options.startOffset = 0;
-		}
-
-		var i = options.startOffset - 1;
-		var code;
-
-		// Line number information.
-		var line = 0;
-		var column = 0;
-		// The only use of lastLineLength is in reconsume().
-		var lastLineLength = 0;
-		var incrLineno = function() {
-			line += 1;
-			lastLineLength = column;
-			column = 0;
-		};
-		var locStart = {line:line, column:column};
-		var offsetStart = i;
-
-		var codepoint = function(i) {
-			if(i >= str.length) {
-				return -1;
-			}
-			return str.charCodeAt(i);
-		};
-		var next = function(num) {
-			if(num === undefined)
-				num = 1;
-			if(num > 3)
-				throw "Spec Error: no more than three codepoints of lookahead.";
-
-			var rcode;
-			for (var offset = i + 1; num-- > 0; ++offset) {
-				rcode = codepoint(offset);
-				if (rcode === 0xd && codepoint(offset+1) === 0xa) {
-					++offset;
-					rcode = 0xa;
-				} else if (rcode === 0xd || rcode === 0xc) {
-					rcode = 0xa;
-				} else if (rcode === 0x0) {
-					rcode = 0xfffd;
-				}
-			}
-
-			return rcode;
-		};
-		var consume = function(num) {
-			if(num === undefined)
-				num = 1;
-			while(num-- > 0) {
-				++i;
-				code = codepoint(i);
-				if (code === 0xd && codepoint(i+1) === 0xa) {
-					++i;
-					code = 0xa;
-				} else if (code === 0xd || code === 0xc) {
-					code = 0xa;
-				} else if (code === 0x0) {
-					code = 0xfffd;
-				}
-				if(newline(code)) incrLineno();
-				else column++;
-			}
-			return true;
-		};
-		var reconsume = function() {
-			i -= 1;		// This is ok even in the \r\n case.
-			if (newline(code)) {
-				line -= 1;
-				column = lastLineLength;
-			} else {
-				column -= 1;
-			}
-			return true;
-		};
-		var eof = function(codepoint) {
-			if(codepoint === undefined) codepoint = code;
-			return codepoint == -1;
-		};
-		var donothing = function() {};
-		var parseerror = function() { console.log("Parse error at index " + i + ", processing codepoint 0x" + code.toString(16) + ".");return true; };
-
-		var consumeAToken = function() {
-			consume();
-			if (!options.keepComments) {
-				while(code == 0x2f && next() == 0x2a) {
-					consumeAComment();
-					consume();
-				}
-			}
-			locStart.line = line;
-			locStart.column = column;
-			offsetStart = i;
-			if(whitespace(code)) {
-				while(whitespace(next())) consume();
-				return new WhitespaceToken;
-			}
-			else if(code == 0x2f && next() == 0x2a) return consumeAComment();
-			else if(code == 0x22) return consumeAStringToken();
-			else if(code == 0x23) {
-				if(namechar(next()) || areAValidEscape(next(1), next(2))) {
-					var token = new HashToken();
-					if(wouldStartAnIdentifier(next(1), next(2), next(3))) {
-						token.type = "id";
-						token.tokenType = "id";
-					}
-					token.value = consumeAName();
-					token.text = token.value;
-					return token;
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x24) {
-				if(next() == 0x3d) {
-					consume();
-					return new SuffixMatchToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x27) return consumeAStringToken();
-			else if(code == 0x28) return new OpenParenToken();
-			else if(code == 0x29) return new CloseParenToken();
-			else if(code == 0x2a) {
-				if(next() == 0x3d) {
-					consume();
-					return new SubstringMatchToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x2b) {
-				if(startsWithANumber()) {
-					reconsume();
-					return consumeANumericToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x2c) return new CommaToken();
-			else if(code == 0x2d) {
-				if(startsWithANumber()) {
-					reconsume();
-					return consumeANumericToken();
-				} else if(next(1) == 0x2d && next(2) == 0x3e) {
-					consume(2);
-					return new CDCToken();
-				} else if(startsWithAnIdentifier()) {
-					reconsume();
-					return consumeAnIdentlikeToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x2e) {
-				if(startsWithANumber()) {
-					reconsume();
-					return consumeANumericToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x3a) return new ColonToken;
-			else if(code == 0x3b) return new SemicolonToken;
-			else if(code == 0x3c) {
-				if(next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) {
-					consume(3);
-					return new CDOToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x40) {
-				if(wouldStartAnIdentifier(next(1), next(2), next(3))) {
-					return new AtKeywordToken(consumeAName());
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x5b) return new OpenSquareToken();
-			else if(code == 0x5c) {
-				if(startsWithAValidEscape()) {
-					reconsume();
-					return consumeAnIdentlikeToken();
-				} else {
-					parseerror();
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x5d) return new CloseSquareToken();
-			else if(code == 0x5e) {
-				if(next() == 0x3d) {
-					consume();
-					return new PrefixMatchToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x7b) return new OpenCurlyToken();
-			else if(code == 0x7c) {
-				if(next() == 0x3d) {
-					consume();
-					return new DashMatchToken();
-				// } else if(next() == 0x7c) {
-				// 	consume();
-				// 	return new ColumnToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(code == 0x7d) return new CloseCurlyToken();
-			else if(code == 0x7e) {
-				if(next() == 0x3d) {
-					consume();
-					return new IncludeMatchToken();
-				} else {
-					return new DelimToken(code);
-				}
-			}
-			else if(digit(code)) {
-				reconsume();
-				return consumeANumericToken();
-			}
-			else if(namestartchar(code)) {
-				reconsume();
-				return consumeAnIdentlikeToken();
-			}
-			else if(eof()) return new EOFToken();
-			else return new DelimToken(code);
-		};
-
-		var consumeAComment = function() {
-			consume();
-			var comment = "";
-			while(true) {
-				consume();
-				if(code == 0x2a && next() == 0x2f) {
-					consume();
-					break;
-				} else if(eof()) {
-					break;
-				}
-				comment += stringFromCode(code);
-			}
-			return new CommentToken(comment);
-		};
-
-		var consumeANumericToken = function() {
-			var num = consumeANumber();
-			var token;
-			if(wouldStartAnIdentifier(next(1), next(2), next(3))) {
-				token = new DimensionToken();
-				token.value = num.value;
-				token.repr = num.repr;
-				token.type = num.type;
-				token.unit = consumeAName();
-				token.text = token.unit;
-			} else if(next() == 0x25) {
-				consume();
-				token = new PercentageToken();
-				token.value = num.value;
-				token.repr = num.repr;
-			} else {
-				var token = new NumberToken();
-				token.value = num.value;
-				token.repr = num.repr;
-				token.type = num.type;
-			}
-			token.number = token.value;
-			token.isInteger = token.type === "integer";
-			// FIXME hasSign
-			return token;
-		};
-
-		var consumeAnIdentlikeToken = function() {
-			var str = consumeAName();
-			if(str.toLowerCase() == "url" && next() == 0x28) {
-				consume();
-				while(whitespace(next(1)) && whitespace(next(2)))
-					consume();
-				if((next() == 0x22 || next() == 0x27) ||
-				   (whitespace(next()) && (next(2) == 0x22 || next(2) == 0x27))) {
-					while(whitespace(next()))
-						consume();
-					consume();
-					let str = consumeAStringToken();
-					while(whitespace(next()))
-						consume();
-					// The closing paren.
-					consume();
-					return new URLToken(str.text);
-				} else {
-					return consumeAURLToken();
-				}
-			} else if(next() == 0x28) {
-				consume();
-				return new FunctionToken(str);
-			} else {
-				return new IdentToken(str);
-			}
-		};
-
-		var consumeAStringToken = function(endingCodePoint) {
-			if(endingCodePoint === undefined) endingCodePoint = code;
-			var string = "";
-			while(consume()) {
-				if(code == endingCodePoint || eof()) {
-					return new StringToken(string);
-				} else if(newline(code)) {
-					reconsume();
-					return new BadStringToken(string);
-				} else if(code == 0x5c) {
-					if(eof(next())) {
-						donothing();
-					} else if(newline(next())) {
-						consume();
-					} else {
-						string += stringFromCode(consumeEscape());
-					}
-				} else {
-					string += stringFromCode(code);
-				}
-			}
-		};
-
-		var consumeAURLToken = function() {
-			var token = new URLToken("");
-			while(whitespace(next())) consume();
-			if(eof(next())) return token;
-			while(consume()) {
-				if(code == 0x29 || eof()) {
-					break;
-				} else if(whitespace(code)) {
-					while(whitespace(next()))
-						consume();
-					if(next() == 0x29 || eof(next())) {
-						consume();
-						break;
-					} else {
-						consumeTheRemnantsOfABadURL();
-						return new BadURLToken();
-					}
-				} else if(code == 0x22 || code == 0x27 || code == 0x28 || nonprintable(code)) {
-					parseerror();
-					consumeTheRemnantsOfABadURL();
-					return new BadURLToken();
-				} else if(code == 0x5c) {
-					if(startsWithAValidEscape()) {
-						token.value += stringFromCode(consumeEscape());
-					} else {
-						parseerror();
-						consumeTheRemnantsOfABadURL();
-						return new BadURLToken();
-					}
-				} else {
-					token.value += stringFromCode(code);
-				}
-			}
-			token.text = token.value;
-			return token;
-		};
-
-		var consumeEscape = function() {
-			// Assume the the current character is the \
-			// and the next code point is not a newline.
-			consume();
-			if(hexdigit(code)) {
-				// Consume 1-6 hex digits
-				var digits = [code];
-				for(var total = 0; total < 5; total++) {
-					if(hexdigit(next())) {
-						consume();
-						digits.push(code);
-					} else {
-						break;
-					}
-				}
-				if(whitespace(next())) consume();
-				var value = parseInt(digits.map(function(x){return String.fromCharCode(x);}).join(''), 16);
-				if( value > maximumallowedcodepoint ) value = 0xfffd;
-				return value;
-			} else if(eof()) {
-				return 0xfffd;
-			} else {
-				return code;
-			}
-		};
-
-		var areAValidEscape = function(c1, c2) {
-			if(c1 != 0x5c) return false;
-			if(newline(c2)) return false;
-			return true;
-		};
-		var startsWithAValidEscape = function() {
-			return areAValidEscape(code, next());
-		};
-
-		var wouldStartAnIdentifier = function(c1, c2, c3) {
-			if(c1 == 0x2d) {
-				return namestartchar(c2) || c2 == 0x2d || areAValidEscape(c2, c3);
-			} else if(namestartchar(c1)) {
-				return true;
-			} else if(c1 == 0x5c) {
-				return areAValidEscape(c1, c2);
-			} else {
-				return false;
-			}
-		};
-		var startsWithAnIdentifier = function() {
-			return wouldStartAnIdentifier(code, next(1), next(2));
-		};
-
-		var wouldStartANumber = function(c1, c2, c3) {
-			if(c1 == 0x2b || c1 == 0x2d) {
-				if(digit(c2)) return true;
-				if(c2 == 0x2e && digit(c3)) return true;
-				return false;
-			} else if(c1 == 0x2e) {
-				if(digit(c2)) return true;
-				return false;
-			} else if(digit(c1)) {
-				return true;
-			} else {
-				return false;
-			}
-		};
-		var startsWithANumber = function() {
-			return wouldStartANumber(code, next(1), next(2));
-		};
-
-		var consumeAName = function() {
-			var result = "";
-			while(consume()) {
-				if(namechar(code)) {
-					result += stringFromCode(code);
-				} else if(startsWithAValidEscape()) {
-					result += stringFromCode(consumeEscape());
-				} else {
-					reconsume();
-					return result;
-				}
-			}
-		};
-
-		var consumeANumber = function() {
-			var repr = [];
-			var type = "integer";
-			if(next() == 0x2b || next() == 0x2d) {
-				consume();
-				repr += stringFromCode(code);
-			}
-			while(digit(next())) {
-				consume();
-				repr += stringFromCode(code);
-			}
-			if(next(1) == 0x2e && digit(next(2))) {
-				consume();
-				repr += stringFromCode(code);
-				consume();
-				repr += stringFromCode(code);
-				type = "number";
-				while(digit(next())) {
-					consume();
-					repr += stringFromCode(code);
-				}
-			}
-			var c1 = next(1), c2 = next(2), c3 = next(3);
-			if((c1 == 0x45 || c1 == 0x65) && digit(c2)) {
-				consume();
-				repr += stringFromCode(code);
-				consume();
-				repr += stringFromCode(code);
-				type = "number";
-				while(digit(next())) {
-					consume();
-					repr += stringFromCode(code);
-				}
-			} else if((c1 == 0x45 || c1 == 0x65) && (c2 == 0x2b || c2 == 0x2d) && digit(c3)) {
-				consume();
-				repr += stringFromCode(code);
-				consume();
-				repr += stringFromCode(code);
-				consume();
-				repr += stringFromCode(code);
-				type = "number";
-				while(digit(next())) {
-					consume();
-					repr += stringFromCode(code);
-				}
-			}
-			var value = convertAStringToANumber(repr);
-			return {type:type, value:value, repr:repr};
-		};
-
-		var convertAStringToANumber = function(string) {
-			// CSS's number rules are identical to JS, afaik.
-			return +string;
-		};
-
-		var consumeTheRemnantsOfABadURL = function() {
-			while(consume()) {
-				if(code == 0x2d || eof()) {
-					return;
-				} else if(startsWithAValidEscape()) {
-					consumeEscape();
-					donothing();
-				} else {
-					donothing();
-				}
-			}
-		};
-
-
-
-		var iterationCount = 0;
-		while(!eof(next())) {
-			var token = consumeAToken();
-			if (options.loc) {
-				token.loc = {};
-				token.loc.start = {line:locStart.line, column:locStart.column};
-				token.loc.end = {line:line, column:column};
-			}
-			if (options.offsets) {
-				token.startOffset = offsetStart;
-				token.endOffset = i + 1;
-			}
-			yield token;
-			iterationCount++;
-			if(iterationCount > str.length*2) return "I'm infinite-looping!";
-		}
-	}
-
-	function CSSParserToken() { throw "Abstract Base Class"; }
-	CSSParserToken.prototype.toJSON = function() {
-		return {token: this.tokenType};
-	};
-	CSSParserToken.prototype.toString = function() { return this.tokenType; };
-	CSSParserToken.prototype.toSource = function() { return ''+this; };
-
-	function BadStringToken(text) {
-		this.text = text;
-		return this;
-	}
-	BadStringToken.prototype = Object.create(CSSParserToken.prototype);
-	BadStringToken.prototype.tokenType = "bad_string";
-
-	function BadURLToken() { return this; }
-	BadURLToken.prototype = Object.create(CSSParserToken.prototype);
-	BadURLToken.prototype.tokenType = "bad_url";
-
-	function WhitespaceToken() { return this; }
-	WhitespaceToken.prototype = Object.create(CSSParserToken.prototype);
-	WhitespaceToken.prototype.tokenType = "whitespace";
-	WhitespaceToken.prototype.toString = function() { return "WS"; };
-	WhitespaceToken.prototype.toSource = function() { return " "; };
-
-	function CDOToken() { return this; }
-	CDOToken.prototype = Object.create(CSSParserToken.prototype);
-	CDOToken.prototype.tokenType = "htmlcomment";
-	CDOToken.prototype.toSource = function() { return "<!--"; };
-
-	function CDCToken() { return this; }
-	CDCToken.prototype = Object.create(CSSParserToken.prototype);
-	CDCToken.prototype.tokenType = "htmlcomment";
-	CDCToken.prototype.toSource = function() { return "-->"; };
-
-	function ColonToken() { return this; }
-	ColonToken.prototype = Object.create(CSSParserToken.prototype);
-	ColonToken.prototype.tokenType = "symbol";
-	ColonToken.prototype.text = ":";
-
-	function SemicolonToken() { return this; }
-	SemicolonToken.prototype = Object.create(CSSParserToken.prototype);
-	SemicolonToken.prototype.tokenType = "symbol";
-	SemicolonToken.prototype.text = ";";
-
-	function CommaToken() { return this; }
-	CommaToken.prototype = Object.create(CSSParserToken.prototype);
-	CommaToken.prototype.tokenType = "symbol";
-	CommaToken.prototype.text = ",";
-
-	function GroupingToken() { throw "Abstract Base Class"; }
-	GroupingToken.prototype = Object.create(CSSParserToken.prototype);
-
-	function OpenCurlyToken() { this.value = "{"; this.mirror = "}"; return this; }
-	OpenCurlyToken.prototype = Object.create(GroupingToken.prototype);
-	OpenCurlyToken.prototype.tokenType = "symbol";
-	OpenCurlyToken.prototype.text = "{";
-
-	function CloseCurlyToken() { this.value = "}"; this.mirror = "{"; return this; }
-	CloseCurlyToken.prototype = Object.create(GroupingToken.prototype);
-	CloseCurlyToken.prototype.tokenType = "symbol";
-	CloseCurlyToken.prototype.text = "}";
-
-	function OpenSquareToken() { this.value = "["; this.mirror = "]"; return this; }
-	OpenSquareToken.prototype = Object.create(GroupingToken.prototype);
-	OpenSquareToken.prototype.tokenType = "symbol";
-	OpenSquareToken.prototype.text = "[";
-
-	function CloseSquareToken() { this.value = "]"; this.mirror = "["; return this; }
-	CloseSquareToken.prototype = Object.create(GroupingToken.prototype);
-	CloseSquareToken.prototype.tokenType = "symbol";
-	CloseSquareToken.prototype.text = "]";
-
-	function OpenParenToken() { this.value = "("; this.mirror = ")"; return this; }
-	OpenParenToken.prototype = Object.create(GroupingToken.prototype);
-	OpenParenToken.prototype.tokenType = "symbol";
-	OpenParenToken.prototype.text = "(";
-
-	function CloseParenToken() { this.value = ")"; this.mirror = "("; return this; }
-	CloseParenToken.prototype = Object.create(GroupingToken.prototype);
-	CloseParenToken.prototype.tokenType = "symbol";
-	CloseParenToken.prototype.text = ")";
-
-	function IncludeMatchToken() { return this; }
-	IncludeMatchToken.prototype = Object.create(CSSParserToken.prototype);
-	IncludeMatchToken.prototype.tokenType = "includes";
-
-	function DashMatchToken() { return this; }
-	DashMatchToken.prototype = Object.create(CSSParserToken.prototype);
-	DashMatchToken.prototype.tokenType = "dashmatch";
-
-	function PrefixMatchToken() { return this; }
-	PrefixMatchToken.prototype = Object.create(CSSParserToken.prototype);
-	PrefixMatchToken.prototype.tokenType = "beginsmatch";
-
-	function SuffixMatchToken() { return this; }
-	SuffixMatchToken.prototype = Object.create(CSSParserToken.prototype);
-	SuffixMatchToken.prototype.tokenType = "endsmatch";
-
-	function SubstringMatchToken() { return this; }
-	SubstringMatchToken.prototype = Object.create(CSSParserToken.prototype);
-	SubstringMatchToken.prototype.tokenType = "containsmatch";
-
-	function ColumnToken() { return this; }
-	ColumnToken.prototype = Object.create(CSSParserToken.prototype);
-	ColumnToken.prototype.tokenType = "||";
-
-	function EOFToken() { return this; }
-	EOFToken.prototype = Object.create(CSSParserToken.prototype);
-	EOFToken.prototype.tokenType = "EOF";
-	EOFToken.prototype.toSource = function() { return ""; };
-
-	function DelimToken(code) {
-		this.value = stringFromCode(code);
-		this.text = this.value;
-		return this;
-	}
-	DelimToken.prototype = Object.create(CSSParserToken.prototype);
-	DelimToken.prototype.tokenType = "symbol";
-	DelimToken.prototype.toString = function() { return "DELIM("+this.value+")"; };
-	DelimToken.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.value = this.value;
-		return json;
-	};
-	DelimToken.prototype.toSource = function() {
-		if(this.value == "\\")
-			return "\\\n";
-		else
-			return this.value;
-	};
-
-	function StringValuedToken() { throw "Abstract Base Class"; }
-	StringValuedToken.prototype = Object.create(CSSParserToken.prototype);
-	StringValuedToken.prototype.ASCIIMatch = function(str) {
-		return this.value.toLowerCase() == str.toLowerCase();
-	};
-	StringValuedToken.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.value = this.value;
-		return json;
-	};
-
-	function IdentToken(val) {
-		this.value = val;
-		this.text = val;
-	}
-	IdentToken.prototype = Object.create(StringValuedToken.prototype);
-	IdentToken.prototype.tokenType = "ident";
-	IdentToken.prototype.toString = function() { return "IDENT("+this.value+")"; };
-	IdentToken.prototype.toSource = function() {
-		return escapeIdent(this.value);
-	};
-
-	function FunctionToken(val) {
-		this.value = val;
-		this.text = val;
-		this.mirror = ")";
-	}
-	FunctionToken.prototype = Object.create(StringValuedToken.prototype);
-	FunctionToken.prototype.tokenType = "function";
-	FunctionToken.prototype.toString = function() { return "FUNCTION("+this.value+")"; };
-	FunctionToken.prototype.toSource = function() {
-		return escapeIdent(this.value) + "(";
-	};
-
-	function AtKeywordToken(val) {
-		this.value = val;
-		this.text = val;
-	}
-	AtKeywordToken.prototype = Object.create(StringValuedToken.prototype);
-	AtKeywordToken.prototype.tokenType = "at";
-	AtKeywordToken.prototype.toString = function() { return "AT("+this.value+")"; };
-	AtKeywordToken.prototype.toSource = function() {
-		return "@" + escapeIdent(this.value);
-	};
-
-	function HashToken(val) {
-		this.value = val;
-		this.text = val;
-		this.type = "unrestricted";
-	}
-	HashToken.prototype = Object.create(StringValuedToken.prototype);
-	HashToken.prototype.tokenType = "hash";
-	HashToken.prototype.toString = function() { return "HASH("+this.value+")"; };
-	HashToken.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.value = this.value;
-		json.type = this.type;
-		return json;
-	};
-	HashToken.prototype.toSource = function() {
-		if(this.type == "id") {
-			return "#" + escapeIdent(this.value);
-		} else {
-			return "#" + escapeHash(this.value);
-		}
-	};
-
-	function StringToken(val) {
-		this.value = val;
-		this.text = val;
-	}
-	StringToken.prototype = Object.create(StringValuedToken.prototype);
-	StringToken.prototype.tokenType = "string";
-	StringToken.prototype.toString = function() {
-		return '"' + escapeString(this.value) + '"';
-	};
-
-	function CommentToken(val) {
-		this.value = val;
-	}
-	CommentToken.prototype = Object.create(StringValuedToken.prototype);
-	CommentToken.prototype.tokenType = "comment";
-	CommentToken.prototype.toString = function() {
-		return '/*' + this.value + '*/';
-	}
-	CommentToken.prototype.toSource = CommentToken.prototype.toString;
-
-	function URLToken(val) {
-		this.value = val;
-		this.text = val;
-	}
-	URLToken.prototype = Object.create(StringValuedToken.prototype);
-	URLToken.prototype.tokenType = "url";
-	URLToken.prototype.toString = function() { return "URL("+this.value+")"; };
-	URLToken.prototype.toSource = function() {
-		return 'url("' + escapeString(this.value) + '")';
-	};
-
-	function NumberToken() {
-		this.value = null;
-		this.type = "integer";
-		this.repr = "";
-	}
-	NumberToken.prototype = Object.create(CSSParserToken.prototype);
-	NumberToken.prototype.tokenType = "number";
-	NumberToken.prototype.toString = function() {
-		if(this.type == "integer")
-			return "INT("+this.value+")";
-		return "NUMBER("+this.value+")";
-	};
-	NumberToken.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.value = this.value;
-		json.type = this.type;
-		json.repr = this.repr;
-		return json;
-	};
-	NumberToken.prototype.toSource = function() { return this.repr; };
-
-	function PercentageToken() {
-		this.value = null;
-		this.repr = "";
-	}
-	PercentageToken.prototype = Object.create(CSSParserToken.prototype);
-	PercentageToken.prototype.tokenType = "percentage";
-	PercentageToken.prototype.toString = function() { return "PERCENTAGE("+this.value+")"; };
-	PercentageToken.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.value = this.value;
-		json.repr = this.repr;
-		return json;
-	};
-	PercentageToken.prototype.toSource = function() { return this.repr + "%"; };
-
-	function DimensionToken() {
-		this.value = null;
-		this.type = "integer";
-		this.repr = "";
-		this.unit = "";
-	}
-	DimensionToken.prototype = Object.create(CSSParserToken.prototype);
-	DimensionToken.prototype.tokenType = "dimension";
-	DimensionToken.prototype.toString = function() { return "DIM("+this.value+","+this.unit+")"; };
-	DimensionToken.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.value = this.value;
-		json.type = this.type;
-		json.repr = this.repr;
-		json.unit = this.unit;
-		return json;
-	};
-	DimensionToken.prototype.toSource = function() {
-		var source = this.repr;
-		var unit = escapeIdent(this.unit);
-		if(unit[0].toLowerCase() == "e" && (unit[1] == "-" || between(unit.charCodeAt(1), 0x30, 0x39))) {
-			// Unit is ambiguous with scinot
-			// Remove the leading "e", replace with escape.
-			unit = "\\65 " + unit.slice(1, unit.length);
-		}
-		return source+unit;
-	};
-
-	function escapeIdent(string) {
-		string = ''+string;
-		var result = '';
-		var firstcode = string.charCodeAt(0);
-		for(var i = 0; i < string.length; i++) {
-			var code = string.charCodeAt(i);
-			if(code === 0x0) {
-				throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
-			}
-
-			if(
-				between(code, 0x1, 0x1f) || code == 0x7f ||
-				(i === 0 && between(code, 0x30, 0x39)) ||
-				(i == 1 && between(code, 0x30, 0x39) && firstcode == 0x2d)
-			) {
-				result += '\\' + code.toString(16) + ' ';
-			} else if(
-				code >= 0x80 ||
-				code == 0x2d ||
-				code == 0x5f ||
-				between(code, 0x30, 0x39) ||
-				between(code, 0x41, 0x5a) ||
-				between(code, 0x61, 0x7a)
-			) {
-				result += string[i];
-			} else {
-				result += '\\' + string[i];
-			}
-		}
-		return result;
-	}
-
-	function escapeHash(string) {
-		// Escapes the contents of "unrestricted"-type hash tokens.
-		// Won't preserve the ID-ness of "id"-type hash tokens;
-		// use escapeIdent() for that.
-		string = ''+string;
-		var result = '';
-		for(var i = 0; i < string.length; i++) {
-			var code = string.charCodeAt(i);
-			if(code === 0x0) {
-				throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
-			}
-
-			if(
-				code >= 0x80 ||
-				code == 0x2d ||
-				code == 0x5f ||
-				between(code, 0x30, 0x39) ||
-				between(code, 0x41, 0x5a) ||
-				between(code, 0x61, 0x7a)
-			) {
-				result += string[i];
-			} else {
-				result += '\\' + code.toString(16) + ' ';
-			}
-		}
-		return result;
-	}
-
-	function escapeString(string) {
-		string = ''+string;
-		var result = '';
-		for(var i = 0; i < string.length; i++) {
-			var code = string.charCodeAt(i);
-
-			if(code === 0x0) {
-				throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
-			}
-
-			if(between(code, 0x1, 0x1f) || code == 0x7f) {
-				result += '\\' + code.toString(16) + ' ';
-			} else if(code == 0x22 || code == 0x5c) {
-				result += '\\' + string[i];
-			} else {
-				result += string[i];
-			}
-		}
-		return result;
-	}
-
-	// Exportation.
-	exports.tokenize = tokenize;
-	exports.IdentToken = IdentToken;
-	exports.FunctionToken = FunctionToken;
-	exports.AtKeywordToken = AtKeywordToken;
-	exports.HashToken = HashToken;
-	exports.StringToken = StringToken;
-	exports.BadStringToken = BadStringToken;
-	exports.URLToken = URLToken;
-	exports.BadURLToken = BadURLToken;
-	exports.DelimToken = DelimToken;
-	exports.NumberToken = NumberToken;
-	exports.PercentageToken = PercentageToken;
-	exports.DimensionToken = DimensionToken;
-	exports.IncludeMatchToken = IncludeMatchToken;
-	exports.DashMatchToken = DashMatchToken;
-	exports.PrefixMatchToken = PrefixMatchToken;
-	exports.SuffixMatchToken = SuffixMatchToken;
-	exports.SubstringMatchToken = SubstringMatchToken;
-	exports.ColumnToken = ColumnToken;
-	exports.WhitespaceToken = WhitespaceToken;
-	exports.CDOToken = CDOToken;
-	exports.CDCToken = CDCToken;
-	exports.ColonToken = ColonToken;
-	exports.SemicolonToken = SemicolonToken;
-	exports.CommaToken = CommaToken;
-	exports.OpenParenToken = OpenParenToken;
-	exports.CloseParenToken = CloseParenToken;
-	exports.OpenSquareToken = OpenSquareToken;
-	exports.CloseSquareToken = CloseSquareToken;
-	exports.OpenCurlyToken = OpenCurlyToken;
-	exports.CloseCurlyToken = CloseCurlyToken;
-	exports.EOFToken = EOFToken;
-	exports.CSSParserToken = CSSParserToken;
-	exports.GroupingToken = GroupingToken;
-
-	function TokenStream(tokens) {
-		// Assume that tokens is a iterator.
-		this.tokens = tokens;
-		this.token = undefined;
-		this.stored = [];
-	}
-	TokenStream.prototype.consume = function(num) {
-		if(num === undefined) num = 1;
-		while (num-- > 0) {
-			if (this.stored.length > 0) {
-				this.token = this.stored.shift();
-			} else {
-				var n = this.tokens.next();
-				while (!n.done && n.value instanceof CommentToken) {
-					n = this.tokens.next();
-				}
-				if (n.done) {
-					this.token = new EOFToken();
-					break;
-				}
-				this.token = n.value;
-			}
-		}
-		//console.log(this.i, this.token);
-		return true;
-	};
-	TokenStream.prototype.next = function() {
-		if (this.stored.length === 0) {
-			var n = this.tokens.next();
-			while (!n.done && n.value instanceof CommentToken) {
-				n = this.tokens.next();
-			}
-			if (n.done)
-				return new EOFToken();
-			this.stored.push(n.value);
-		}
-		return this.stored[0];
-	};
-	TokenStream.prototype.reconsume = function() {
-		this.stored.unshift(this.token);
-	};
-
-	function parseerror(s, msg) {
-		console.log("Parse error at token " + s.i + ": " + s.token + ".\n" + msg);
-		return true;
-	}
-	function donothing(){ return true; }
-
-	function consumeAListOfRules(s, topLevel) {
-		var rules = [];
-		var rule;
-		while(s.consume()) {
-			if(s.token instanceof WhitespaceToken) {
-				continue;
-			} else if(s.token instanceof EOFToken) {
-				return rules;
-			} else if(s.token instanceof CDOToken || s.token instanceof CDCToken) {
-				if(topLevel == "top-level") continue;
-				s.reconsume();
-				if(rule = consumeAQualifiedRule(s)) rules.push(rule);
-			} else if(s.token instanceof AtKeywordToken) {
-				s.reconsume();
-				if(rule = consumeAnAtRule(s)) rules.push(rule);
-			} else {
-				s.reconsume();
-				if(rule = consumeAQualifiedRule(s)) rules.push(rule);
-			}
-		}
-	}
-
-	function consumeAnAtRule(s) {
-		s.consume();
-		var rule = new AtRule(s.token.value);
-		while(s.consume()) {
-			if(s.token instanceof SemicolonToken || s.token instanceof EOFToken) {
-				return rule;
-			} else if(s.token instanceof OpenCurlyToken) {
-				rule.value = consumeASimpleBlock(s);
-				return rule;
-			} else {
-				s.reconsume();
-				rule.prelude.push(consumeAComponentValue(s));
-			}
-		}
-	}
-
-	function consumeAQualifiedRule(s) {
-		var rule = new QualifiedRule();
-		while(s.consume()) {
-			if(s.token instanceof EOFToken) {
-				parseerror(s, "Hit EOF when trying to parse the prelude of a qualified rule.");
-				return;
-			} else if(s.token instanceof OpenCurlyToken) {
-				rule.value = consumeASimpleBlock(s);
-				return rule;
-			} else {
-				s.reconsume();
-				rule.prelude.push(consumeAComponentValue(s));
-			}
-		}
-	}
-
-	function consumeAListOfDeclarations(s) {
-		var decls = [];
-		while(s.consume()) {
-			if(s.token instanceof WhitespaceToken || s.token instanceof SemicolonToken) {
-				donothing();
-			} else if(s.token instanceof EOFToken) {
-				return decls;
-			} else if(s.token instanceof AtKeywordToken) {
-				s.reconsume();
-				decls.push(consumeAnAtRule(s));
-			} else if(s.token instanceof IdentToken) {
-				var temp = [s.token];
-				while(!(s.next() instanceof SemicolonToken || s.next() instanceof EOFToken))
-					temp.push(consumeAComponentValue(s));
-				var decl;
-				if(decl = consumeADeclaration(new TokenStream(temp))) decls.push(decl);
-			} else {
-				parseerror(s);
-				s.reconsume();
-				while(!(s.next() instanceof SemicolonToken || s.next() instanceof EOFToken))
-					consumeAComponentValue(s);
-			}
-		}
-	}
-
-	function consumeADeclaration(s) {
-		// Assumes that the next input token will be an ident token.
-		s.consume();
-		var decl = new Declaration(s.token.value);
-		while(s.next() instanceof WhitespaceToken) s.consume();
-		if(!(s.next() instanceof ColonToken)) {
-			parseerror(s);
-			return;
-		} else {
-			s.consume();
-		}
-		while(!(s.next() instanceof EOFToken)) {
-			decl.value.push(consumeAComponentValue(s));
-		}
-		var foundImportant = false;
-		for(var i = decl.value.length - 1; i >= 0; i--) {
-			if(decl.value[i] instanceof WhitespaceToken) {
-				continue;
-			} else if(decl.value[i] instanceof IdentToken && decl.value[i].ASCIIMatch("important")) {
-				foundImportant = true;
-			} else if(foundImportant && decl.value[i] instanceof DelimToken && decl.value[i].value == "!") {
-				decl.value.splice(i, decl.value.length);
-				decl.important = true;
-				break;
-			} else {
-				break;
-			}
-		}
-		return decl;
-	}
-
-	function consumeAComponentValue(s) {
-		s.consume();
-		if(s.token instanceof OpenCurlyToken || s.token instanceof OpenSquareToken || s.token instanceof OpenParenToken)
-			return consumeASimpleBlock(s);
-		if(s.token instanceof FunctionToken)
-			return consumeAFunction(s);
-		return s.token;
-	}
-
-	function consumeASimpleBlock(s) {
-		var mirror = s.token.mirror;
-		var block = new SimpleBlock(s.token.value);
-		block.startToken = s.token;
-		while(s.consume()) {
-			if(s.token instanceof EOFToken || (s.token instanceof GroupingToken && s.token.value == mirror))
-				return block;
-			else {
-				s.reconsume();
-				block.value.push(consumeAComponentValue(s));
-			}
-		}
-	}
-
-	function consumeAFunction(s) {
-		var func = new Func(s.token.value);
-		while(s.consume()) {
-			if(s.token instanceof EOFToken || s.token instanceof CloseParenToken)
-				return func;
-			else {
-				s.reconsume();
-				func.value.push(consumeAComponentValue(s));
-			}
-		}
-	}
-
-	function normalizeInput(input) {
-		if(typeof input == "string")
-			return new TokenStream(tokenize(input));
-		if(input instanceof TokenStream)
-			return input;
-		if(typeof (input.next) == "function")
-			return new TokenStream(input);
-		if(input.length !== undefined)
-			return new TokenStream(input[Symbol.iterator]());
-		else throw SyntaxError(input);
-	}
-
-	function parseAStylesheet(s) {
-		s = normalizeInput(s);
-		var sheet = new Stylesheet();
-		sheet.value = consumeAListOfRules(s, "top-level");
-		return sheet;
-	}
-
-	function parseAListOfRules(s) {
-		s = normalizeInput(s);
-		return consumeAListOfRules(s);
-	}
-
-	function parseARule(s) {
-		s = normalizeInput(s);
-		while(s.next() instanceof WhitespaceToken) s.consume();
-		if(s.next() instanceof EOFToken) throw SyntaxError();
-		var rule;
-		var startToken = s.next();
-		if(startToken instanceof AtKeywordToken) {
-			rule = consumeAnAtRule(s);
-		} else {
-			rule = consumeAQualifiedRule(s);
-			if(!rule) throw SyntaxError();
-		}
-		rule.startToken = startToken;
-		rule.endToken = s.token;
-		return rule;
-	}
-
-	function parseADeclaration(s) {
-		s = normalizeInput(s);
-		while(s.next() instanceof WhitespaceToken) s.consume();
-		if(!(s.next() instanceof IdentToken)) throw SyntaxError();
-		var decl = consumeADeclaration(s);
-		if(decl)
-			return decl;
-		else
-			throw SyntaxError();
-	}
-
-	function parseAListOfDeclarations(s) {
-		s = normalizeInput(s);
-		return consumeAListOfDeclarations(s);
-	}
-
-	function parseAComponentValue(s) {
-		s = normalizeInput(s);
-		while(s.next() instanceof WhitespaceToken) s.consume();
-		if(s.next() instanceof EOFToken) throw SyntaxError();
-		var val = consumeAComponentValue(s);
-		if(!val) throw SyntaxError();
-		while(s.next() instanceof WhitespaceToken) s.consume();
-		if(s.next() instanceof EOFToken)
-			return val;
-		throw SyntaxError();
-	}
-
-	function parseAListOfComponentValues(s) {
-		s = normalizeInput(s);
-		var vals = [];
-		while(true) {
-			var val = consumeAComponentValue(s);
-			if(val instanceof EOFToken)
-				return vals;
-			else
-				vals.push(val);
-		}
-	}
-
-	function parseACommaSeparatedListOfComponentValues(s) {
-		s = normalizeInput(s);
-		var listOfCVLs = [];
-		while(true) {
-			var vals = [];
-			while(true) {
-				var val = consumeAComponentValue(s);
-				if(val instanceof EOFToken) {
-					listOfCVLs.push(vals);
-					return listOfCVLs;
-				} else if(val instanceof CommaToken) {
-					listOfCVLs.push(vals);
-					break;
-				} else {
-					vals.push(val);
-				}
-			}
-		}
-	}
-
-
-	function CSSParserRule() { throw "Abstract Base Class"; }
-	CSSParserRule.prototype.toString = function(indent) {
-		return JSON.stringify(this,null,indent);
-	};
-	CSSParserRule.prototype.toJSON = function() {
-		return {type:this.type, value:this.value};
-	};
-
-	function Stylesheet() {
-		this.value = [];
-		return this;
-	}
-	Stylesheet.prototype = Object.create(CSSParserRule.prototype);
-	Stylesheet.prototype.type = "STYLESHEET";
-
-	function AtRule(name) {
-		this.name = name;
-		this.prelude = [];
-		this.value = null;
-		return this;
-	}
-	AtRule.prototype = Object.create(CSSParserRule.prototype);
-	AtRule.prototype.type = "AT-RULE";
-	AtRule.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.name = this.name;
-		json.prelude = this.prelude;
-		return json;
-	};
-
-	function QualifiedRule() {
-		this.prelude = [];
-		this.value = [];
-		return this;
-	}
-	QualifiedRule.prototype = Object.create(CSSParserRule.prototype);
-	QualifiedRule.prototype.type = "QUALIFIED-RULE";
-	QualifiedRule.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.prelude = this.prelude;
-		return json;
-	};
-
-	function Declaration(name) {
-		this.name = name;
-		this.value = [];
-		this.important = false;
-		return this;
-	}
-	Declaration.prototype = Object.create(CSSParserRule.prototype);
-	Declaration.prototype.type = "DECLARATION";
-	Declaration.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.name = this.name;
-		json.important = this.important;
-		return json;
-	};
-
-	function SimpleBlock(type) {
-		this.name = type;
-		this.value = [];
-		return this;
-	}
-	SimpleBlock.prototype = Object.create(CSSParserRule.prototype);
-	SimpleBlock.prototype.type = "BLOCK";
-	SimpleBlock.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.name = this.name;
-		return json;
-	};
-
-	function Func(name) {
-		this.name = name;
-		this.value = [];
-		return this;
-	}
-	Func.prototype = Object.create(CSSParserRule.prototype);
-	Func.prototype.type = "FUNCTION";
-	Func.prototype.toJSON = function() {
-		var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
-		json.name = this.name;
-		return json;
-	};
-
-	function CSSLexer(text) {
-		this.stream = tokenize(text, {
-			loc: true,
-			offsets: true,
-			keepComments: true
-		});
-		this.lineNumber = 0;
-		this.columnNumber = 0;
-		return this;
-	}
-
-	CSSLexer.prototype.performEOFFixup = function(input, preserveBackslash) {
-		// Just lie for now.
-		return "";
-	};
-
-	CSSLexer.prototype.nextToken = function() {
-		if (!this.stream) {
-			return null;
-		}
-		let v = this.stream.next();
-		if (v.done || v.value.tokenType === "EOF") {
-			this.stream = null;
-			return null;
-		}
-		this.lineNumber = v.value.loc.start.line;
-		this.columnNumber = v.value.loc.start.column;
-		return v.value;
-	};
-
-	// Exportation.
-	exports.CSSParserRule = CSSParserRule;
-	exports.Stylesheet = Stylesheet;
-	exports.AtRule = AtRule;
-	exports.QualifiedRule = QualifiedRule;
-	exports.Declaration = Declaration;
-	exports.SimpleBlock = SimpleBlock;
-	exports.Func = Func;
-	exports.parseAStylesheet = parseAStylesheet;
-	exports.parseAListOfRules = parseAListOfRules;
-	exports.parseARule = parseARule;
-	exports.parseADeclaration = parseADeclaration;
-	exports.parseAListOfDeclarations = parseAListOfDeclarations;
-	exports.parseAComponentValue = parseAComponentValue;
-	exports.parseAListOfComponentValues = parseAListOfComponentValues;
-	exports.parseACommaSeparatedListOfComponentValues = parseACommaSeparatedListOfComponentValues;
-	exports.CSSLexer = CSSLexer;
-
-	}));
-
-
-/***/ },
-/* 74 */
-/***/ function(module, exports) {
-
-	// auto-generated from nsColorNameList.h
-	var cssColors = {
-	  aliceblue: [240, 248, 255],
-	  antiquewhite: [250, 235, 215],
-	  aqua: [0, 255, 255],
-	  aquamarine: [127, 255, 212],
-	  azure: [240, 255, 255],
-	  beige: [245, 245, 220],
-	  bisque: [255, 228, 196],
-	  black: [0, 0, 0],
-	  blanchedalmond: [255, 235, 205],
-	  blue: [0, 0, 255],
-	  blueviolet: [138, 43, 226],
-	  brown: [165, 42, 42],
-	  burlywood: [222, 184, 135],
-	  cadetblue: [95, 158, 160],
-	  chartreuse: [127, 255, 0],
-	  chocolate: [210, 105, 30],
-	  coral: [255, 127, 80],
-	  cornflowerblue: [100, 149, 237],
-	  cornsilk: [255, 248, 220],
-	  crimson: [220, 20, 60],
-	  cyan: [0, 255, 255],
-	  darkblue: [0, 0, 139],
-	  darkcyan: [0, 139, 139],
-	  darkgoldenrod: [184, 134, 11],
-	  darkgray: [169, 169, 169],
-	  darkgreen: [0, 100, 0],
-	  darkgrey: [169, 169, 169],
-	  darkkhaki: [189, 183, 107],
-	  darkmagenta: [139, 0, 139],
-	  darkolivegreen: [85, 107, 47],
-	  darkorange: [255, 140, 0],
-	  darkorchid: [153, 50, 204],
-	  darkred: [139, 0, 0],
-	  darksalmon: [233, 150, 122],
-	  darkseagreen: [143, 188, 143],
-	  darkslateblue: [72, 61, 139],
-	  darkslategray: [47, 79, 79],
-	  darkslategrey: [47, 79, 79],
-	  darkturquoise: [0, 206, 209],
-	  darkviolet: [148, 0, 211],
-	  deeppink: [255, 20, 147],
-	  deepskyblue: [0, 191, 255],
-	  dimgray: [105, 105, 105],
-	  dimgrey: [105, 105, 105],
-	  dodgerblue: [30, 144, 255],
-	  firebrick: [178, 34, 34],
-	  floralwhite: [255, 250, 240],
-	  forestgreen: [34, 139, 34],
-	  fuchsia: [255, 0, 255],
-	  gainsboro: [220, 220, 220],
-	  ghostwhite: [248, 248, 255],
-	  gold: [255, 215, 0],
-	  goldenrod: [218, 165, 32],
-	  gray: [128, 128, 128],
-	  grey: [128, 128, 128],
-	  green: [0, 128, 0],
-	  greenyellow: [173, 255, 47],
-	  honeydew: [240, 255, 240],
-	  hotpink: [255, 105, 180],
-	  indianred: [205, 92, 92],
-	  indigo: [75, 0, 130],
-	  ivory: [255, 255, 240],
-	  khaki: [240, 230, 140],
-	  lavender: [230, 230, 250],
-	  lavenderblush: [255, 240, 245],
-	  lawngreen: [124, 252, 0],
-	  lemonchiffon: [255, 250, 205],
-	  lightblue: [173, 216, 230],
-	  lightcoral: [240, 128, 128],
-	  lightcyan: [224, 255, 255],
-	  lightgoldenrodyellow: [250, 250, 210],
-	  lightgray: [211, 211, 211],
-	  lightgreen: [144, 238, 144],
-	  lightgrey: [211, 211, 211],
-	  lightpink: [255, 182, 193],
-	  lightsalmon: [255, 160, 122],
-	  lightseagreen: [32, 178, 170],
-	  lightskyblue: [135, 206, 250],
-	  lightslategray: [119, 136, 153],
-	  lightslategrey: [119, 136, 153],
-	  lightsteelblue: [176, 196, 222],
-	  lightyellow: [255, 255, 224],
-	  lime: [0, 255, 0],
-	  limegreen: [50, 205, 50],
-	  linen: [250, 240, 230],
-	  magenta: [255, 0, 255],
-	  maroon: [128, 0, 0],
-	  mediumaquamarine: [102, 205, 170],
-	  mediumblue: [0, 0, 205],
-	  mediumorchid: [186, 85, 211],
-	  mediumpurple: [147, 112, 219],
-	  mediumseagreen: [60, 179, 113],
-	  mediumslateblue: [123, 104, 238],
-	  mediumspringgreen: [0, 250, 154],
-	  mediumturquoise: [72, 209, 204],
-	  mediumvioletred: [199, 21, 133],
-	  midnightblue: [25, 25, 112],
-	  mintcream: [245, 255, 250],
-	  mistyrose: [255, 228, 225],
-	  moccasin: [255, 228, 181],
-	  navajowhite: [255, 222, 173],
-	  navy: [0, 0, 128],
-	  oldlace: [253, 245, 230],
-	  olive: [128, 128, 0],
-	  olivedrab: [107, 142, 35],
-	  orange: [255, 165, 0],
-	  orangered: [255, 69, 0],
-	  orchid: [218, 112, 214],
-	  palegoldenrod: [238, 232, 170],
-	  palegreen: [152, 251, 152],
-	  paleturquoise: [175, 238, 238],
-	  palevioletred: [219, 112, 147],
-	  papayawhip: [255, 239, 213],
-	  peachpuff: [255, 218, 185],
-	  peru: [205, 133, 63],
-	  pink: [255, 192, 203],
-	  plum: [221, 160, 221],
-	  powderblue: [176, 224, 230],
-	  purple: [128, 0, 128],
-	  rebeccapurple: [102, 51, 153],
-	  red: [255, 0, 0],
-	  rosybrown: [188, 143, 143],
-	  royalblue: [65, 105, 225],
-	  saddlebrown: [139, 69, 19],
-	  salmon: [250, 128, 114],
-	  sandybrown: [244, 164, 96],
-	  seagreen: [46, 139, 87],
-	  seashell: [255, 245, 238],
-	  sienna: [160, 82, 45],
-	  silver: [192, 192, 192],
-	  skyblue: [135, 206, 235],
-	  slateblue: [106, 90, 205],
-	  slategray: [112, 128, 144],
-	  slategrey: [112, 128, 144],
-	  snow: [255, 250, 250],
-	  springgreen: [0, 255, 127],
-	  steelblue: [70, 130, 180],
-	  tan: [210, 180, 140],
-	  teal: [0, 128, 128],
-	  thistle: [216, 191, 216],
-	  tomato: [255, 99, 71],
-	  turquoise: [64, 224, 208],
-	  violet: [238, 130, 238],
-	  wheat: [245, 222, 179],
-	  white: [255, 255, 255],
-	  whitesmoke: [245, 245, 245],
-	  yellow: [255, 255, 0],
-	  yellowgreen: [154, 205, 50],
-	};
-	module.exports = { cssColors };
-
-
-/***/ },
-/* 75 */
-/***/ function(module, exports) {
-
-	// auto-generated by means you would rather not know
-	var cssProperties = {
-	  "-moz-appearance": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-gtk-info-bar", "-moz-mac-disclosure-button-closed", "-moz-mac-disclosure-button-open", "-moz-mac-fullscreen-button", "-moz-mac-help-button", "-moz-mac-vibrancy-dark", "-moz-mac-vibrancy-light", "-moz-win-borderless-glass", "-moz-win-browsertabbar-toolbox", "-moz-win-communications-toolbox", "-moz-win-exclude-glass", "-moz-win-glass", "-moz-win-media-toolbox", "-moz-window-button-box", "-moz-window-button-box-maximized", "-moz-window-button-close", "-moz-window-button-maximize", "-moz-window-button-minimize", "-moz-window-button-restore", "-moz-window-frame-bottom", "-moz-window-frame-left", "-moz-window-frame-right", "-moz-window-titlebar", "-moz-window-titlebar-maximized", "button", "button-arrow-down", "button-arrow-next", "button-arrow-previous", "button-arrow-up", "button-bevel", "button-focus", "caret", "checkbox", "checkbox-container", "checkbox-label", "checkmenuitem", "dialog", "dualbutton", "groupbox", "inherit", "initial", "listbox", "listitem", "menuarrow", "menubar", "menucheckbox", "menuimage", "menuitem", "menuitemtext", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menupopup", "menuradio", "menuseparator", "meterbar", "meterchunk", "none", "number-input", "progressbar", "progressbar-vertical", "progresschunk", "progresschunk-vertical", "radio", "radio-container", "radio-label", "radiomenuitem", "range", "range-thumb", "resizer", "resizerpanel", "scale-horizontal", "scale-vertical", "scalethumb-horizontal", "scalethumb-vertical", "scalethumbend", "scalethumbstart", "scalethumbtick", "scrollbar", "scrollbar-small", "scrollbarbutton-down", "scrollbarbutton-left", "scrollbarbutton-right", "scrollbarbutton-up", "scrollbarthumb-horizontal", "scrollbarthumb-vertical", "scrollbartrack-horizontal", "scrollbartrack-vertical", "searchfield", "separator", "spinner", "spinner-downbutton", "spinner-textfield", "spinner-upbutton", "splitter", "statusbar", "statusbarpanel", "tab", "tab-scroll-arrow-back", "tab-scroll-arrow-forward", "tabpanel", "tabpanels", "textfield", "textfield-multiline", "toolbar", "toolbarbutton", "toolbarbutton-dropdown", "toolbargripper", "toolbox", "tooltip", "treeheader", "treeheadercell", "treeheadersortarrow", "treeitem", "treeline", "treetwisty", "treetwistyopen", "treeview", "unset", "window", ],
-	  },
-	  "-moz-outline-radius-topleft": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-outline-radius-topright": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-outline-radius-bottomright": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-outline-radius-bottomleft": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-tab-size": {
-	    inherited: true,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "animation-delay": {
-	    inherited: false,
-	    supports: 64,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "animation-direction": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["alternate", "alternate-reverse", "inherit", "initial", "normal", "reverse", "unset", ],
-	  },
-	  "animation-duration": {
-	    inherited: false,
-	    supports: 64,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "animation-fill-mode": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["backwards", "both", "forwards", "inherit", "initial", "none", "unset", ],
-	  },
-	  "animation-iteration-count": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["infinite", "inherit", "initial", "unset", ],
-	  },
-	  "animation-name": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "none", "unset", ],
-	  },
-	  "animation-play-state": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "paused", "running", "unset", ],
-	  },
-	  "animation-timing-function": {
-	    inherited: false,
-	    supports: 256,
-	    values: ["cubic-bezier", "ease", "ease-in", "ease-in-out", "ease-out", "inherit", "initial", "linear", "step-end", "step-start", "steps", "unset", ],
-	  },
-	  "background-attachment": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["fixed", "inherit", "initial", "local", "scroll", "unset", ],
-	  },
-	  "background-clip": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["border-box", "content-box", "inherit", "initial", "padding-box", "unset", ],
-	  },
-	  "background-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "background-image": {
-	    inherited: false,
-	    supports: 648,
-	    values: ["-moz-element", "-moz-image-rect", "-moz-linear-gradient", "-moz-radial-gradient", "-moz-repeating-linear-gradient", "-moz-repeating-radial-gradient", "inherit", "initial", "linear-gradient", "none", "radial-gradient", "repeating-linear-gradient", "repeating-radial-gradient", "unset", "url", ],
-	  },
-	  "background-blend-mode": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["color", "color-burn", "color-dodge", "darken", "difference", "exclusion", "hard-light", "hue", "inherit", "initial", "lighten", "luminosity", "multiply", "normal", "overlay", "saturation", "screen", "soft-light", "unset", ],
-	  },
-	  "background-origin": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["border-box", "content-box", "inherit", "initial", "padding-box", "unset", ],
-	  },
-	  "background-position": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "background-repeat": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "no-repeat", "repeat", "repeat-x", "repeat-y", "unset", ],
-	  },
-	  "background-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-binding": {
-	    inherited: false,
-	    supports: 8,
-	    values: ["inherit", "initial", "none", "unset", "url", ],
-	  },
-	  "block-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "border-block-end-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "border-block-end-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-block-end-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-block-start-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "border-block-start-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-block-start-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-bottom-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "-moz-border-bottom-colors": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-bottom-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-bottom-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-collapse": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["collapse", "inherit", "initial", "separate", "unset", ],
-	  },
-	  "border-image-source": {
-	    inherited: false,
-	    supports: 648,
-	    values: ["-moz-element", "-moz-image-rect", "-moz-linear-gradient", "-moz-radial-gradient", "-moz-repeating-linear-gradient", "-moz-repeating-radial-gradient", "inherit", "initial", "linear-gradient", "none", "radial-gradient", "repeating-linear-gradient", "repeating-radial-gradient", "unset", "url", ],
-	  },
-	  "border-image-slice": {
-	    inherited: false,
-	    supports: 1026,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-image-width": {
-	    inherited: false,
-	    supports: 1027,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-image-outset": {
-	    inherited: false,
-	    supports: 1025,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-image-repeat": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-inline-end-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "border-inline-end-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-inline-end-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-inline-start-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "border-inline-start-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-inline-start-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-left-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "-moz-border-left-colors": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-left-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-left-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-right-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "-moz-border-right-colors": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-right-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-right-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-spacing": {
-	    inherited: true,
-	    supports: 1,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-top-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "-moz-border-top-colors": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-top-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "border-top-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "border-top-left-radius": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-top-right-radius": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-bottom-right-radius": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "border-bottom-left-radius": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "bottom": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "box-decoration-break": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["clone", "inherit", "initial", "slice", "unset", ],
-	  },
-	  "box-shadow": {
-	    inherited: false,
-	    supports: 5,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "box-sizing": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["border-box", "content-box", "inherit", "initial", "padding-box", "unset", ],
-	  },
-	  "caption-side": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["bottom", "bottom-outside", "inherit", "initial", "left", "right", "top", "top-outside", "unset", ],
-	  },
-	  "clear": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["both", "inherit", "initial", "inline-end", "inline-start", "left", "none", "right", "unset", ],
-	  },
-	  "clip": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "color": {
-	    inherited: true,
-	    supports: 4,
-	    values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "-moz-column-count": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["auto", "inherit", "initial", "unset", ],
-	  },
-	  "-moz-column-fill": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["auto", "balance", "inherit", "initial", "unset", ],
-	  },
-	  "-moz-column-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "-moz-column-gap": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "-moz-column-rule-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "-moz-column-rule-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "-moz-column-rule-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "contain": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "layout", "none", "paint", "strict", "style", "unset", ],
-	  },
-	  "content": {
-	    inherited: false,
-	    supports: 8,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-control-character-visibility": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["hidden", "inherit", "initial", "unset", "visible", ],
-	  },
-	  "counter-increment": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "counter-reset": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "cursor": {
-	    inherited: true,
-	    supports: 8,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "direction": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "ltr", "rtl", "unset", ],
-	  },
-	  "display": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-box", "-moz-deck", "-moz-grid", "-moz-grid-group", "-moz-grid-line", "-moz-groupbox", "-moz-inline-box", "-moz-inline-grid", "-moz-inline-stack", "-moz-popup", "-moz-stack", "block", "contents", "flex", "grid", "inherit", "initial", "inline", "inline-block", "inline-flex", "inline-grid", "inline-table", "list-item", "none", "ruby", "ruby-base", "ruby-base-container", "ruby-text", "ruby-text-container", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "unset", ],
-	  },
-	  "empty-cells": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["hide", "inherit", "initial", "show", "unset", ],
-	  },
-	  "align-content": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "align-items": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "align-self": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "flex-basis": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "flex-direction": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["column", "column-reverse", "inherit", "initial", "row", "row-reverse", "unset", ],
-	  },
-	  "flex-grow": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "flex-shrink": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "flex-wrap": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "nowrap", "unset", "wrap", "wrap-reverse", ],
-	  },
-	  "order": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "justify-content": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "justify-items": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "justify-self": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "float": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "inline-end", "inline-start", "left", "none", "right", "unset", ],
-	  },
-	  "-moz-float-edge": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["content-box", "inherit", "initial", "margin-box", "unset", ],
-	  },
-	  "font-family": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-feature-settings": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-kerning": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "none", "normal", "unset", ],
-	  },
-	  "font-language-override": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "normal", "unset", ],
-	  },
-	  "font-size": {
-	    inherited: true,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "large", "larger", "medium", "small", "smaller", "unset", "x-large", "x-small", "xx-large", "xx-small", ],
-	  },
-	  "font-size-adjust": {
-	    inherited: true,
-	    supports: 1024,
-	    values: ["inherit", "initial", "none", "unset", ],
-	  },
-	  "font-stretch": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["condensed", "expanded", "extra-condensed", "extra-expanded", "inherit", "initial", "normal", "semi-condensed", "semi-expanded", "ultra-condensed", "ultra-expanded", "unset", ],
-	  },
-	  "font-style": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "italic", "normal", "oblique", "unset", ],
-	  },
-	  "font-synthesis": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-variant-alternates": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-variant-caps": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["all-petite-caps", "all-small-caps", "inherit", "initial", "normal", "petite-caps", "small-caps", "titling-caps", "unicase", "unset", ],
-	  },
-	  "font-variant-east-asian": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-variant-ligatures": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-variant-numeric": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "font-variant-position": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "normal", "sub", "super", "unset", ],
-	  },
-	  "font-weight": {
-	    inherited: true,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-force-broken-image-icon": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-auto-flow": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-auto-columns": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-auto-rows": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-template-areas": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-template-columns": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-template-rows": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-column-start": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-column-end": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-row-start": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-row-end": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "grid-column-gap": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "grid-row-gap": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "height": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "image-orientation": {
-	    inherited: true,
-	    supports: 16,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-image-region": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "ime-mode": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["active", "auto", "disabled", "inactive", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "inline-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "left": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "letter-spacing": {
-	    inherited: true,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "line-height": {
-	    inherited: true,
-	    supports: 1027,
-	    values: ["-moz-block-height", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "list-style-image": {
-	    inherited: true,
-	    supports: 8,
-	    values: ["inherit", "initial", "none", "unset", "url", ],
-	  },
-	  "list-style-position": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "inside", "outside", "unset", ],
-	  },
-	  "list-style-type": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "margin-block-end": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-block-start": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-bottom": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-inline-end": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-inline-start": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-left": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-right": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "margin-top": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "marker-offset": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "max-block-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "none", "unset", ],
-	  },
-	  "max-height": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "calc", "inherit", "initial", "none", "unset", ],
-	  },
-	  "max-inline-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "calc", "inherit", "initial", "none", "unset", ],
-	  },
-	  "max-width": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "calc", "inherit", "initial", "none", "unset", ],
-	  },
-	  "min-height": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "min-block-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "min-inline-size": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "min-width": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "mix-blend-mode": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["color", "color-burn", "color-dodge", "darken", "difference", "exclusion", "hard-light", "hue", "inherit", "initial", "lighten", "luminosity", "multiply", "normal", "overlay", "saturation", "screen", "soft-light", "unset", ],
-	  },
-	  "isolation": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "isolate", "unset", ],
-	  },
-	  "object-fit": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["contain", "cover", "fill", "inherit", "initial", "none", "scale-down", "unset", ],
-	  },
-	  "object-position": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "offset-block-end": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "offset-block-start": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "offset-inline-end": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "offset-inline-start": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "opacity": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-orient": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["block", "horizontal", "inherit", "initial", "inline", "unset", "vertical", ],
-	  },
-	  "outline-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "outline-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["auto", "dashed", "dotted", "double", "groove", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
-	  },
-	  "outline-width": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
-	  },
-	  "outline-offset": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "overflow-x": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-hidden-unscrollable", "auto", "hidden", "inherit", "initial", "scroll", "unset", "visible", ],
-	  },
-	  "overflow-y": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-hidden-unscrollable", "auto", "hidden", "inherit", "initial", "scroll", "unset", "visible", ],
-	  },
-	  "padding-block-end": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-block-start": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-bottom": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-inline-end": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-inline-start": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-left": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-right": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "padding-top": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "page-break-after": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["always", "auto", "avoid", "inherit", "initial", "left", "right", "unset", ],
-	  },
-	  "page-break-before": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["always", "auto", "avoid", "inherit", "initial", "left", "right", "unset", ],
-	  },
-	  "page-break-inside": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["auto", "avoid", "inherit", "initial", "unset", ],
-	  },
-	  "paint-order": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "pointer-events": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["all", "auto", "fill", "inherit", "initial", "none", "painted", "stroke", "unset", "visible", "visiblefill", "visiblepainted", "visiblestroke", ],
-	  },
-	  "position": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["absolute", "fixed", "inherit", "initial", "relative", "static", "sticky", "unset", ],
-	  },
-	  "quotes": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "resize": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["both", "horizontal", "inherit", "initial", "none", "unset", "vertical", ],
-	  },
-	  "right": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "ruby-align": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["center", "inherit", "initial", "space-around", "space-between", "start", "unset", ],
-	  },
-	  "ruby-position": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "over", "under", "unset", ],
-	  },
-	  "scroll-behavior": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "smooth", "unset", ],
-	  },
-	  "scroll-snap-coordinate": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "scroll-snap-destination": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "scroll-snap-points-x": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "scroll-snap-points-y": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "scroll-snap-type-x": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "mandatory", "none", "proximity", "unset", ],
-	  },
-	  "scroll-snap-type-y": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "mandatory", "none", "proximity", "unset", ],
-	  },
-	  "table-layout": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["auto", "fixed", "inherit", "initial", "unset", ],
-	  },
-	  "text-align": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["-moz-center", "-moz-left", "-moz-right", "center", "end", "inherit", "initial", "justify", "left", "right", "start", "unset", ],
-	  },
-	  "-moz-text-align-last": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "center", "end", "inherit", "initial", "justify", "left", "right", "start", "unset", ],
-	  },
-	  "text-decoration-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "text-decoration-line": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "text-decoration-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-none", "dashed", "dotted", "double", "inherit", "initial", "solid", "unset", "wavy", ],
-	  },
-	  "text-indent": {
-	    inherited: true,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "text-orientation": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "mixed", "sideways", "sideways-right", "unset", "upright", ],
-	  },
-	  "text-overflow": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "text-shadow": {
-	    inherited: true,
-	    supports: 5,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-text-size-adjust": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "none", "unset", ],
-	  },
-	  "text-transform": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["capitalize", "full-width", "inherit", "initial", "lowercase", "none", "unset", "uppercase", ],
-	  },
-	  "transform": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "transform-box": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["border-box", "fill-box", "inherit", "initial", "unset", "view-box", ],
-	  },
-	  "transform-origin": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "perspective-origin": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "perspective": {
-	    inherited: false,
-	    supports: 1,
-	    values: ["inherit", "initial", "none", "unset", ],
-	  },
-	  "transform-style": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["flat", "inherit", "initial", "preserve-3d", "unset", ],
-	  },
-	  "backface-visibility": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["hidden", "inherit", "initial", "unset", "visible", ],
-	  },
-	  "top": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "transition-delay": {
-	    inherited: false,
-	    supports: 64,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "transition-duration": {
-	    inherited: false,
-	    supports: 64,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "transition-property": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["all", "inherit", "initial", "none", "unset", ],
-	  },
-	  "transition-timing-function": {
-	    inherited: false,
-	    supports: 256,
-	    values: ["cubic-bezier", "ease", "ease-in", "ease-in-out", "ease-out", "inherit", "initial", "linear", "step-end", "step-start", "steps", "unset", ],
-	  },
-	  "unicode-bidi": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-isolate", "-moz-isolate-override", "-moz-plaintext", "bidi-override", "embed", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "-moz-user-focus": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["ignore", "inherit", "initial", "none", "normal", "select-after", "select-all", "select-before", "select-menu", "select-same", "unset", ],
-	  },
-	  "-moz-user-input": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "disabled", "enabled", "inherit", "initial", "none", "unset", ],
-	  },
-	  "-moz-user-modify": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["inherit", "initial", "read-only", "read-write", "unset", "write-only", ],
-	  },
-	  "-moz-user-select": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["-moz-all", "-moz-none", "-moz-text", "all", "auto", "element", "elements", "inherit", "initial", "none", "text", "toggle", "tri-state", "unset", ],
-	  },
-	  "vertical-align": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-calc", "-moz-middle-with-baseline", "baseline", "bottom", "calc", "inherit", "initial", "middle", "sub", "super", "text-bottom", "text-top", "top", "unset", ],
-	  },
-	  "visibility": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["collapse", "hidden", "inherit", "initial", "unset", "visible", ],
-	  },
-	  "white-space": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["-moz-pre-space", "inherit", "initial", "normal", "nowrap", "pre", "pre-line", "pre-wrap", "unset", ],
-	  },
-	  "width": {
-	    inherited: false,
-	    supports: 3,
-	    values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
-	  },
-	  "-moz-window-dragging": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["drag", "inherit", "initial", "no-drag", "unset", ],
-	  },
-	  "word-break": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["break-all", "inherit", "initial", "keep-all", "normal", "unset", ],
-	  },
-	  "word-spacing": {
-	    inherited: true,
-	    supports: 3,
-	    values: ["-moz-calc", "calc", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "word-wrap": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["break-word", "inherit", "initial", "normal", "unset", ],
-	  },
-	  "hyphens": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "manual", "none", "unset", ],
-	  },
-	  "writing-mode": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["horizontal-tb", "inherit", "initial", "lr", "lr-tb", "rl", "rl-tb", "sideways-lr", "sideways-rl", "tb", "tb-rl", "unset", "vertical-lr", "vertical-rl", ],
-	  },
-	  "z-index": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["auto", "inherit", "initial", "unset", ],
-	  },
-	  "-moz-box-align": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["baseline", "center", "end", "inherit", "initial", "start", "stretch", "unset", ],
-	  },
-	  "-moz-box-direction": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["inherit", "initial", "normal", "reverse", "unset", ],
-	  },
-	  "-moz-box-flex": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-box-orient": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["block-axis", "horizontal", "inherit", "initial", "inline-axis", "unset", "vertical", ],
-	  },
-	  "-moz-box-pack": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["center", "end", "inherit", "initial", "justify", "start", "unset", ],
-	  },
-	  "-moz-box-ordinal-group": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "-moz-stack-sizing": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["ignore", "inherit", "initial", "stretch-to-fit", "unset", ],
-	  },
-	  "clip-path": {
-	    inherited: false,
-	    supports: 8,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "clip-rule": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["evenodd", "inherit", "initial", "nonzero", "unset", ],
-	  },
-	  "color-interpolation": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "linearrgb", "srgb", "unset", ],
-	  },
-	  "color-interpolation-filters": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["auto", "inherit", "initial", "linearrgb", "srgb", "unset", ],
-	  },
-	  "dominant-baseline": {
-	    inherited: false,
-	    supports: 0,
-	    values: ["alphabetic", "auto", "central", "hanging", "ideographic", "inherit", "initial", "mathematical", "middle", "no-change", "reset-size", "text-after-edge", "text-before-edge", "unset", "use-script", ],
-	  },
-	  "fill": {
-	    inherited: true,
-	    supports: 12,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "fill-opacity": {
-	    inherited: true,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "fill-rule": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["evenodd", "inherit", "initial", "nonzero", "unset", ],
-	  },
-	  "filter": {
-	    inherited: false,
-	    supports: 8,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "flood-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
-	  },
-	  "flood-opacity": {
-	    inherited: false,
-	    supports: 1024,
-	    values: ["inherit", "initial", "unset", ],
-	  },
-	  "image-rendering": {
-	    inherited: true,
-	    supports: 0,
-	    values: ["-moz-crisp-edges", "auto", "inherit", "initial", "optimizequality", "optimizespeed", "unset", ],
-	  },
-	  "lighting-color": {
-	    inherited: false,
-	    supports: 4,
-	    values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle"